nginx默认不支持https代理
此处使用ngx_http_proxy_connect_module
项目地址http://www.github.com/chobits/ngx_http_proxy_connect_module
编译安装nginx,添加https代理模块
$ wget http://nginx.org/download/nginx-1.15.0.tar.gz
$ tar -xzvf nginx-1.15.0.tar.gz
$ cd nginx-1.15.0/
#git clone 项目后,/path/to/ngx_http_proxy_connect_module/patch/相应版本.patch
$ 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
make && make install 需要gcc相关依赖,可根据报错安装
apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev
sudo apt-get install openssl
sudo apt-get install libssl-dev
mkdir: cannot create directory ‘/usr/local/nginx’: Permission denied
sudo chown your_username /usr/local/nginx
或者
sudo chown -R your_username:your_username /usr/local/
在命令中,将 `your_username` 替换为你的用户名。
安装后配置systemctl命令启动
安装后nginx位置为/usr/local/nginx/,启动方式为
cd /usr/local/nginx/sbin
./nginx
这样不太方便,我们希望配置为systemctl命令启动
创建配置文件
源码安装的nginx在/etc/systemd/system/multi-user.target.wants/目录下是没有nginx.service这个文件的,所以要新建
vim /usr/lib/systemd/system/nginx.service
写入内容:
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
设置开机启动
systemctl enable nginx.service
重载nginx配置文件
systemctl daemon-reload
重新启动nginx服务
systemctl start nginx
查看nginx服务运行状态
systemctl status nginx
nginx.conf配置
编译源代码安装的nginx的conf路径为
/usr/local/nginx/conf/nginx.conf
在其中添加相应端口监听与转发规则
server {
listen 8081;
listen [::]:8081;
# dns resolver used by forward proxying
# 添加ipv6=off可有效减少https代理中502错误
resolver 8.8.8.8 ipv6=off;
# forward proxy for CONNECT request
proxy_connect;
proxy_connect_allow all;
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;
}
}
最后系统防火墙放行相应端口即可通过此端口进行代理访问
常见代理访问方式
curl 代理
curl https://www.baidu.com -v -x http://ip:port
apt 代理
sudo apt-get -o Acquire::http::proxy="http://ip:port" update
docker 代理
在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:port/"
Environment="HTTPS_PROXY=http://proxy.example.com:port/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
查看代理是否设置成功,出现上述信息则成功
sudo dockerinfo
此时docker pull将使用此代理,如在国内可能还需要设置docker镜像源进行加速。