nginx配置正向代理支持HTTPS


nginx當正向代理的時候,通過代理訪問https的網站會失敗,而失敗的原因是客戶端同nginx代理服務器之間建立連接失敗,並非nginx不能將https的請求轉發出去。因此要解決的問題就是客戶端如何同nginx代理服務器之間建立起連接。有了這個思路之后,就可以很簡單的解決問題。我們可以配置兩個SERVER節點,一個處理HTTP轉發,另一個處理HTTPS轉發,而客戶端都通過HTTP來訪問代理,通過訪問代理不同的端口,來區分HTTP和HTTPS請求。

#HTTP
server{
resolver 8.8.8.8;
access_log /data/logs/nginx/access_proxy.log main;
listen 80;
location / {
root html;
index index.html index.htm;
proxy_pass $scheme://$host$request_uri;
proxy_set_header HOST $http_host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0k;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_next_upstream error timeout invalid_header http_502;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

#HTTPS
server{
resolver 8.8.8.8;
access_log /data/logs/nginx/access_proxy.log main;
listen 443;
location / {
root html;
index index.html index.htm;
proxy_pass https://$host$request_uri;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0k;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_next_upstream error timeout invalid_header http_502;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
如果訪問HTTP網站,可以直接這樣的方式: curl --proxy proxy_server:80 http://www.taobao.com/
如果訪問HTTPS網站,例如https://www.alipay.com,那么可以使用nginx的HTTPS轉發的server:
curl --proxy proxy_server:443 http://www.alipay.com

 

2013年12月9日補記:

之前nginx配置透明代理的時候,沒有特別針對端口的配置,如果之前的url是http://www.test.com:8080/這樣的地址過來,通過nginx轉發之后實際到了http://www.test.com:80/上面,為了修復這個問題,增加如下配置:

 proxy_pass  http://$host :$cookie_passport$request_uri; 
其中$cookie_是獲取請求中cookie的信息,這個passport的cookie值是原URL中端口號。由此可以看出,如果要通過該NGINX轉發, 需要首先設置一個cookie,這個cookie名為passport,cookie的值為原url中的端口號。
如果使用CURL命令請求鏈接,可以這樣子:
curl -b passport=80 --proxy proxy_server:80 http://www.taobao.com/
其中-b參數是為了添加cookie


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM