nginx如何配置wss協議

需求:nginx配置websocket協議連接,(背景,在一個使用一個免費的僅僅支持單域名的證書時,既要支持https協議,也要支持wss協議時,我們可以配置一個nginx根據不同的路徑去跳轉

我所使用的是華為云的免費領取的一年的證書(因為僅僅支持單域名所以才要根據域名后的路徑做不同的跳轉)

nginx如何配置wss協議

項目的接口在內部為127.0.0.1:8888/request/play
也就是本地通過 ws://localhost:28888 進行socket連接,當然因為使用域名wss,所以此處需要放到服務器 ws://你的服務器ip:8888/request/play (這樣訪問的前提是將8888加入開放端口)

在有證書的前提下上傳證書到服務器

nginx如何配置wss協議

首先設置二級域名解析

nginx如何配置wss協議

nginx如何配置wss協議

nginx如何配置wss協議

nginx如何配置wss協議

注意注冊證書時,一定要和解析的子域名相對應

#user??nobody; worker_processes??1;  #error_log??logs/error.log; #error_log??logs/error.log??notice; #error_log??logs/error.log??info;  #pid????????logs/nginx.pid;   events?{ ????worker_connections??1024; }   http?{ client_max_body_size?200m;#?配置上傳文件大小最大為200m ????include???????mime.types; ????default_type??application/octet-stream;  ????sendfile????????on; ??? server?{ ????#?監聽443端口(https?和wss都是使用的默認端口443) ????listen?443?ssl; ????#?你的域名(就是你解析后的域名與證書申請時域名保持一致) ????server_name??game-test2.pro-lwwl2.com; ????????#ssl?證書的pem文件路徑 ????#?ssl證書的pem文件路徑 ????ssl_certificate??/usr/local/nginx/ssl/scsgame.crt; ????#?ssl證書的key文件路徑 ????ssl_certificate_key?/usr/local/nginx/ssl/scsserver.key; ????ssl_session_timeout?5m; ????ssl_protocols?TLSv1.2?TLSv1.3; ????ssl_ciphers?ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ????ssl_prefer_server_ciphers?on; ???################################# ???#?此處是我配置的vue上傳部署到服務器時,解決首頁加載緩慢問題而設置的可以參考 ???#?https://www.cnblogs.com/libaiyun/p/16462470.html ????#開啟gzip ?????gzip?on; ?????#?啟用gzip壓縮的最小文件,小于設置值的文件將不會壓縮 ?????gzip_min_length?1k; ?????#?設置壓縮所需要的緩沖區大小 ?????gzip_buffers?16?64k; ?????#?設置gzip壓縮針對的HTTP協議版本 ?????gzip_http_version?1.1; ?????#??gzip?壓縮級別,1-9,數字越大壓縮的越好,也越占用CPU時間 ?????gzip_comp_level?9; ? ???????gzip_types?text/plain?application/x-javascript?application/javascript?text/javascript?text/css?application/xml?application/x-httpd-php?image/jpeg?image/gif?image/png; ???????#?是否在http?header中添加Vary:?Accept-Encoding,建議開啟 ??????gzip_vary?on; ??????#?禁用IE6?gzip ??????????gzip_disable?"MSIE?[1-6]."; ####################################### #?日志輸出路徑 ????????access_log??/home/server/vue_admin/logs/access.log;  #?當且僅當https請求訪問到admin時 #?訪問https://game-XXXX2.pro-lwwl2.com/admin就會跳轉到服務器的/home/server/vue_admin/dist下,取index.html來到vue項目的首頁 ????????location?/admin{ ???????????alias??/home/server/vue_admin/dist; ???????????index??index.html?index.htm; ????????????} ???????????#?配置wss長連接通信協議? ???????????#當請求wss://game-XXXX2.pro-lwwl2.com/game/request時候,就會發生路徑的跳轉到本地的http://127.0.0.1:8888/game/request;去通過內網來匹配請求 ?????????????????location?/game/request?{ ???????????????????????proxy_pass?http://127.0.0.1:8888/game/request; ???????????????????????proxy_set_header?X-Real-IP?$remote_addr; 			proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for; 			proxy_set_header?Host?$host; 			proxy_set_header?X-NginX-Proxy?true; 			proxy_http_version?1.1; 			proxy_set_header?Upgrade?$http_upgrade; 			proxy_set_header?Connection?"Upgrade"; 			proxy_connect_timeout?600s; 			proxy_read_timeout?600; 			proxy_send_timeout?600s; ??????????????} #?nginx配置文件下載路徑,實現nginx下載功能 #僅僅需要訪問https://game-XXXX2.pro-#lwwl2.com/resource/download/即可完成下載 location?/resource/download?{ ??alias??/home/server/resource/client; ??sendfile?on; ??autoindex?on;??#?開啟目錄文件列表 ??autoindex_exact_size?on;??#?顯示出文件的確切大小,單位是bytes ??autoindex_localtime?on;??#?顯示的文件時間為文件的服務器時間 ??charset?utf-8,gbk;??#?避免中文亂碼 } #?訪問https://game-XXXX2.pro-#lwwl2.com/admin-api #?接口就會完成跳轉到本地的http://127.0.0.1:9021/端口以及路徑 location?^~?/admin-api/?{ #匹配所有路徑以/gameTool開頭的請求 access_log??/home/server/vue_admin/logs/access.log; proxy_set_header?Host?game-test.pro-lwwl.com;?#設置請求域名 proxy_pass?http://127.0.0.1:9021/;?#配置內網請求 }   ????? ????????error_page???500?502?503?504??/50x.html; ????????location?=?/50x.html?{ ????????????root???html; ????????}  ???} **一個nginx可以配置多個server?但是如果新增或者刪除server一定得停止nginx?而不是重啟nginx否則配置不生效** ???#?server?{ ????#????listen???????9021; ???#?????server_name??lwwl.com; ???????#將請求轉成https ?????????#把http的域名請求轉成https ????????#?return?301?https://$host$request_url;? ??#??????rewrite?^(.*:*)?https://$server_name$1?permanent? ?#?} }

以上還需注意的是我們應該區分一下配置location時,我們應該看清root alias 和proxy_pass 三者帶來路徑拼寫的差異,否則就會報404異常。

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享