當https遇上websocket


  故事的開始是這樣的:有一天,谷歌瀏覽器告訴我,說我的域名不安全,非要帶https。

    

 

    於是我就在阿里雲上下載了SSL安全證書,放在了我的 nginx上:

    在nginx的安裝目錄下創建了一個目錄cret用來存放安全證書的

    

    按照阿里雲的文檔把下載的兩個文件放進去:

    

 

     然后配置nginx: 編輯nginx.conf 或者你還加載了其他的配置文件如  我還加載了conf.d/default.conf配置文件

    

   listen     443 default ssl; server_name localhost; ssl on; ssl_certificate /etc/nginx/cert/1537413509314.pem; ssl_certificate_key /etc/nginx/cert/1537413509314.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on;

 

    nginx -s reload 重新加載配置文件  在阿里雲服務器上開放443端口就ok 

    

     

   但是 我萬萬沒有想到 我的微信客服模塊連接不上服務器的端口了  

 

   GET https://www.saifeiguoye.com:9092/socket.io/?EIO=3&transport=polling&t=1538010211982-6 net::ERR_SSL_PROTOCOL_ERROR

   

  好糾結 。。。。。。。。。

 

  終於我找到了問題的關鍵:因為websocket是基於http的  所以要用https得重新配置nginx

 

  在你的nginx需要加上這樣一段配置:

   

location /socket{ # switch off logging access_log off; # redirect all HTTP traffic to localhost:9092 proxy_pass http://localhost:9092;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # WebSocket support (nginx 1.4) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # Path rewriting rewrite /socket/(.*) /$1 break; proxy_redirect off; } 

 

  至於location的路徑你可以自己定義 再把你socket的鏈接路徑改一下

  

var socket = io('wss://www.saifeiguoye.com',{path:'/socket/socket.io'});

 

 

    把nginx重啟一下  就ok了  故事講完了

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM