Nginx之ngx_http_proxy_connect_module模塊
ngx_http_proxy_connect_module模塊主要用於隧道SSL請求的代理服務器
GitHub地址:http://www.github.com/chobits/ngx_http_proxy_connect_module
nginx配置:
server { listen 3300; resolver 114.114.114.114 ipv6=off; proxy_connect; proxy_connect_allow 443 563; proxy_connect_connect_timeout 30s; proxy_connect_read_timeout 30s; proxy_connect_send_timeout 30s; location / { proxy_pass http://$host; proxy_set_header Host $host; } }
通過上配置,可以通過HTTP連接隧道獲得任何https網站。
下面可以本地通過命令?curl進行簡單測試
curl https://www.sina.com/-v -x 127.0.0.1:3300
也可以將瀏覽器配置為將這裏 Nginx 用作代理服務器 ( 比如 Google Chrome HTTP代理設置)
Nginx 版本啟用重寫階段補丁
1.4.x ~ 1.12.x 不是 proxy_connect.patch
1.4.x ~ 1.12.x 是的 proxy_connect_rewrite.patch
1.13.x ~ 1.14.x 不是 proxy_connect_1014.patch1.13.x ~ 1.14.x 是的 proxy_connect_rewrite_1014.patch
proxy_connect.patch 包含宏NGX_HTTP_RPOXY_CONNECT中的邏輯,而配置腳本將自動啟用這裏宏。
默認情況下,MODULE 禁用連接請求的Nginx 重寫階段,這意味著不能使用 if。set。rewrite_by_lua 和其他重寫階段指令。 要啟用這些功能,你應該使用 proxy_connect_rewrite.patch 而不是 proxy_connect.patch。
Nginx安裝方法
$ wget http://nginx.org/download/nginx-1.15.0.tar.gz
$ tar -xzvf nginx-1.15.0.tar.gz
$ cd nginx-1.15.0/
$ patch -p1 < /path/to/ngx_http_proxy_connect_module/patch/proxy_connect.patch
$ ./configure --add-module=/path/to/ngx_http_proxy_connect_module
$ make && make install
OpenResty安裝方法
$ wget https://openresty.org/download/openresty-1.13.6.2.tar.gz
$ tar -zxvf openresty-1.13.6.2.tar.gz
$ cd openresty-1.13.6.2
$ ./configure --add-module=/path/to/ngx_http_proxy_connect_module
$ patch -d build/nginx-1.13.6/ -p 1 < /path/to/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_1014.patch
$ make && make install
指令詳解
proxy_connect
語法:proxy_connect
默認值:none
上下文:server
啟用"連接"http方法支持。
proxy_connect_allow
語法: proxy_connect_allowall | [port.. .] | [port-range.. .]
默認值:443 563
上下文:server
這裏指令指定代理連接方法可以連接的端口號或者範圍的列表。
默認情況下,只啟用默認的https端口( 443 ) 和默認的snews端口( 563 )。
使用這裏指令將覆蓋這裏默認值,並允許僅連接到所列端口。
值 all 將允許所有端口代理。
值 port 將允許指定的端口代理。
port-range 將允許指定的端口範圍進行代理,例如:
proxy_connect_allow 1000-2000 3000-4000; # allow range of port from 1000 to 2000, from 3000 to 4000.
proxy_connect_connect_timeout
語法:proxy_connect_connect_timeout time
默認值:none
上下文:server
定義與已經代理服務器建立連接的超時時間。
proxy_connect_read_timeout
語法:proxy_connect_read_timeout time
默認值:60s
上下文:server
定義從代理服務器讀取響應的超時時間。
超時是在兩個連續讀操作之間設置的,而不是整個響應的傳輸。
如果代理服務器在這裏時間內沒有傳輸任何內容,則關閉連接。
proxy_connect_write_timeout
語法:proxy_connect_write_timeout time
默認值:60s
上下文:server
設置向代理服務器發送請求的超時時間。
超時設置只在兩個連續的寫操作之間設置,而不是整個請求的傳輸。
如果代理服務器在這一次沒有收到任何消息,連接將關閉。
proxy_connect_address
語法: proxy_connect_addressaddress [transparent] | off
默認值:none
上下文:server
指定代理服務器的IP地址。 地址可以包含變量。
特殊值等於 none,它使用從連接請求行主機 NAME 解析的IP地址。
註:如果使用 set $<nginx variable> 和 proxy_connect_address $<nginx variable> 同時,你應該使用 proxy_connect_rewrite.patch,參見安裝插件以獲得更詳細的信息。
proxy_connect_bind
語法:proxy_connect_bind address | off
默認值:none
上下文:server
向代理服務器發出傳出連接來自具有可選端口的指定本地IP地址。
參數值可以包含變量。 特殊值等於 none,這允許系統自動分配本地IP地址和端口。
透明參數允許與代理服務器的傳出連接來源於非本地IP地址,例如,從客戶端的實際IP地址:
proxy_connect_bind $remote_addr transparent;
註:如果使用 set $<nginx variable> 和 proxy_connect_bind $<nginx variable> 同時,你應該使用 proxy_connect_rewrite.patch,參見安裝插件以獲得更詳細的信息。
變量:
$connect_host:
連接請求行的主機 NAME。
$connect_port:
連接請求行的端口。
$connect_addr:
遠程主機的IP地址和端口,比如"192.168.1.5: 12345"。 IP地址從連接請求行的主機 NAME 解析。
Nginx 兼容性
- The latest module is compatible with the following versions of nginx:
- 1.15.8 (mainlain version of 1.15.4+)
- 1.15.2 (2018/08/02 mainlain version of 1.15.x)
- 1.14.0 (stable version of 1.14.x)
- 1.12.1 (stable version of 1.12.x)
- 1.10.3 (stable version of 1.10.x)
- 1.8.1 (stable version of 1.8.x)
- 1.6.3 (stable version of 1.6.x)
- 1.4.7 (stable version of 1.4.x)
OpenResty Compatibility
The latest module is compatible with the following versions of OpenResty:
- 1.13.6 (version: 1.13.6.2)
- 1.15.8 (version: 1.15.8.1rc1)
Tengine Compatibility
This module has been integrated into Tengine 2.3.0.
- Tengine ngx_http_proxy_connect_module documentation
- Merged pull request for Tengine 2.3.0.
以上參考了github頁說明:http://www.github.com/chobits/ngx_http_proxy_connect_module
Nginx之ngx_http_proxy_connect_module模塊