2017-12-28 6 views
0

포트 443에서 수신 대기하고 요청을 업스트림 SAAS 클라이언트에 전달하도록 Nginx 역방향 프록시 서버를 구성했습니다. 아래는 구성입니다.잘못된 요청 오류가 발생합니다.

server { 
listen 443; 
server_name test.saas.someloggingserver.com; 

ssl on; 
ssl_certificate C:/nginx-1.13.8/nginx-1.13.8/ssl/server_cert.crt; 
ssl_certificate_key C:/nginx-1.13.8/nginx-1.13.8/ssl/server.key; 

ssl_session_timeout 5m; 
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; 
ssl_prefer_server_ciphers on; 

expires 0; 
add_header Cache-Control private; 

access_log logs/encrypted_access.txt; 
    error_log logs/encrypted_error.txt debug; 

location/{ 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-Proto https; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_redirect  http:// https://; 
proxy_pass   https://test.saas.someloggingserver.com; 
} 
} 

여기서 SSL 인증서에는 업스트림 서버와의 SSL 핸드 셰이크를위한 중간 인증서도 포함됩니다. 이제 내가 IE에서 https://test.saas.someloggingserver.com (위의 프록시를 구성하는 데)에 액세스하려고하면 400 이하의 잘못된 요청 오류가 발생합니다. 나는 아무런 Nginx 디버깅 전문가도 아니며 아래 로그를 살펴보고이 문제의 가능한 원인에 대해 직접 알려 주시면 감사하겠습니다.

2017/12/28 07:04:45 [debug] 14640#9400: post event 02D76250 
2017/12/28 07:04:45 [debug] 14640#9400: delete posted event 02D76250 
2017/12/28 07:04:45 [debug] 14640#9400: accept on 0.0.0.0:443, ready: 0 
2017/12/28 07:04:45 [debug] 14640#9400: malloc: 02D50808:256 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 accept: 10.92.67.192:49268 fd:496 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 event timer add: 496: 60000:2616257381 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 reusable connection: 1 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 select add event fd:496 ev:0 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 post event 02D76340 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 delete posted event 02D76340 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http check ssl handshake 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http recv(): 1 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 plain http 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http wait request handler 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 malloc: 02D4CF80:1024 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 WSARecv: fd:496 rc:0 266 of 1024 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 reusable connection: 0 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 malloc: 02DAF920:4096 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http process request line 
2017/12/28 07:04:45 [info] 14640#9400: *3695 client sent invalid request while reading client request line, client:  10.92.67.192, server: test.saas.someloggingserver.com, request: "CONNECT test.saas.someloggingserver.com:443 HTTP/1.0" 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http finalize request: 400, "?" a:1, c:1 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 event timer del: 496: 2616257381 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http special response: 400, "?" 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http set discard body 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 HTTP/1.1 400 Bad Request 
Server: nginx/1.13.8 
Date: Thu, 28 Dec 2017 07:04:45 GMT 
Content-Type: text/html 
Content-Length: 173 
Connection: close 

2017/12/28 07:04:45 [debug] 14640#9400: *3695 write new buf t:1 f:0 02DB0018, pos 02DB0018, size: 152 file: 0, size: 0 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http write filter: l:0 f:0 s:152 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http output filter "?" 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http copy filter: "?" 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http postpone filter "?" 02DB017C 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 write old buf t:1 f:0 02DB0018, pos 02DB0018, size: 152 file: 0, size: 0 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 write new buf t:0 f:0 00000000, pos 00F25C68, size: 120 file: 0, size: 0 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 write new buf t:0 f:0 00000000, pos 00F25758, size: 53 file: 0, size: 0 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http write filter: l:1 f:0 s:325 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http write filter limit 0 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 WSASend: fd:496, s:325 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http write filter 00000000 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http copy filter: 0 "?" 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http finalize request: 0, "?" a:1, c:1 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 event timer add: 496: 5000:2616202381 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 post event 02D76340 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 delete posted event 02D76340 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http lingering close handler 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 WSARecv: fd:496 rc:0 0 of 4096 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 lingering read: 0 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http request count:1 blk:0 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http close request 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 http log handler 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 free: 02DAF920, unused: 1771 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 close http connection: 496 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 event timer del: 496: 2616202381 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 select del event fd:496 ev:0 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 reusable connection: 0 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 free: 02D4CF80 
2017/12/28 07:04:45 [debug] 14640#9400: *3695 free: 02D50808, unused: 28 
+0

도메인 이름은 모두 동일합니다? 하나의 nginx가 호스팅되고 하나는 프록시로 전달됩니까? –

+0

아니요, 그들은 다릅니다. Nginx는 온 - 프레미스 (on-premises)에서 호스팅되는 반면 트래픽을 전달하는 서버는 SAAS 모델입니다. –

+0

그런 다음'proxy_set_header Host $ host;'를 제거해야합니다. 호스트 호스트 이름을 인식하지 못하거나 기대하지 않는 SAAS에 호스트 이름을 전송하기 때문입니다. –

답변

1

nginx는 역방향 프록시 또는 http 프록시로만 사용할 수 있기 때문에 Apache를 Forward 프록시로 사용할 수 있습니다.

https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#forwardreverse

통상의 순방향

프록시 클라이언트와 발신 서버 사이에 위치하는 중간 서버이다. 원 서버에서 컨텐트를 얻기 위해 클라이언트는 원 서버를 대상으로하는 프록시에 요청을 보냅니다. 그런 다음 프록시는 원본 서버에서 컨텐츠를 요청하고이를 클라이언트로 리턴합니다. 클라이언트는 다른 사이트에 액세스하기 위해 정방향 프록시를 사용하도록 특별히 구성되어야합니다.

일반적으로 전달 프록시는 방화벽으로 제한되는 내부 클라이언트에 인터넷 액세스를 제공하는 데 사용됩니다. 또한 포워드 프록시는 (mod_cache가 제공하는) 캐싱을 사용하여 네트워크 사용을 줄입니다.

앞으로 프록시

ProxyRequests On 
ProxyVia On 

<Proxy "*"> 
    Require host internal.example.com 
</Proxy> 
관련 문제