Nginx之ngx_http_proxy_connect_module模塊

近期由於項目需要使用到https正向代理,而nginx官方模塊僅支持做http正向代理,一番百度學習後發現了該模塊,故今日記錄下此筆記供大家一起學習交流

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.patch
1.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章