Nginx 正向代理——让内网服务器支持上网

Nginx 正向代理——让内网服务器支持上网 #

2020-12-15 17:44

假设我们有两台机器A和B,A能上网,B不能上网,B能连通A的某个端口,比如说80,443。在A上安装Nginx,并且通过Nginx的正向代理,达到B能上网的目的。

A机器上的操作 #

Nginx 编译安装需要增加一个插件 https://github.com/chobits/ngx_http_proxy_connect_module

  1. 在官方的Github上找到合适的ngx_http_proxy_connect_module 插件版本
nginx version enable REWRITE phase patch
1.4.x ~ 1.12.x NO proxy_connect.patch
1.4.x ~ 1.12.x YES proxy_connect_rewrite.patch
1.13.x ~ 1.14.x NO proxy_connect_1014.patch
1.13.x ~ 1.14.x YES proxy_connect_rewrite_1014.patch
1.15.2 YES proxy_connect_rewrite_1015.patch
1.15.4 ~ 1.16.x YES proxy_connect_rewrite_101504.patch
1.17.x ~ 1.18.0 YES proxy_connect_rewrite_1018.patch
  1. 下载合适的版本,这里下载 proxy_connect_rewrite_1018.patch
  2. 上传插件到服务器,解压到某个目录,比如/usr/local/src
  3. 接下来就是编译安装的时候带上这个插件,如下是官方的例子。更详细的安装过程,可以参考这篇文章 Linux的Nginx 安装
$ tar -xzvf nginx-1.9.2.tar.gz
$ cd nginx-1.9.2/
$ 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
  1. 调整Nginx的配置,增加一个代理的server节点,如下。官方的例子做了小调整
 server {
     listen                         80;

     # dns resolver used by forward proxying
     resolver                       8.8.8.8;

     # forward proxy for CONNECT request
     proxy_connect;
     proxy_connect_allow            443 563;
     proxy_connect_connect_timeout  10s;
     proxy_connect_read_timeout     10s;
     proxy_connect_send_timeout     10s;

     # forward proxy for non-CONNECT request
     location / {
         proxy_pass http://$host;   //http,可以增加一个server节点,支持https。

         proxy_set_header Host $host;
     }
 }

B机器上的操作 #

  1. 增加系统参数,编辑/etc/profile,增加两行配置,假设我们A机器的IP为172.168.1.111,代理端口如上配置的是80
export http_proxy=172.168.1.111:80
export https_proxy=172.168.1.111:80
  1. 让配置生效source /etc/profile
  2. 接下来,见证奇迹的时刻。curl A机器上能访问的域名看下:-)

延伸 #

跑在B上的Java 应用,依然不能访问外网。我们可以通过增加如下的启动参数来让应用通过代理上网。

-Dhttp.proxyHost=172.168.1.111 -Dhttp.proxyPort=80

如果需要访问https协议的站点,参数有些许不通

-Dhttps.proxyHost=172.168.1.111 -Dhttps.proxyPort=80