Nginx正向代理HTTP与Squid正向代理HTTPS

发布于 2017-12-03 作者 shen100 1286次 浏览 版块 分享

Nginx正向代理HTTP

阿里云GPU物理机本身不能访问外网,只能通过ECS正向代理访问。

确定IP地址

用户应首先确认这几个IP地址: ECS外网IP(不便于透露,本文用XXX.XXX.XXX.XXX表示)和内网IP(实验用10.10.10.10); GPU物理机内网IP(实验用10.239.23.4);

登录ECS跳板机

用户可以用PUTTY工具(Windows环境)或SSH命令(Linux环境)登录ECS,注意应使用ECS外网IP登入。

ssh -l login_name XXX.XXX.XXX.XXX(ECS外网IP)

登录成功后,可以在ECS跳板机上用SSH命令登录GPU物理机:

ssh -l root 10.239.23.4(GPU物理机内网IP)

ECS跳板机上部署代理服务器

先安装Nginx, 用来代理HTTP请求。请注意,Nginx做正向代理服务器是不支持HTTPS连接的,所以客户端只能访问HTTP服务。如果用户需要在物理机上访问HTTPS服务可以选择其他Web服务器做代理, 如squid。Nginx相关配置如下:

server {
    # 设置DNS的IP,可以根据实际情况修改
    resolver 8.8.8.8; 
    # DNS连接超时设置 
    resolver_timeout 5s; 

    # 用于连接客户端的监听端口,也可改为其他端口
    listen 0.0.0.0:8080; 

    # 连接日志,用于记录所有连接建立的情况
    access_log /root/logs/proxy.access.log;   
    
    # 错误日志,用于记录所有错误情况
    error_log  /root/logs/proxy.error.log;

    location / {
        # 允许接入的物理机内网IP
        allow 10.239.23.4;

        # 拒绝为除了上一句指定物理机内网IP之外的所有主机服务
        deny all;         

        proxy_pass $scheme://$host$request_uri;
        proxy_set_header Host $http_host;

        proxy_buffers 256 4k;
        proxy_max_temp_file_size 0;

        proxy_connect_timeout 30;

        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 301 1h;
        proxy_cache_valid any 1m;
    }
}

添加防火墙规则

首先允许GPU物理机IP地址(本文用10.239.23.4,请根据实际情况修改)访问8080端口:

iptables -I INPUT -s 10.239.23.4  -p TCP --dport 8080 -j ACCEPT

查看规则是否生效:

iptables -L -n

可以看到新增了两条规则:

target     prot opt source               destination
ACCEPT     tcp  --  10.239.23.4          0.0.0.0/0           tcp dpt:8080
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8080

在GPU物理机上设置代理

回到GPU物理机终端,进行代理设置。 最简单的方式是使用环境变量,假设ECS内网IP为10.10.10.10(用户需要自行替换为真实ECS内网IP),则可以执行:

export http_proxy=http://10.10.10.10:8080

注意这里的代理服务器端口设置应该和ECS跳板机上nginx配置中监听端口(listen 0.0.0.0:8080)相互对应。 也可以将上述语句放入/etc/profile或~/.bashrc实现登录GPU物理机时自动配置代理服务器。

测试

在GPU物理机上使用不同的工具(如wget)测试外网连接情况,结果如下:

$ wget http://tengine.taobao.org/download/tengine-2.1.1.tar.gz
--2015-09-21 16:15:50--  http://tengine.taobao.org/download/tengine-2.1.1.tar.gz
Connecting to 10.10.10.10:8080... connected.
Proxy request sent, awaiting response... 200 OK
Length: 2062650 (2.0M) [application/octet-stream]
Saving to: ‘tengine-2.1.1.tar.gz’

100%[======================================>] 2,062,650   1014KB/s   in 2.0s

2015-09-21 16:15:52 (1014 KB/s) - ‘tengine-2.1.1.tar.gz’ saved [2062650/2062650]

通过以上测试,验证了GPU物理机已经可以通过ECS正向代理访问外网。

Squid正向代理HTTPS

安装 Squid

yum install squid -y

配置 Squid

vi /etc/squid/squid.conf

找到下图位置,将 deny 修改为 allow

或者指定特定的IP才能被代理

# 定义授权组  
acl server2 src 10.239.23.4
# 允许授权组
http_access allow server2

启动 Squid

配置完成以后,启动squid

systemctl start squid

测试

然后使用wget进行测试。

wget -e "http_proxy=http://10.10.10.10:8080" http://www.qq.com
wget -e "https_proxy=http://10.10.10.10:8080" https://github.com

总结

  • 实际上只用Squid就即能正向代理HTTP,又能正向代理HTTPS,同时设置环境变量http_proxy和https_proxy就行了。

    export http_proxy=http://10.10.10.10:8080
    export https_proxy=http://10.10.10.10:8080
    
  • 允许GPU物理机IP地址(本文用10.239.23.4,请根据实际情况修改)访问8080端口:

    iptables -I INPUT -s 10.239.23.4  -p TCP --dport 8080 -j ACCEPT
    
  • 持久化存储iptables规则

    # 如果不是开机启动,需要执行下面命令
    chkconfig iptables on
    # 保存规则
    service iptables save
    
收藏
暂无回复