APJP一个PHP/JAVA代理实现之详细教程
前言
自APJP更新到0.8.1,和以往的版本有著不同,把APJP分為
- APJP_REMOTE-x.x.x.zip
- APJP_REMOTE_APPENGINE-x.x.x.zip
- APJP_LOCAL-x.x.x.zip
- APJP_LOCAL_ANDROID-x.x.x.zip
- APJP_KEY-x.x.x.zip
這些文件合組成APJP全部,可以選擇搭建於PHP或GAE平台上。
組成APJP的文件簡介及部署
文件簡介
- APJP_REMOTE-0.8.2 為PHP主機平台上的服務器所需文件,裡面包含HTTP.php,HTTPS.php,HTTP.properties.php,HTTPS.properties.php和README.txt五個文件。
- APJP_REMOTE_APPENGINE-0.2.2 為部署在Google App Engine平台上的文件,裡面包含一個war目錄和README.txt,war目錄裡的WEB-INF目錄含有classes目錄,lib目 錄,appengine-web.xml,web.xml和logging.properties三個文件。(不熟悉命令行的,建議存放路徑 E:\APJP\APJP_REMOTE_APPENGINE,下面示例要用)
- APJP_LOCAL 是電腦上(Linux/Windows/Mac)的客戶端,其中包含APJP.bat, APJP.sh, APJP.jar, APJP.properties, README.txt,APJP_UI.bat,APJP_UI.sh和APJP.png八個文件。
- APJP_LOCAL_ANDROID 是Android(安卓)移動系統(Tablet/mobile)的客戶端,有一個APJP_ANDROID.apk的安裝文件和README.txt。
- APJP_KEY 取代了以往的KEY.php和GAE的KEY文件,再不需要上傳訪問文件得到APJP所需鑰匙,改為在本地產生隨機的16位字符及數字組合,裡面包含APJP_KEY.bat,APJP_KEY.sh,APJP_KEY.jar和一個README.txt。
部署APJP服務器(PHP主機平台)
- APJP部署到PHP主機,需要主機有如下條件:
- 支援PHP,版本需要是5.0.0 或以上
- 支援MCRYPT,版本需要是2.5.6 或以上
- 支援OpenSSL,版本需要是0.9.6 或以上
一般常見的Cpanel web hosting大多數會適合部署APJP的PHP服務器端,以下為部署方法,以Windows 7 為例,Linux/Mac用戶步驟相同,只需注意使用的文件對應系統。
一. 轉到APJP_KEY 目錄,執行APJP_KEY.bat,會顯示一個APJP的鑰匙,類似 APJP_KEY=FkPMd40j6vzfsEbf
二. 以文本編輯器,例如記事本(Notepad),Notepad2,或Notepad++等編輯APJP_REMOTE 目錄裡的HTTP.properties.php 和HTTPS.properties.php, (右鍵,打開方式,選擇記事本打開)找尋
$APJP_KEY = '';
以上述的APJP鑰匙作為例子,修改為
$APJP_KEY = 'FkPMd40j6vzfsEbf';
儲存文件變更並離開。
三. 登錄Cpanel web hosting, 通常會提供一個file manager作為上傳文件的媒介,或者在本地使用ftp客戶端,把HTTP.php, HTTP.properties.php, HTTPS.php和HTTPS.properties.php上傳到主機的/public_html, 有些非Cpanel web hosting的主機可能提供ssh登錄,也可使用scp上傳文件,但目錄名字可能不是public_html,而是其他的目錄名字.例如www,可用以 下命令上傳.假設APJP_REMOTE在$HOME目錄cd ~/APJP_REMOTE ; scp HTTP.php user@host:~/www/ ,這樣就把文件上傳到主機。【免费PHP空间使用APJP搭建代理详细教程 http://igfw.net/archives/5508 】
這就完成部署PHP主機平台上的服務器端,自APJP-0.8.0以後,已支援最多10個服務器,如果部署多於1個主機,除不需再執行APJP_KEY.bat之外,其它步驟相同,請使用同一個的APJP鑰匙。
部署APJP服務器(GAE平台)
- Google Appication Engine是google提供的雲服務器主機,免費用戶最高可部署10個應用,每個應用每天可使用1Gb數據流量,限制文件上傳下載為1Mb, 支援JAVA及Python環境,搭建APJP於GAE平台,需要滿足如下條件:
- 需要一個gmail賑號,然後到 https://appengine.google.com 開通GAE免費服務(要驗證手機號,中國+86 1××××××××××)
- 開通後創建一個應用,該應用的網址為 http(s)://your-app-id.appspot.com,your-app-id是自行選取的名稱
- 下載Google 應用服務引擎 SDK並安裝,下載點為
下載Java專用的Google應用服務引擎SDK,然後解壓,(不熟悉命令行的,建議存放路徑F:\APJP_REMOTE_APPENGINE,下面示例要用)
一. 編輯E:\APJP_REMOTE_APPENGINE\war\WEB-INF\appengine-web.xml 文件,(右鍵,編輯,即記事本編輯) 尋找
<application></application>
變更為
<application>your-app-id</application>
往下編輯,填入APJP_KEY.bat產生的鑰匙
<property name="APJP_KEY" value=""></property>
變更為
<property name="APJP_KEY" value="FkPMd40j6vzfsEbf"></property>
儲存變更並離開。 二. 運行命令提示符,快捷鍵『Windows徽標鍵+R』彈出運行程序>輸入:“cmd”>
點擊:確定>彈出命令提示符
三. 轉到目錄JAVA SDK目錄下執行(如果上面兩處建議存放的文件路徑一樣的話,可以直接複製命令行,接著回車,一次一條)
F: cd F:\appengine-java-sdk-1.6.0\bin appcfg update E:\APJP\APJP_REMOTE_APPENGINE\war\
該命令會自行上傳所需文件到GAE建立的應用上,過程中會提示輸入gmail賑號和密碼(有時干擾嚴重,要VPN才能上傳成功的,演示是一次成功的。)
成功後,和部署服務器到PHP主機一樣,可部署多於1個APJP應用,請重複前述步驟
由於在中國大陸訪問appengine.google.com可能會出現困難,請於本項目wiki裡的條目
設定電腦上的客戶端
- 要使用APJP代理方案,仍需設定APJP在電腦系統上的客戶端,運行APJP客戶端,系統(Linux/Windows/Mac)需要安裝JAVA,版本1.6.0 或以上
一. 假設APJP_LOCAL 在$HOME目錄,以文本編緝器編緝$HOME/APJP_LOCAL/APJP.properties
- 修改APJP_KEY= 為 APJP_KEY=FkPMd40j6vzfsEbf
這鑰匙和上傳到GAE或PHP平台服務器文件裡的鑰匙必需相同,否則不能正常工作。
2. 往下是兩項設定瀏覽器的User-Agent識別,共5項
APJP_REQUEST_PROPERTY_KEY_X= APJP_REQUEST_PROPERTY_VALUE_X=如有需要可改動,例如
APJP_REQUEST_PROPERTY_KEY_1=User-Agent APJP_REQUEST_PROPERTY_VALUE_1=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2
默認的 User-Agent 為 Java ,為免防火牆在頭文件檢測客戶端類形,改動這裡可把APJP偽裝成瀏覽器,把APJP發出的請求包裝成瀏覽器的請求,
如果設定了五個 User-Agent ,則每次請求的客戶端類形都不一樣,這樣可防止特別的客戶端頭文件被監聽引起封鎖,不想修改留空即可。
3. 再下來是本地代理端口和日誌設定,用作處理所有HTTP和HTTPS請求,設定如下
APJP_LOCAL_PROXY_SERVER_ADDRESS=127.0.0.1 APJP_LOCAL_PROXY_SERVER_PORT=10000 APJP_LOCAL_PROXY_SERVER_LOGGER_LEVEL=2
如沒特別需要,可以跳過。
4. 往下為3個設定
APJP_LOCAL_HTTP_PROXY_SERVER_ADDRESS=127.0.0.1 APJP_LOCAL_HTTP_PROXY_SERVER_PORT=10080 APJP_LOCAL_HTTP_PROXY_SERVER_LOGGER_LEVEL=2
這是程序和APJP本地的http通訊端口,如無特別需要,可使用默認設定。
5. 再往下2個
APJP_LOCAL_HTTP_SERVER_ADDRESS=127.0.0.1 APJP_LOCAL_HTTP_SERVER_PORT=11080
這兩項是設定服務器和客戶端的通訊端口,如無特別需要,使用默認即可。
6. APJP_LOCAL_HTTP_SERVER_URL_X= ,X是數字,由1~10,這是設定你的服務器位址,
例如:
APJP_LOCAL_HTTP_SERVER_URL_1=http(s)://www.abc.com/HTTP.php或
APJP_LOCAL_HTTP_SERVER_URL_1=http(s)://your-appid.appspot.com/HTTP
如部署一個以上的服務器,請順序填入正確網址,APJP客戶端可以支援10個服務器,並可混合使用。
7. 再下來是
APJP_LOCAL_HTTPS_PROXY_SERVER_ADDRESS=127.0.0.1 APJP_LOCAL_HTTPS_PROXY_SERVER_PORT=10443 APJP_LOCAL_HTTPS_PROXY_SERVER_LOGGER_LEVEL=2
這些是程序和本地客戶端的ssl連接通訊端口和日誌等級,無特別需要可用默認設定。
8. 往下是
APJP_LOCAL_HTTPS_SERVER_ADDRESS=127.0.0.1 APJP_LOCAL_HTTPS_SERVER_PORT=11443
服務器和客戶端以ssl連線的通訊端口,無特別需要可不設定,使用默認設定即可。
9. APJP_LOCAL_HTTPS_SERVER_URL_X= ,是用來設定ssl連線的服務器地址,和APJP_LOCAL_HTTP_SERVER_URL_X= 設定一樣,X數字由1~10,可設定10個服務器,
例如:
APJP_LOCAL_HTTPS_SERVER_URL_1=http(s)://www.abc.com/HTTPS.php或
APJP_LOCAL_HTTPS_SERVER_URL_1=http(s)://your-appid.appspot.com/HTTPS
如多於一個GAE或PHP主機服務器,請順序寫入正確網址。
最后,10. 設定是
APJP_HTTP_PROXY_SERVER_ADDRESS= APJP_HTTP_PROXY_SERVER_PORT= APJP_HTTP_PROXY_SERVER_USERNAME= APJP_HTTP_PROXY_SERVER_PASSWORD= APJP_HTTPS_PROXY_SERVER_ADDRESS= APJP_HTTPS_PROXY_SERVER_PORT= APJP_HTTPS_PROXY_SERVER_USERNAME= APJP_HTTPS_PROXY_SERVER_PASSWORD=
是用作設定代理連接APJP在GAE或PHP平台上的服務器,分為http和ssl連接,如需代理連接服務器,請在這裡設置,如無需要,留空即可。
二. 電腦上使用APJP_LOCAL配合Firefox, Google Chrome
執行APJP_LOCAL/APJP.bat, 會看到APJP在自行測試連接服務器的訊息,如果正常會有一連串的”OK”
這表示APJP已經運行並連上服務器,但需要在瀏覽器進行簡單設定,數據會經由APJP
服務器流通,在firefox 6裡,請在代理項裡的 http proxy設為 127.0.0.1,端口為10000
ssl proxy也是 127.0.0.1 端口10000,也可使用Autoproxy (https://addons.mozilla.org/en-US/firefox/addon/autoproxy/) 插件作選擇性使用代理,
Google Chrome建議使用插件SwitchySharp [项目Wiki地址https://code.google.com/p/switchysharp/wiki/SwitchySharp_GFW_List_2]
或 Proxy Switchy! 也可。Chrome Web Store地址 https://chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj?hl=zh-CN&hc=search&hcp=main 在HTTP Proxy設為127.0.0.1 端口
10000,HTTPS proxy設為 127.0.0.1 端口: 10000, 也可在Auto configuration Url
使用PAC文件作選擇性使用代理,請到http://autoproxy2pac.appspot.com 選其它->HTTP
->127.0.0.1->填入10000,可以使用網站地址或下載回來本地使用,例如使用在線網址,填入
http://autoproxy2pac.appspot.com/pac/proxy/127.0.0.1/10000 ,其他的瀏覽器
大約都是類似,請自行測試
設置Android(安桌)移動系統客戶端
APJP_ANDROID-0.1.0發佈以後,APJP開始支援安卓移動系統,包括tablet(平版電腦)和手機,
APJP_LOCAL_ANDROID-0.2.4現在和電腦系統上一樣,支援使用10個服務器,也是可混合使用
GAE或PHP主機平台上部署的服務器端,以下以安卓手機系統, Android 2.3.3, 手機為三星
Galaxy I9000,系統沒有root機,作為安裝示例
首先需把APJP_LOCAL_ANDROID/APJP_ANDROID.apk複制到手機的SD卡上,在手機裡點擊安裝,
或從安卓市場(Android Market)下載安裝, 以下為下載地址
https://market.android.com/details?id=APJP.ANDROID
完成後點擊運行APJP客戶端,點擊Preferences,出現一系列選項
a. 修改APJP_KEY, 輸入和服務器相同的鑰匙
b. APJP_LOCAL_PROXY_SERVER是作為本地代理,處理所有HTTP請求和HTTPS請求,
默認為127.0.0.1:10000,如無特別要求,使用默認即可
c. APJP_LOCAL_HTTP_PROXY_SERVER為本地代理的端口,默認是127.0.0.1:10080,如無
特別需要,可以不用改動
d. APJP_LOCAL_HTTP_SERVER 是遠端服務器和本地http通訊的端口,默認127.0.0.1:11080,
URL_X, X為支援的服務器數量,共10個,請輸入正確網址,例如
http(s)://www.abc.com/HTTP.php 或
http(s)://your-addid.appspot.com/HTTP
如服務器是1個以上,請順序輸入正確網址
e. APJP_LOCAL_HTTPS_PROXY_SERVER是本地代理端口,默認是127.0.0.1:10443
f. APJP_LOCAL_HTTPS_SERVER是遠端服務器和本地ssl通訊端口,默認127.0.0.1:11443
URL_X, X是支援服務器的數量,共10個,請輸入網址.例如
http(s)://www.abc.com/HTTPS.php 或
http(s)://your-addid.appspot.com/HTTPS
g. APJP_HTTP_PROXY_SERVER和APJP_HTTPS_PROXY_SERVER用來設置代理連接APJP
服務器,這裡和電腦系統上相同
到這裡APJP安卓移動系統客戶端已經設置完成,但仍需要一個能設置代理的安卓系統上的瀏覽器,
以從安卓市場安裝的Opera Mobile 11作為示例
a. Android Market(安卓電子市場)搜尋關鍵字 “Opera Mobile”,選中後從市場下載安裝
到手機裡
b. 啟動APJP,連接後會出現如下訊息:
APJP: START APJP_LOCAL_PROXY_SERVER
APJP: START APJP_LOCAL_PROXY_SERVER OK
APJP: TEST APJP_LOCAL_HTTP_SERVER
APJP: TEST APJP_LOCAL_HTTP_SERVER OK
APJP: TEST APJP_LOCAL_HTTPS_SERVER
APJP: TEST APJP_LOCAL_HTTPS_SERVER OK
這表示已成功連上APJP一個或以上的服務器
c. 啟動Opera Mobile 11, 在地址欄內鍵入 about:config
Opera Mobile的設定裡找到Proxy選項,點擊打開,找到HTTP server選項
修改為127.0.0.1:10000, HTTPS server選項修改為127.0.0.1:10000,
往下拉,找到 Use HTTP 和 Use HTTPS, 在空格裡打勾, 按”save”鍵儲存設置後回首頁,
訪問http://whatismyipaddress.com 查看是否服務器的IP,成功通過APJP訪問不會顯
示真實的IP,如在中國大陸使用,可訪問facebook,twitter和youtube等網站測試,如能正
常訪問,即表示正通過APJP代理連接互聯網.
補充
APJP為web tunnel的實現,對於https連接會出現證書警告,故在APJP_LOCAL-0.8.4
版本,增加IAIK_JCE.jar並會隨機生成證書,把證書APJP.pem導入瀏覽器內可解決證書警告
問題,以下為Windows 7版Google Chrome的導入方法
首先轉到APJP_LOCAL/目錄,執行 ./APJP.sh 或 ./APJP_UI.sh ,生成APJP.pem
a. 打開偏好設定 -> 進階選項 -> HTTPS/SSL
b. 點擊”管理憑證” -> 選”授權單位” -> 點擊”匯入”
c. 打開並指向APJP_LOCAL/APJP.pem
d. 憑證APJP代表憑證授權單位 ,有三個選項為
信任這個用於識別網站的憑證。
信任這個用於識別電子郵件使用者的憑證。
信任這個用於識別軟體製造商的憑證。
全部選取打勾.按確定,儲存並離開設定
e. 其他瀏覽器例如火狐(firefox)設置導入證書大致相同
f. APJP_LOCAL現在版本為0.8.6,如是從0.8.6以下版本更新,需要從新導入證書,返回a,b,但不
點擊”匯入”,從列表找到APJP,選中,刪除舊有的證書,點擊”匯入”,選APJP.pem,存儲離開
- 關於圖形使用者介面
自APJP_LOCAL-0.8.5開始,本地客戶端加入圖形介面,方便一些對命令列不熟習的用戶,
以Linux為例,請在APJP_LOCAL目錄下執行chmod +x APJP.sh APJP_UI.sh, 使用圖形
介面請執行 ./APJP_UI.sh , 如果在shell腳本加入其它的shell來執行
例如 /bin/zsh, 在文件行首加入sha-bang #! /bin/zsh 而得到
zsh^M: bad interpreter no such file or directory ,原因是文件以DOS/Windows
格式存儲,以致出現錯誤,請執行以下命令:
tr -d ‘\r’ < APJP_UI.sh > a ; mv -f a APJP_UI.sh ; chmod 755 APJP_UI.sh
重新執行./APJP_UI.sh即可
使用Windows的用戶可雙擊APJP_UI.bat或直接雙擊APJP.jar運行圖形介面,按start連接服
務器,不論Linux或Windows,雙擊桌面的工作列托盤圖標,就可進行隱藏/顯示APJP的圖形介面
建議/BUG提交
如果部署APJP代理方案有任何問題,或對APJP項目有任何建議,請訪問項目內的issue
發表,或者在twitter上向作者查詢,作者的twitter id: @jvansteirteghem
APJP代理專案為開源軟件(Open Source Software)
APJP Wiki下载: 『https://docs.google.com/document/d/1sY0F_IN6eEeAIMHLepAkm3pbytSMghkA7d3DF0CBknk/edit?hl=en_US&pli=1 』
可以以PDF,MS Word,Open Document,RFT,HTML,Plain Text等下载的。
原文:http://code.google.com/p/apjp/wiki/InstallGuideForWin7
APJP项目地址:http://code.google.com/p/apjp/
则个太复杂,,还是用goagent吧。
博主,APJP更新了的。
内置模拟hosts功能,支持GAE HTTPS。
感谢提示,明天提示下。
我也遇到了和楼上那位叫Ben的朋友一样的问题,只能http,访问https的页面就打不开,要报错:
——————————————————
APJP_LOCAL_HTTPS_PROXY_SERVER: START_HTTPS_SERVER
APJP_LOCAL_HTTPS_SERVER: START_HTTPS_SERVER
APJP_LOCAL_HTTPS_SERVER: START_HTTPS_SERVER OK
APJP_LOCAL_HTTPS_PROXY_SERVER: START_HTTPS_SERVER OK
APJP_LOCAL_HTTPS_SERVER: EXCEPTION
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
at APJP.HTTPS.HTTPSServerWorker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
APJP_LOCAL_HTTPS_PROXY_SERVER: STOP_HTTPS_SERVER
APJP_LOCAL_HTTPS_SERVER: STOP_HTTPS_SERVER
APJP_LOCAL_HTTPS_SERVER: STOP_HTTPS_SERVER OK
APJP_LOCAL_HTTPS_PROXY_SERVER: STOP_HTTPS_SERVER OK
——————————————————
以上是浏览器发起一次https请求直到浏览器返回“网页无法显示”为止的全部错误信息
大牛们麻烦看看吧,怎么回事啊~~~~我可是严格贯彻落实了文章中的精神啊
我也不太懂,请到 http://code.google.com/p/apjp/issues/list 反馈问题。
1.VPS上不懂。
2.PHP空间的话,确定空间是可以HTTPS的?
3.个人的一点猜测,Java的SSL证书受到干扰的结果。请参阅zh.wikipedia.org/wiki/GFW
就想知道整这么复杂的东西做什么用啊!?之前推荐的谷歌的一个什么代理,好像叫wall-proxy,也不知道是goagent,部署了一个,不要太好用啊!速度还很快。现在如果按照文章里面的做一遍,效果,我是指网站访问速度,估计及不上谷歌的代理。
APJP可以使用php空间和java空间(比如gae就是你说的谷歌代理)做代理用,有点是安全速度快,gae空间速度应该和wall-proxy差不多,php空间比gae空间限制少。
hi.文章好长啊。博主成功的用apjp的php0.8.2版翻墙了吗?
测试过,可以正常使用。
奶奶的,我更新了文章里的这个版本的php服务器端,结果只有http通,https不通了。。。页面永远都停留在正在请求状态
这个我也不清楚,你可以问问软件作者。呵呵
我更惨,更新了这个文章介绍的新版APJP,我整个VPS都挂了,ping得通,tracert得到,就是访问不了。。。FML
VPS都挂了,这个怎么回事?
哈哈哈,楼上那个童鞋估计是服务商的web服务器出问题了,跟VPS没啥关系吧
(干咱们这行租VPS翻墙的,得学会念经~~~VPS不通了就念经吧,能修身养性减少烦躁)
請問,VPN的密碼是?
稍后会取消密码,呵呵
你如果等不及了,可以推特上告诉我你要哪篇文章的密码,我私信给你。
1.“cd F:\appengine-java-sdk-1.5.1\bin” 改成“cd F:\appengine-java-sdk-1.6.0\bin”
Java SDK版本号的问题,改完,直接就可以复制命令操作的。
2.使用GAE需要事先修改Hosts文件,只要添加一条”203.208.46.180 Your-AppID.appspot.com”, 而且还只能使用HTTP。HTTPS会有Java证书的问题。使用PHP的话,会很棒的,前提是好的PHP空间哈。
3.还有一些有待改善的,地方的。懂Java和PHP编程,来改进哈。
这怎么注册啊
GAE注册参考http://igfw.net/archives/6138
php空间就要自己找了
很好很详细…那个VPN换新密码了?
换回以前的了
呵呵
这个……看着头晕