代理配置

1. 背景和目标

只有一台服务器 A 能访问外网,服务器 B 不能访问外网,想让 B 可以通过 A 作为代理访问外网。

demo

2. 方案

2.1 方案1 - squid

  1. 安装 squid

    yum install squid
    
  2. 更改配置

    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
    
  3. 重启 squid

    service sshd restart
    
  4. 配置代理

    • 在 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.comhttps://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

文档信息

Search

    Table of Contents