nginx自身不支持https协议转发,可以借助第三方模块:ngx_http_proxy_connect_module
1. 安装:
Download nginx并解压
cd nginx-1.20.1 &&
patch -p1 < /home/[username]/[..]/ngx_http_proxy_connect_module/ngx_http_proxy_connect_module-0.0.2/patch/proxy_connect_rewrite_1018.patch &&
./configure --prefix=/home/[install path]/ --add-module=/home/[username]/[..]/ngx_http_proxy_connect_module-0.0.2/ &&
make -j [n] &&
make install
注意:
- 不同版本nginx需要使用ngx_http_proxy_connect_module-0.0.2/patch/目录下不同的patch,具体看上述ngx_http_proxy_connect_module的github链接;
- 执行patch时要在解压过的nginx源码目录,patch文件中会使用一些基于 相对 路径的逻辑
2. 配置
server {
listen 8848;
server_name localhost;
access_log logs/host.access.log main;
proxy_connect; # 开启proxy_connect
proxy_connect_allow 443 80; # 指定allow对象是443和80端口
location / {
allow [ip1];
allow 127.0.0.1;
deny all;
proxy_pass http://$http_host$request_uri; # 配置proxy
# 以下3行放宽timeout相关配置
proxy_connect_timeout 300;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_set_header Host $host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0k;
root html;
index index.html index.htm;
}
}
3. 测试
使用wget
# export如下两行,wget会使用这两个环境变量来使用代理
export http_proxy=http://127.0.0.1:8848
export https_proxy=http://127.0.0.1:8848
# http
$wget 'http://www.baidu.com'
--2022-07-07 00:39:12-- http://www.baidu.com/
正在连接 127.0.0.1:8848... 已连接。
已发出 Proxy 请求,正在等待回应... 200 OK
长度:2381 (2.3K) [text/html]
正在保存至: “index.html”
100%[==========================================================================>] 2,381 --.-K/s 用时 0s
2022-07-07 00:39:12 (473 MB/s) - 已保存 “index.html” [2381/2381])
# https
$wget 'https://www.baidu.com'
--2022-07-07 00:38:58-- https://www.baidu.com/
正在连接 127.0.0.1:8848... 已连接。
已发出 Proxy 请求,正在等待回应... 200 OK
长度:2443 (2.4K) [text/html]
正在保存至: “index.html.1”
100%[==========================================================================>] 2,443 --.-K/s 用时 0s
2022-07-07 00:38:58 (17.9 MB/s) - 已保存 “index.html.1” [2443/2443])
如上,可以明显看到wget的执行是经过了127.0.0.1:8848这个代理的