2021年Nginx配置搭建HTTPS正向代理服务的2种方式
目錄???????
一、背景
二、Nginx配置方案
三、總結
一、背景
目前Nginx常用的操作就是作為反向代理服務器,還被用于搭建負載均衡,而某些場景下則需要使用正向代理,正向代理的特點如下:
-
客戶端非常明確要訪問的服務器地址;
-
服務器只清楚請求來自哪個代理服務器,而不清楚來自哪個具體的客戶端;
-
正向代理模式屏蔽或者隱藏了真實客戶端信息。
常見的情況是,當開發(fā)好的應用部署在多臺服務器上時,且部分服務器屬于內(nèi)網(wǎng),只有幾臺服務器可以訪問互聯(lián)網(wǎng),那么部署在內(nèi)網(wǎng)的服務器上的應用,如果涉及到調(diào)用第三方互聯(lián)網(wǎng)API的情況時(比如:內(nèi)網(wǎng)調(diào)用微信支付API、內(nèi)網(wǎng)調(diào)用公眾號API等等),在不改變調(diào)用方URL的情況下,可以使用正向代理服務進行網(wǎng)絡調(diào)用。
例如作者目前的環(huán)境就是擁有1臺公網(wǎng)阿里云服務器,多臺內(nèi)網(wǎng)阿里云服務器,部署在內(nèi)網(wǎng)的微服務需要訪問第三方支付接口、第三方短信系統(tǒng)、第三方認證系統(tǒng)等。
二、Nginx配置方案
目前,作者發(fā)現(xiàn)網(wǎng)上這方面相關的文章都沒有寫出一個較好的說明,看起來比較費勁,配置到自己的環(huán)境中有時也不好使,大多數(shù)好使的情況配置的都是HTTP協(xié)議的正向代理,而實際調(diào)用第三方API時,有很多都是HTTPS協(xié)議的,那就需要通過Nginx配置基于HTTPS協(xié)議的正向代理。
本文主要說明基于HTTPS的正向代理配置方案。
方案一:基于客戶端輸入HTTP請求,Nginx代理HTTPS協(xié)議
方案二:基于Nginx三方模塊ngx_http_proxy_connect_module實現(xiàn)HTTPS代理
先來看一下,正常情況下的HTTP協(xié)議的正向代理如何配置?
server?{????????listen?1443; charset utf-8;?????????#DNS解析(核心配置)?????????resolver?10.2.1.10; client_max_body_size 50m;?????????access_log?logs/access_proxy.log;????????location?/?{????????????????proxy_pass?http://$http_host$request_uri; proxy_connect_timeout 10;????????????????proxy_send_timeout?10;????????????????proxy_read_timeout?10;????????????????proxy_redirect?????off; proxy_set_header Host $http_host; proxy_buffers 256 4k; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_502;????????????????proxy_max_temp_file_size?0k; } }如上配置就是一個正常情況下的HTTP協(xié)議的代理,設置完成后重啟Nginx。
測試時,通常有如下幾種配置方式:
1、系統(tǒng)層面配置
/etc/profile文件增加全局系統(tǒng)代理
export HTTP_PROXY=http://ip:1443
2、CURL測試方面配置
curl --proxy?ip:1443?http://www.baidu.com
3、應用方面
Java應用底層網(wǎng)絡連接對象都提供了設置代理的接口,傳遞參數(shù)即可。
而本文梳理的配置方案實現(xiàn)如下:
方案一:基于客戶端輸入HTTP請求,Nginx代理HTTPS協(xié)議
這種方案實現(xiàn)的效果是,改變客戶端的請求協(xié)議為HTTP協(xié)議,然后在Nginx中進行協(xié)議轉換,即可實現(xiàn)對HTTPS協(xié)議的代理,例如想代理https://www.baidu.com,當使用這種方案配置時,客戶端的輸入地址為:http://www.baidu.com,核心配置如下:
server {???listen?1443;???charset?utf-8;???#DNS解析(核心配置)???resolver?10.2.1.10;???client_max_body_size?????50m;???access_log?logs/access_proxy.log;???location?/?{????????proxy_pass?https://$http_host$request_uri;????????set?$fixed_destination?$http_destination;????????if?(?$http_destination?~*?^http(.*)$?)?{???????????set?$fixed_destination?https$1;????????}??????? proxy_set_header?Destination?$fixed_destination;??????? proxy_connect_timeout?10;????????proxy_send_timeout?10;????????proxy_read_timeout?10;????????proxy_redirect?????off;????????proxy_set_header?Host?$http_host;????????proxy_buffers?256?4k;????????proxy_next_upstream?error?timeout?invalid_header?http_502;????????proxy_max_temp_file_size?0k;????????proxy_ssl_server_name?on;????}}該配置增加對HTTP協(xié)議的判斷,并轉換為HTTPS方式,從而實現(xiàn)了Nginx服務器代理HTTPS地址的一種方法。
方案二:基于Nginx三方模塊ngx_http_proxy_connect_module實現(xiàn)HTTPS代理
這種方案需要為Nginx安裝一個第三方的一個模塊,模塊地址為:
https://github.com/chobits/ngx_http_proxy_connect_module
其項目介紹中,已經(jīng)說明了如何安裝該模塊,不過這里我需要補充的是,在執(zhí)行configure時,建議增加上之前Nginx中的配置參數(shù)(nginx -V)方式進行獲取,防止影響之前的Nginx配置。
作者推薦大概的操作如下:
1、根據(jù)Github的介紹,下載模塊并進行patch操作
2、執(zhí)行configure操作(建議加上自己的之前配置)
3、make
4、make upgrade
5、make install
當安裝模塊成功后,Nginx代理HTTPS協(xié)議的地址核心配置如下:
server {??? listen?1443;??? charset?utf-8; #DNS解析(核心配置) resolver 10.2.1.10; client_max_body_size 50m; access_log logs/access_proxy.log;? #need ngx_proxy module??? proxy_connect;??? proxy_connect_allow????????????443?80;??? proxy_connect_connect_timeout??10s;??? proxy_connect_read_timeout?????10s;??? proxy_connect_send_timeout?????10s;?????location?/?{????????proxy_pass?$scheme://$http_host$request_uri;????????proxy_connect_timeout?10; proxy_send_timeout 10; proxy_read_timeout 10; proxy_redirect off; proxy_set_header Host $http_host; proxy_buffers 256 4k; proxy_next_upstream error timeout invalid_header http_502; proxy_max_temp_file_size 0k;????????proxy_ssl_server_name?on; }}這樣當我們的客戶端輸入原始HTTPS地址時,配置了正向代理,即可以實現(xiàn)在不改變客戶端請求的情況下,調(diào)用HTTPS接口。
三、總結
本文介紹了2種方式,用Nginx搭建正向代理服務器:
方案一:基于客戶端輸入HTTP請求,Nginx代理HTTPS協(xié)議
方案二:基于Nginx三方模塊ngx_http_proxy_connect_module實現(xiàn)HTTPS代理
總結
以上是生活随笔為你收集整理的2021年Nginx配置搭建HTTPS正向代理服务的2种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx代理Https设置
- 下一篇: SCCM2007R2 setp by s