linux,  nginx

nginx正向代理

由于默认的nginx发布版本不支持正向代理功能,需要借助ngx_http_proxy_connect_module这个三方插件来完成,所以需编译安装nginx。

下载nginx源码包
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.19.10.tar.gz
tar xf nginx-1.19.10.tar.gz
获取nginx正向代理模块
git clone https://github.com/chobits/ngx_http_proxy_connect_module
通过补丁方法把上述下载的正向代理模块导入到nginx模块存储目录
cd nginx-1.19.10/
patch -p1 < /usr/local/src/ngx_http_proxy_connect_module/patch/proxy_connect.patch
编译安装nginx
./configure --prefix=/opt/nginx --add-module=/tmp/ngx_http_proxy_connect_module
make && make install
编写systemd启动脚本
cat > /etc/systemd/system/nginx.service << EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/opt/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT 
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
启动nginx
systemctl daemon-reload
systemctl start nginx
配置nginx代理
vim  /opt/nginx/conf/nginx.conf
#user  nobody;
worker_processes  1;
worker_rlimit_nofile 60000;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8888;
        server_name                      192.168.1.2;
        resolver                         114.114.114.114;
        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 http://$host;
            #proxy_pass $scheme://$http_host$request_uri;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

          }
        #include client-allow.conf; #主机白名单
        #deny all; #除了主机白名单中的主机,拒绝所有
        error_page  404              /404.html;
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }



}

重启nginx

systemctl restart nginx

防火墙放行8888端口

测试
curl -I --proxy 192.168.1.2:8888  http://www.baidu.com

留言

您的电子邮箱地址不会被公开。 必填项已用 * 标注