这周要上线一个项目,有台服务器是内网的所以弄起来比较复杂,搞了好几天才搞好,讲下需求以及解决方案。
客户的其它机器都是在内网环境下的,不可访问外网,a(58.212.225.181)为内网服务器,可通过网闸请求到一台外网服务器c(192.168.158.211),因为网站有很多的外链图片,以及接口请求,把所有的图片都抓回来当然也是可以的,但是我觉得用代理的方式解决更好一些,况且很多接口也是必须要请求外网的,这个时候就要想办法通过代理来出去了。
1
| a(58.212.225.181) --> 通过网闸 192.168.1.100 访问--> c(192.168.158.211)的80 3128端口
|
1
| product.image_url = product.image_url.gsub(/(http:.*\.jpg)/){|m| "/emall_image?url=#{$1}" }
|
在所有图片url之前加上/emall_image?url= 这样所有的图片请求就都会请求内网服务器a,这个时候看一下内网服务器a(58.212.225.181)的nginx配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; proxy_temp_path /home/temp_dir; proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g; resolver 8.8.8.8; server { listen 80; server_name localhost 58.212.225.181; location /emall_image { proxy_pass http://192.168.1.100/emall_image?url=$arg_url; proxy_cache cache_one; proxy_cache_valid 200 302 1h; proxy_cache_valid 301 1d; proxy_cache_valid any 1m; expires 30d; } }
|
这个时候,所有的图片请求就会转发到外网服务器c,这个时候我们在来配置一下,外网服务器c(192.168.158.211)的nginx,配置如下:
1 2 3 4 5 6 7 8
| resolver 8.8.8.8; server { listen 80; server_name localhost 192.168.1.100; location /emall_image { proxy_pass $arg_url; } }
|
到此,内网图片就可以通过两次正向代理转发出去。
接下来说下,内网服务器a接口的请求,因为很多接口请求都是https,搜了下nginx对https支持的不是很好,所以就舍弃了通过nginx来转发https的接口请求,后来选择了squid代理http请求,虽说有点大材小用了,不过用着目前还可以。
在外网服务器c(192.168.158.211)上安装squid
1
| $sudo apt-get install squid3
|
一路默认安装完成后,默认路径为 /etc/squid3,修改squid.conf配置文件,如果没有配置文件,就新建一个,然后添加一下两句最简单的。
1 2
| http_port 3128 http_access allow all
|
配置完成后,启动squid
1 2 3
| $ sudo service squid3 start $ sudo service squid3 stop $ sudo service squid3 restart
|
这个时候代理服务器c就配置好了,然后配置一下内网服务器a,让a(58.212.225.181)请求接口以及apt-get的时候通过代理服务器c(192.168.158.211),来请求外网。
修改 vim .bashrc 添加如下三句
1 2 3
| export http_proxy = http://192.168.1.100:3128 export https_proxy = http://192.168.1.100:3128 export ftp_proxy = http://192.168.1.100:3128
|
然后source .bashrc,这个终端就可以通过代理服务器直接访问外网了,输入命令
1
| $ curl http://www.baidu.com
|
如果请求到了,恭喜你,已经配置成功了,当然我们安装软件的时候也需要用到外网,这个时候就需要配置apt-get 的配置了
添加如下
1 2 3
| Acquire::http::Proxy "http://192.168.1.100:3128" Acquire::https::Proxy "http://192.168.1.100:3128" Acquire::ftp::Proxy "http://192.168.1.100:3128"
|
到此,已经配置完成,就可以直接使用 apt-get install 、git pull等命令了^~^。