暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Nginx正向代理配置

运维DevOps 2023-07-20
2

Nginx除了具备反向代理的功能,也可以进行正向代理,正向代理与反向代理的区别就是,正向代理代理的是客户端,反向代理代理的是服务端,比如我们内网有一台机器需要上网。此时就可以通过正向代理,通过一台有网的机器代理出去,下面演示一个正向代理的例子,实现机器上网。

机器准备:

服务器IP网卡情况Nginx版本角色
机器A:192.168.238.130、192.168.64.130两块网卡(238.130可上网)1.24.0代理服务器
机器B:192.168.64.129一块网卡且不能上网不用安装nginx需要上网的机器

上面两台机器,机器A中有两块网卡,192.168.238.130是可以上网的网卡,192.168.64.130不能上网,机器B网卡与192.168.64.130在同一网段,也是不能上网,两个机器都是通过vmware制作的虚拟机。192.168.238.130机器A网卡情况如图:

192.168.64.129机器B网卡情况如图:

机器A与机器B有一块共同的网卡VMnet1,因此这两块网卡在同一局域网,但是机器B的IP到机器A的网卡192.168.238.130之间是网络不通的,现在的需求就是让机器B通过正向代理来实现上网。

组件准备:

  • Nginx:版本1.24.0

  • ngx_http_proxy_connect_module:Nginx代理模块,这个模块需要与Nginx版本对应,此模块是针对https访问,如果只访问http,那么不需要此模块


Nginx代理模块的GitHub地址为:

    http://www.github.com/chobits/ngx_http_proxy_connect_module
    复制

    查看代理模块与Nginx版本对应情况,1.24.0对应的patch为102101,如图:

    实战

    一、使用ngx_http_proxy_connect_module配置代理

    1、在192.168.238.130机器上编译安装Nginx,同时将代理模块安装进去,如下:

      tar xf nginx-1.24.0.tar.gz
      wget https://github.com/chobits/ngx_http_proxy_connect_module/archive/master.zip
      unzip master.zip
      cd nginx-1.24.0
      #如果提示path没有发现,就执行yum -y install patch
      patch -p1 < root/ngx_http_proxy_connect_module-master/patch/proxy_connect_rewrite_102101.patch
      ./configure --prefix=/usr/local/nginx --add-module=/root/ngx_http_proxy_connect_module-master
      make && make install
      复制

      2、编辑nginx配置文件,添加server模块,如图:

      上图中的代码如下:

        server {
        resolver 8.8.8.8 ipv6=off; #执行DNS,关闭ipv6
        resolver_timeout 10s; #解析超时
        listen 88; #监听端口
        proxy_connect; #启用连接代理功能
        proxy_connect_allow 443 80; #指定代理CONNECT方法可以连接的端口号或范围的列表
        proxy_connect_connect_timeout 20s; #定义客户端与代理服务器建立连接的超时时间
        proxy_connect_read_timeout 20s; #定义客户端从代理服务器读取响应的超时时间
        proxy_connect_send_timeout 20s; #设置客户端将请求传输到代理服务器的超时时间
        location {
        proxy_pass $scheme://$http_host$request_uri;


        proxy_set_header Host $host; #可选
        }
        }
        #$scheme:请求使用的协议,比如 http 或 https
        #$http_host:请求头中的 Host,通常是域名
        #$request_uri:请求的 URI 路径
        复制

        2、登录192.168.64.129机器,配置环境变量,如下:

          vim /etc/profile
          export http_proxy="http://192.168.64.130:88"
          export https_proxy="http://192.168.64.130:88"
          source /etc/profile
          复制

          3、登录192.168.64.129机器,测试是否可以上网,如图:

          从上图可以看出,机器已经可以实现上网功能,有网之后就可以使用类似wget这种命令下载文件了,或其他操作

          注意:使用ngx_http_proxy_connect_module后,我们通过一个88端口即可代理请求80与443端口,如果不使用此模块,就需要单独代理到80,443不支持,Nginx原生不支持正向代理到https

          二、不使用ngx_http_proxy_connect_module模块

          1、修改上述Nginx配置文件中的80端口对应的server,如图:

          2、修改192.168.64.129机器的环境变量,添加内容如下:

            export http_proxy="http://192.168.64.130:80"
            source /etc/profile
            复制

            配置后测试下已经可以上网,如图:

            注意:不使用ngx_http_proxy_connect_module模块的情况下,正向代理是不支持https的,因此如果有https代理请求,建议使用模块,ngx_http_proxy_connect_module模块主要用于支持HTTP CONNECT方法创建隧道代理,Nginx默认不支持CONNECT方法,如果要配置成一个通用的HTTP/HTTPS代理服务器,才需要用到这个模块。

            文章转载自运维DevOps,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论