shadowsocks+privoxy以調用國外站點的接口

    背景:前段時間公司拓展海外業務,由於當時一些資源(數據庫,緩存)是和國內業務共用的,所以承載海外業務的服務器也選在了國內。項目上線期間,開發給提出要調用facebook和twitter接口的需求,要讓系統×××訪問https://graph.facebook.com
    過程:1、搭建shadowsocks服務
    先在香港買了一臺低配(1核1G,centos 6.8系統)阿里雲服務器A做爲跳板。
    在A機器上安裝ss服務端:
    1>yum install -y python-pip
    2>pip install shadowsocks
    直接命令行啓動服務:ssserver -p 4438 -k 51cto -m rc4-md5 --user nobody -d start
    監聽4438端口,密碼51cto,加密方法rc4-md5

    2、搭建ss客戶端和privoxy
    由於shadowsocks不支持http和https協議,而要訪問的接口都是https協議,所以很顯然只用ss服務是達不到目的的。這裏結合privoxy代理共同轉發請求:先將https請求轉發到privoxy,在由privoxy轉發給shadowsocks,最後由在香港的shadowsocks服務端代理出去。
    在需要×××調用海外接口的服務器上安裝ss客戶端和privoxy,見下方腳本:

cat proxy_php.sh
#!/bin/bash
#proxy for haiwaiapp
#written by xjm

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
export PATH

WORKSPACE=/workspace/conf
PRIVOXY=/etc/privoxy
PROFILE=/etc/profile

install_ss(){
yum install -y python-pip
pip install shadowsocks
if [ $? -nt 0 ]
then
echo "ss install failed!"
exit "101"
fi
echo '{
"server":"A ip",
"server_port":4438,
"local_address":"127.0.0.1",
"local_port":1080,
"password":"51ct0",
"timeout":300,
"method":"rc4-md5",
"fast_open": false,
"workers": 1
}' >>/etc/shadowsocks.json
}

install_privoxy(){
yum install -y privoxy
if [ $? -nt 0 ]
then
echo "privoxy install failed!"
exit "201"
fi
echo "actionsfile pac.action
forward-socks5 / 127.0.0.1:1080 ." >> $PRIVOXY/config
echo "{{alias}}
direct = +forward-override{forward .}
shadowsocks = +forward-override{forward-socks5 127.0.0.1:1080 .}

#default
{direct}
/

#shadowsocks
{shadowsocks}
.twitter.com
.facebook.com" > $PRIVOXY/pac.action

}

php_conf(){
echo "export https_proxy=http://127.0.0.1:8118" >>${PROFILE}
chmod 777 ${PROFILE}
source ${PROFILE}
echo "env[https_proxy] = \$https_proxy" >> ${WORKSPACE}/php-fpm.conf
sed -i "27i . /etc/profile" /etc/init.d/php56-php-fpm
sed -i '/variables_order =/s/GPCS/EGPCS/g' ${WORKSPACE}/php.ini
service php56-php-fpm restart
if [ $? -nt 0 ]
then
echo "php config failed!"
exit "301"
fi
}

grep privoxy /etc/passwd
if [ $? -nt 0 ]
then
useradd privoxy
fi
install_ss
nohup sslocal -c /etc/shadowsocks.json /dev/null 2>&1 &
sleep 5
tmp=ps -ef |grep sslocal |grep -v "grep" |wc -l
[ ${tmp} -eq 1 ] && echo "sslocal start success" || echo "sslocal start failedplease check"
install_privoxy
php_conf
privoxy --user privoxy /etc/privoxy/config &
sleep 5
tmp=ps -ef |grep privoxy |grep -v "grep" |wc -l
[ ${tmp} -eq 1 ] && echo "privoxy start success" || echo "privoxy start failedplease check"

3、配置說明
/etc/shadowsocks.json裏的配置爲需要訪問的服務端的配置
/etc/privoxy/pac.action是智能分流功能,只轉發{shadowsocks}裏配置的域名
腳本里關於php配置的部分是由於業務代碼是php寫的,需要在php-fpm啓動的時候加載https_proxy以控制調用接口的代碼走本機的8118端口
最後是ss客戶端和privoxy的啓動
其中ss客戶端sslocal監聽127.0.0.1:1080,privoxy監聽127.0.0.1:8118

4、測試
部署前
shadowsocks+privoxy以調用國外站點的接口
部署後
shadowsocks+privoxy以調用國外站點的接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章