背景
线上算法服务有一个偶尔触发的逻辑需要访问三方的api,由于生产服务器无法访问外网,因此一直使用代理进行外网访问,最近代理服务器被重装了,由于该代理是前同事装的,导致这台服务器重装时候没有通知相应的人员进行对应的配置保留,进而影响了线上服务。后面需要线上问题修复,问题就推到我这里了。
问题
上述问题解决办法比较清楚,就是在那台重装的服务器上恢复代理(重装代理)。这里以A表示线上服务器(当然不止一台线上服务器, 假设就一台), B表示这台代理服务器,其中A服务器不能直接访问外网,而B能够直接访问外网。假设
A服务器相关配置如下:
- 内网IP
172.20.100.202
- 系统ubuntu 16.04
B服务器相关配置如下
- 内网IP
172.20.100.201
- 系统Ubuntu 16.04
现在问题是A服务器是无法访问外网的,需要使用代理的方法让A通过有外网的B访问外网。
网络设置代理的软件有多种,比如tinyproxy
、squid
等。这里以squid
为解决方案。
解决方案——Squid
由于涉及两个服务器之间的设置,因此整个操作可以分为两个部分:
- 在服务器A上配置代理
- 在服务器B上安装代理程序
在服务器A上配置代理
该步骤比较简单,直接配置环境变量即可。可以在~/.bash_profile
下配置, 在其中添加两行内容:
alias proxy='export http_proxy=http://172.20.100.201:8898;export https_proxy=http://172.20.100.201:8898'
alias unproxy='unset http_proxy https_proxy'
# IP为要连接的代理服务器B,端口是要代理的端口,如下的意思该服务器要通过172.20.100.201服务器的端口8898的代理来访问外网
然后source ~/.bash_profile
,再使用指令
# proxy
# echo $http_proxy,如果能打印出相关代理信息说明操作成功
[root] proxy
[root] echo $http_proxy
http://172.20.100.201:8898
在服务器B上安装代理程序
服务器B是可以访问外网的,这里安装squid,这里采用apt-get的安装方式,没有权限的话加sudo
[root] sudo apt-get install squid
#cd到配置文件目录下
[root] cd /etc/squid/
#备份原始配置文件
[root] sudo cp squid.conf squid.conf_bak
#修改配置文件
[root] sudo vim squid.conf
将squid.conf
配置文件修改内容如下
# 修改端口为代理的端口
http_port 8898
# 加入A服务器的ip,可以有多个
acl computeA1 src 172.20.100.202
acl computeA2 src 172.20.100.203
# 设置http_access能够访问上述服务器
http_access allow computeA1
http_access allow computeA2
# 将http_access deny all注释修改为http_access allow all
# http_access deny all
http_access allow all
- 启动
# 检查语法是否错误[root]
squid -k parse
# 初始化缓存空间[root]
squid -z
[root]Set Current Directory to /var/spool/squid
| Creating missing swap directories
| No cache_dir stores are configured.
# 启动 squid
[root] service squid start
Redirecting to /bin/systemctl start squid.service
#检查端口是否开启成功[root@ali1 squid]# netstat -an | grep 8898
tcp1 0 0 :::8898 :::* LISTEN
注意
如果启动不成功或者检测有问题,可能是cache或者一些存储路径的权限问题,可以先将这些相应的文件夹的权限设置成777
sudo chmod 777 /var/spool/squid
- 测试
使用wget baidu.com
或curl www.baidu.com
在A服务器上操作:
- ping一下,看是否能通:
ping 172.20.100.201
- 之后使用telnet测一下端口号:
telnet 172.20.100.201 8898
- 最后测试内网服务器能否访问外网:
wget baidu.com
[root] wget baidu.com
--xxxx-- http://baidu.com/
Connecting to 172.20.100.201 8898... connected.
Proxy request sent, awaiting response... 200 OK
Length: 81 [text/html]
Saving to: ‘index.html.1’
100%[=================================================================================================================================>] 81 --.-K/s in 0s
(20.7 MB/s) - ‘index.html.1’ saved [81/81]