假設我們希望有一台機器A(ip 192.168.1.101)要開放端口6379給用戶訪問,但可能實際情況是用戶無法直接訪問到A(ip 192.168.1.101), 但卻有一台機器B(ip 192.168.1.100) 可以開放一些其他端口給用戶訪問,為了讓用戶通過B(ip 192.168.1.100)能訪問到A(ip 192.168.1.101)上6379端口,基於swoole實現的Tcpproxy解決了這個問題! 當然你可以聯想到我們家里的內部機器是在外網無法訪問的,可正好你有一台雲服務器,所以我們可以通過Tcpproxy實現外部訪問你家里的內網應用, 說到這里你可以完全把它當成內網花生殼的功能. 按照上面描述的情況,配置我們的服務選項后如下
//sproxy_server使用 //守護進程模式 $proxy_conf['daemon'] = 1; //開放地址 $proxy_conf['host'] = '192.168.1.100'; //開放端口 $proxy_conf['ports'] = [ [9999, 7777, 0], //開放給用戶端口,內部轉發端口,是否http ]; //sproxy_client使用 $sproxy_conf = [ 'daemon' => 1, 'process_num' => 10, //指定代理服務地址+端口 'agent' => [ 'host' => '192.168.1.100', 'port' => 7777, ], //指定目標app地址+端口 'apps' => [ 'host' => '192.168.1.101', 'port' => 6379, ], ];
在A,B服務器分別運行
php sproxy_client.php php sproxy_server.php
趕緊部署試試吧
模擬內網花生殼功能時使用要點 需要一台有公網ip運行proxy_server.php開放給用戶訪問 在你的內網運行proxy_client.php來代理你的應用 為了調試更方便,對於內內網無php&swoole環境的,我們提供了sproxy,功能同proxy_client.php make #單以多進程模式運行 ./sproxy_process -s 127.0.0.1:6677 -t 127.0.0.1:6379 -c 10 -d #或以多進程多線程模式運行 ./sproxy_thread -s 127.0.0.1:6677 -t 127.0.0.1:6379 -c 10 -d -d 指定以守護進程模式運行 -s 指定proxy_server.php內部地址和端口 -t 指定需要代理app運行地址和端口 -c 指定開啟進程數量
