<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # [創建wss服務](https://www.workerman.net/doc/workerman/faq/secure-websocket-server.html#%E5%88%9B%E5%BB%BAwss%E6%9C%8D%E5%8A%A1) **問:** Workerman如何創建一個wss服務,使得客戶端可以用過wss協來連接通訊,比如在微信小程序中連接服務端。 **答:** wss協議實際是[websocket](https://baike.baidu.com/item/WebSocket)+[SSL](https://baike.baidu.com/item/ssl),就是在websocket協議上加入[SSL](https://baike.baidu.com/item/ssl)層,類似[https](https://baike.baidu.com/item/https)([http](https://baike.baidu.com/item/http)+[SSL](https://baike.baidu.com/item/ssl))。 所以只需要在[websocket](https://baike.baidu.com/item/WebSocket)協議的基礎上開啟[SSL](https://baike.baidu.com/item/ssl)即可支持wss協議。 ## [方法一、利用nginx/apache代理SSL(推薦)](https://www.workerman.net/doc/workerman/faq/secure-websocket-server.html#%E6%96%B9%E6%B3%95%E4%B8%80%E3%80%81%E5%88%A9%E7%94%A8nginx%2Fapache%E4%BB%A3%E7%90%86SSL(%E6%8E%A8%E8%8D%90)) **通訊原理及流程** 1、客戶端發起wss連接連到nginx/apache 2、nginx/apache將wss協議的數據轉換成ws協議數據并轉發到Workerman的websocket協議端口 3、Workerman收到數據后做業務邏輯處理 4、Workerman給客戶端發送消息時,則是相反的過程,數據經過nginx/apache轉換成wss協議然后發給客戶端 ## [nginx配置參考](https://www.workerman.net/doc/workerman/faq/secure-websocket-server.html#nginx%E9%85%8D%E7%BD%AE%E5%8F%82%E8%80%83) **前提條件及準備工作:** 1、已經安裝nginx,版本不低于1.3 2、假設Workerman監聽的是8282端口(websocket協議) 3、已經申請了證書(pem/crt文件及key文件)假設放在了/etc/nginx/conf.d/ssl下 4、打算利用nginx開啟443端口對外提供wss代理服務(端口可以根據需要修改) 5、nginx一般作為網站服務器運行著其它服務,為了不影響原來的站點使用,這里使用地址`域名.com/wss`作為wss的代理入口。也就是客戶端連接地址為 wss://域名.com/wss **nginx配置類似如下**: ~~~ server { listen 443; # 域名配置省略... ssl on; ssl_certificate /etc/ssl/server.pem; ssl_certificate_key /etc/ssl/server.key; ssl_session_timeout 5m; ssl_session_cache shared:SSL:50m; ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; location /wss { proxy_pass http://127.0.0.1:8282; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Real-IP $remote_addr; } location ~ /(asr_ug|asr_zh|asr_kz)$ { proxy_pass http://127.0.0.1:5752; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Real-IP $remote_addr; } location ~ /asr_ug2$ { proxy_pass http://127.0.0.1:9989; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Real-IP $remote_addr; } # location / {} 站點的其它配置... } ~~~ **測試** ~~~javascript // 證書是會檢查域名的,請使用域名連接。注意這里不寫端口 ws = new WebSocket("wss://域名.com/wss"); ws.onopen = function() { alert("連接成功"); ws.send('tom'); alert("給服務端發送一個字符串:tom"); }; ws.onmessage = function(e) { alert("收到服務端的消息:" + e.data); }; ~~~ ## [利用apache代理wss](https://www.workerman.net/doc/workerman/faq/secure-websocket-server.html#%E5%88%A9%E7%94%A8apache%E4%BB%A3%E7%90%86wss) 也可以利用apache作為wss代理轉發給workerman。 準備工作: 1、GatewayWorker 監聽 8282 端口(websocket協議) 2、已經申請了ssl證書, 假設放在了/server/httpd/cert/ 下 3、利用apache轉發443端口至指定端口8282 4、httpd-ssl.conf 已加載 5、openssl 已安裝 **啟用 proxy\_wstunnel\_module 模塊** ~~~ LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so ~~~ **配置SSL及代理** ~~~ #extra/httpd-ssl.conf DocumentRoot "/網站/目錄" ServerName 域名 # Proxy Config SSLProxyEngine on ProxyRequests Off ProxyPass /wss ws://127.0.0.1:8282/wss ProxyPassReverse /wss ws://127.0.0.1:8282/wss # 添加 SSL 協議支持協議,去掉不安全的協議 SSLProtocol all -SSLv2 -SSLv3 # 修改加密套件如下 SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM SSLHonorCipherOrder on # 證書公鑰配置 SSLCertificateFile /server/httpd/cert/your.pem # 證書私鑰配置 SSLCertificateKeyFile /server/httpd/cert/your.key # 證書鏈配置, SSLCertificateChainFile /server/httpd/cert/chain.pem ~~~ **測試** ~~~javascript // 證書是會檢查域名的,請使用域名連接。注意沒有端口 ws = new WebSocket("wss://域名.com/wss"); ws.onopen = function() { alert("連接成功"); ws.send('tom'); alert("給服務端發送一個字符串:tom"); }; ws.onmessage = function(e) { alert("收到服務端的消息:" + e.data); }; ~~~ ## [方法二 ,直接用Workerman開啟SSL(不推薦)](https://www.workerman.net/doc/workerman/faq/secure-websocket-server.html#%E6%96%B9%E6%B3%95%E4%BA%8C%20%EF%BC%8C%E7%9B%B4%E6%8E%A5%E7%94%A8Workerman%E5%BC%80%E5%90%AFSSL(%E4%B8%8D%E6%8E%A8%E8%8D%90)) > **注意** > nginx/apache代理SSL和Workerman設置SSL二選一,不能同時開啟。 **準備工作:** 1、Workerman版本>=3.3.7 2、PHP安裝了openssl擴展 3、已經申請了證書(pem/crt文件及key文件)放在磁盤任意目錄 **代碼:** ~~~php <?php use Workerman\Worker; use Workerman\Connection\TcpConnection; require_once __DIR__ . '/vendor/autoload.php'; // 證書最好是申請的證書 $context = array( // 更多ssl選項請參考手冊 http://php.net/manual/zh/context.ssl.php 'ssl' => array( // 請使用絕對路徑 'local_cert' => '磁盤路徑/server.pem', // 也可以是crt文件 'local_pk' => '磁盤路徑/server.key', 'verify_peer' => false, 'allow_self_signed' => true, //如果是自簽名證書需要開啟此選項 ) ); // 這里設置的是websocket協議(端口任意,但是需要保證沒被其它程序占用) $worker = new Worker('websocket://0.0.0.0:8282', $context); // 設置transport開啟ssl,websocket+ssl即wss $worker->transport = 'ssl'; $worker->onMessage = function(TcpConnection $con, $msg) { $con->send('ok'); }; Worker::runAll(); ~~~ 通過以上的代碼,Workerman就監聽了wss協議,客戶端就可以通過wss協議來連接workerman實現安全即時通訊了。 **測試** 打開chrome瀏覽器,按F12打開調試控制臺,在Console一欄輸入(或者把下面代碼放入到html頁面用js運行) ~~~javascript // 證書是會檢查域名的,請使用域名連接,注意這里有端口號 ws = new WebSocket("wss://域名.com:8282"); ws.onopen = function() { alert("連接成功"); ws.send('tom'); alert("給服務端發送一個字符串:tom"); }; ws.onmessage = function(e) { alert("收到服務端的消息:" + e.data); }; ~~~ **注意:** 1、如果必須使用443端口請使用上面第一種方案nginx/apache代理方式實現wss。 2、wss端口只能通過wss協議訪問,ws無法訪問wss端口。 3、證書一般是與域名綁定的,所以測試的時候客戶端請使用域名連接,不要使用ip去連。 4、如果出現無法訪問的情況,請檢查服務器防火墻。 5、此方法要求PHP版本>=5.6,因為微信小程序要求tls1.2,而PHP5.6以下版本不支持tls1.2。 相關文章: [透過代理獲取客戶端真實ip](https://www.workerman.net/doc/workerman/faq/get-real-ip-from-proxy.html) [workerman的ssl上下文選項參考](https://php.net/manual/zh/context.ssl.php)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看