最近呢,遇到一个比较尴尬的问题。用的是阿里云的云服务器,ngixn前置机有公网IP,内网的几台apache和mysql及redis都没有公网连接。当我们的server收到支付宝/银联等等其他渠道回调信息时,我们也要通知合作商的服务器(回调)。but,纠结的问题发生了,我们内网的web server是没有公网的…一开始,这个尴尬的问题,是想通过把把nginx前置机作为网关,变成一个路由器,给内部apache连入公网。但是,很快就放弃这个想法了,因为咨询阿里云得出的结论是—云服务器没办法设置成网关!!!后来也想过在nginx前置机装vpn代理出去,但是很快就否决了这个想法,决定使用squid正向代理特定端口出去。
cache_dir ufs /var/spool/squid 100 16 256 read-only
安装squid,yum安装方便快捷咯~~~
squid本身就可以设置只允许内网的机器使用代理,当然,我们的业务要实时的callback,便要关闭squid的缓存,不然在缓存期内,只能一次成功通知合作服务器了
编辑/etc/profile,加入:
http_proxy=http://192.168.20.20:3128 # 分别指定http、https、ftp协议使用的代理服务器地址 https_proxy=http://192.168.20.20:3128 ftp_proxy=http://192.168.20.20:3128 no_proxy=192.168.20. # 访问局域网地址(192.168.20.0/24网段)时不使用代理,可以用逗号分隔多个地址 export http_proxy https_proxy ftp_proxy no_proxy
在前置机squid防火墙上加入开放3128端口给内网的机器
firewall-cmd --zone=public --add-rich-rule="rule family='ipv4' source address='10.170.31.208' port port='3128' protocol='tcp' accept" --permanent
重启防火墙。。。
这样,内网的机器就能上网了。而且因为内网中的多台server都是通过前置机的nginx代理出去的,各个机器的回调日志记录都可以在squid的日志中查到,万一业务出错,log还统一了。
在实际操作过程中,使用php的curl扩展,貌似不能通过/etc/profile设置的代理,需要显示的手动加入
curl_setopt( $ci , CURLOPT_PROXY , "HTTP://10.170.54.139:3128" );
转载请注明:飞嗨 » 内网通过前置机squid代理回调商户服务器(callback)