飞嗨,欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。(本博已于2015.12.6升级到php7,运行环境php7 php-fpm + nginx1.8.0)

内网通过前置机squid代理回调商户服务器(callback)

Linux lf 2219℃ 0评论

最近呢,遇到一个比较尴尬的问题。用的是阿里云的云服务器,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.conf

 squid.conf

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还统一了。

squid.log

squid.log

在实际操作过程中,使用php的curl扩展,貌似不能通过/etc/profile设置的代理,需要显示的手动加入

curl_setopt( $ci , CURLOPT_PROXY , "HTTP://10.170.54.139:3128" );

curl_pxoxy

curl_pxoxy

转载请注明:飞嗨 » 内网通过前置机squid代理回调商户服务器(callback)

喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情
粤ICP备15018643号-1