记录一次 Win10 环境下利用 Nginx 开启代理服务器(支持 HTTPS)的整个过程

场景描述

我自己有两台 Win10 电脑,都在同一局域网,电脑 B 在路由器中被设置了屏蔽百度,因此想在 A 上利用 Nginx 开启一个正向代理的服务器,那么电脑 B 只要配置了 A 上的代理,就也能访问百度了

问题抛出

  • Nginx 正向代理默认不支持 HTTPS ,因此代理后访问 HTTPS 的网站都会失败,解决办法就是使用 Github 上的源码自己编译 Nginx,编译的时候添加 ngx_http_proxy_connect_module 这个模块
  • 自己编译 Nginx 的话在 Linux 环境下进行要比 Win10 方便很多,那 Win10 下怎么办?好在 Win 10 的商店中有 Ubuntu 应用,下载安装即可

第一步,下载安装 Ubuntu

打开微软商店,搜索 Ubuntu,发现有好几个版本,随便找一个版本下载安装即可
安装完后以管理员模式打开应用,按照提示输入用户名密码即可
过程中若出现下面报错

Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x8007019e
The Windows Subsystem for Linux optional component is not enabled. Please enable it and try again.
See https://aka.ms/wslinstall for details.
Press any key to continue...

打开控制面板--程序和功能--启动或关闭 Windows 功能勾选适用于 Linux 的 Windows 子系统,重启即可

第二步,下载 Nginx 源码以及 ngx_http_proxy_connect_module 模块

切换到 cd /usr/local/src 目录

cd /usr/local/src

下载 Nginx 源码并解压

sudo wget http://nginx.org/download/nginx-1.9.12.tar.gz
sudo tar -xzvf nginx-1.9.12.tar.gz

下载 ngx_http_proxy_connect_module 模块

sudo git clone https://github.com/chobits/ngx_http_proxy_connect_module.git

第三步,配置 Nginx

切换到 nginx-1.9.12 目录

cd nginx-1.9.12

配置 Nginx

sudo ./configure --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-threads  --add-module=/usr/local/src/ngx_http_proxy_connect_module

配置过程中若报 C compiler cc is not found 的错误,表示缺少 C 编译器,可尝试安装 build-essential 模块

sudo apt-get install build-essential

配置过程中若报 the HTTP rewrite module requires the PCRE library,则需安装 PCRE 模块

sudo apt-get install libpcre3 libpcre3-dev

配置过程中若报 SSL modules require the OpenSSL library,则需要安装 SSL 相关模块

sudo apt-get install openssl libssl-dev

配置过程中若报 the HTTP gzip module requires the zlib library,则需要安装 zlib 相关模块

sudo apt-get install zlib1g-dev

第四步,编译安装 Nginx

sudo make && sudo make install

过程中若报 all warnings being treated as errors,解决办法如下:

  • 打开当前目录(nginx-1.9.12)中 objs 子目录下的 Makefile 文件
      sudo vim objs/Makefile
  • 删掉 -Werror 字样

过程中若报 'struct crypt_data' has no member named 'current_salt',解决办法为:

  • 找到错误提示中的文件
      sudo vim src/os/unix/ngx_user.c
  • 注释掉 cd.current_salt[0] = ~salt[0];

过程中若报 storage size of 'md' isn't known,说明上文通过 apt-get 安装的 Openssl 版本太高,与 Nginx 版本不匹配,解决方法如下:

  • 切换目录到 /usr/local/src
      cd /usr/local/src
  • 获取安装包并解压
      sudo wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz
      sudo tar -zxvf openssl-1.0.1t.tar.gz
  • configure 添加配置时指定 openssl
      sudo ./configure --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-threads --with-openssl=/usr/local/src/openssl-1.0.1t --add-module=/usr/local/src/ngx_http_proxy_connect_module

如果 Nginx 安装成功,会在 /usr/local/ 目录下多出一个 'nginx' 目录

第五步,给 Nginx 添加软连接并启动

添加软连接

sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/

回到用户目录,启动 Nginx

cd ~
sudo nginx -v

测试一下 Nginx 是否安装成功

sudo nginx -v

第六步,配置 Nginx 正向代理

打开 nginx.conf

sudo vim nginx.conf

添加以下配置

server {
    listen                         3128;

    # dns resolver used by forward proxying
    resolver                       114.114.114.114;

    # 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;
        proxy_set_header Host $host;
    }
}

配置完后重启 Nginx

sudo nginx -s reload

第七步,电脑 B 设置代理

  • 设置 -> 网络和 Internet -> 代理 -> 手动设置代理
  • 填入地址和端口号,地址为 A 的 IP 地址,端口为 nginx.conf 配置中的端口,本次演示的端口为 3128,然后点击保存按钮

效果验证

电脑 B 打开浏览器,输入 https://www.baidu.com/ ,不出意外的话应该是可以访问了

除特殊说明外本人博客均属原创,转载请注明出处:http://blog.johnhan.cn/blog_1092.html
京ICP备19044523号-1