Proxy websocket wss:// to ws:// apache

后端 未结 6 755
自闭症患者
自闭症患者 2021-02-02 02:15

i searched alot but i couldnt connect my websocket to wss:// , i found that there is a way to proxy wss://domain.com:9090 and apache apply the proxy on it and redirect request

6条回答
  •  花落未央
    2021-02-02 02:28

    i worked 24 hours for find this and searched a lot of forum but no one write about success. here is my server configuration :

    CentOS release 6.7 , Apache 4.2.18

    here is what i did finally : first i found that modules/mod_proxy_wstunnel.so must be enable in apache config file , but my apache didn't have that module and after a lot of search i found that module is Available in apache 2.4.5 and later.

    https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

    i downloaded https://archive.apache.org/dist/httpd/httpd-2.4.18.tar.gz extracted httpd-2.4.18\modules\proxy\mod_proxy_wstunnel.c and uploaded to my server root then from terminal could compile it again with these commonds :

    chmod 755 mod_proxy_wstunnel.c #set permission
    pxs -i -a -c mod_proxy_tunnel.c #compile module
    

    pxs command did compile the module and wrote in apache config file to load it

    LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
    

    after that i added these lines to end of apache config file :

    RewriteEngine on
    ProxyRequests Off
    ProxyPreserveHost on
    ProxyPass /myws ws://mysite.com:8091
    ProxyPassReverse /myws ws://mysite.com:8091
    

    AND NOW : it works ! in client side js you can set ws url like this :

    var protocol = 'ws://'; 
    if (window.location.protocol === 'https:') {
                protocol = 'wss://';
       }
    
     var wsUri =protocol+ "mysite.com/myws";  
    
     var ws = new WebSocket(wsUri);
    

    and it will forward request to ws://mysite.com:8091 doesnt matter the page loaded with https or http , it will direct all request ended with /myws to ws://mysite.com:8091

提交回复
热议问题