首頁 > 軟體

nginx設定wss協定的實現

2023-03-05 14:04:25

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

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

專案的介面在內部為127.0.0.1:8888/request/play
也就是本地通過 ws://localhost:28888 進行socket連線,當然因為使用域名wss,所以此處需要放到伺服器 ws://你的伺服器ip:8888/request/play (這樣存取的前提是將8888加入開放埠)

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

首先設定二級域名解析

注意註冊證書時,一定要和解析的子域名相對應可參照(https://baijiahao.baidu.com/s?id=1726107421566695475&wfr=spider&for=pc)

#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異常

到此這篇關於nginx設定wss協定的實現的文章就介紹到這了,更多相關nginx wss協定內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com