1. 背景和目标
只有一台服务器 A 能访问外网,服务器 B 不能访问外网,想让 B 可以通过 A 作为代理访问外网。
2. 方案
2.1 方案1 - squid
安装
squid
yum install squid
更改配置
vim /etc/squid/squid.conf ... http_access allow localhost http_access allow lan http_access deny all .... # 修改源 IP acl lan src 192.168.0.10 10.10.0.0/24 # 修改端口 http_port 3128
重启 squid
service sshd restart
配置代理
在 Linux 上:
export http_proxy=http://{服务器 A IP}:{squid 端口} export https_proxy=http://{服务器 A IP}:{squid 端口}
在 windows 上
略
2.2 方案2 - nginx
在 nginx 存在正/反向 nginx, 详情如下:
nginx官方并不支持直接转发https请求,如需要,得单独安装模块
- 安装 nginx
cd /usr/local/nginx
$ wget http://nginx.org/download/nginx-1.9.2.tar.gz
$ tar -xzvf nginx-1.9.2.tar.gz
$ cd /usr/local/nginx/nginx-1.9.2
$ make && make install
添加新模块到 nginx
$ cd /usr/local/nginx/nginx-1.9.2 $ patch -p1 < /usr/local/nginx/ngx_http_proxy_connect_module/patch/proxy_connect.patch $ ./configure --add-module=/usr/local/nginx/ngx_http_proxy_connect_module $ make && make install chown -R nginx:nginx /usr/local/nginx chown root:root /usr/local/nginx/sbin/nginx chmod +s /usr/local/nginx/sbin/nginx
更新配置(正向代理)
#正向代理转发http请求 server { #指定DNS服务器IP地址 resolver 114.114.114.114; #监听80端口,http默认端口80 listen 80; #服务器IP或域名 server_name localhost; #正向代理转发http请求 location / { proxy_pass http://$host$request_uri; proxy_set_header HOST $host; proxy_buffers 256 4k; proxy_max_temp_file_size 0k; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_next_upstream error timeout invalid_header http_502; } } #正向代理转发https请求 server { #指定DNS服务器IP地址 resolver 114.114.114.114; #监听443端口,https默认端口443 listen 443; #正向代理转发https请求 proxy_connect; proxy_connect_allow 443 563; proxy_connect_connect_timeout 10s; proxy_connect_read_timeout 10s; proxy_connect_send_timeout 10s; location / { proxy_pass http://$host; proxy_set_header Host $host; } }
检查配置(正向代理)
/usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload
访问(正向代理)
客户端要访问
http://www.baidu.com
和https://www.baidu.com
Linux 访问
curl http://www.baidu.com/ -v -x 127.0.0.1:80 curl https://www.baidu.com/ -v -x 127.0.0.1:443
Windows 访问 IE->右上角 ->工具 ->Internet选项->连接->局域网(LAN)设置 ->配置代理IP和端口,去掉
自动检测设置
的勾选
更新配置(反向代理)
# vi /usr/local/nginx/conf/nginx.conf #反向代理+负载均衡 upstream reverseProxyServer{ #负载均衡应用服务器A: 权重为10,10s内连接请求失败2次,nginx在10s内认为server是不可用的,将不在发送请求给这台服务器 server 应用服务器A的IP:8080 weight=10 max_fails=2 fail_timeout=10s; #负载均衡应用服务器B: 代理服务器权重为5,10s内连接请求失败2次,nginx在10s内认为server是不可用的,将不在发送请求给这台服务器 server 应用服务器B的IP:8080 weight=5 fail_timeout=10s max_fails=2; #负载均衡应用服务器C: 代理服务器权重为5,10s内连接请求失败2次,nginx在10s内认为server是不可用的,将不在发送请求给这台服务器 server 应用服务器C的IP:8080 weight=5 fail_timeout=10s max_fails=2; } server { #监听80端口,http默认端口80 listen 80; #服务器IP或域名 server_name localhost; #反向代理请求路径中含有/visitme的所有请求到upstream定义的对应反向代理模块 location /visitme { proxy_pass http://reverseProxyServer; } }
检查配置(反向代理)
/usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload
访问(反向代理)
客户访问
http://代理服务器IP:8080/visitme/ReverseProxy1.html
文档信息
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)