如何使用nginx代理ws或是wss的請求
遇到的問題: 如何使用nginx代理ws或是wss的請求
起因是,為了降本增效要做服務器合并的需求,但兩個服務器之間的進程存在對外連接的端口沖突,如果我們改了端口,客戶端也會涉及到修改,但客戶端的版本太舊了,想改變和重新發(fā)版流程會拉的很長,所以我們嘗試別的方法來解決端口修改的問題
因為服務器的時間比較舊了,所以客戶端并沒有先連負載均衡再連服務器 針對這個問題我們提供了下面兩個方案
- 多網(wǎng)卡,比如之前A服務器的啟動的監(jiān)聽端口都在IPA的,原B服務器遷移進來后監(jiān)聽的端口都在IPB上,這樣就實現(xiàn)了一臺服務器上,監(jiān)聽了多個重復端口的問題,我們只要將IPA和IPB分別綁定到不同的域名上即可實現(xiàn)客戶端無感的服務器遷移
- 使用nginx做端口映射
最終我們選擇了成本更低的nginx端口映射的做法 具體的代碼如下:
server { listen 7865 ssl; #監(jiān)聽的端口(客戶端連接的原端口) server_name a.b.com; #監(jiān)聽的域名,非必須 ssl_certificate /etc/nginx/a.pem; #證書 ssl_certificate_key /etc/nginx/a.key; #證書 ssl_session_timeout 20m; 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; ssl_verify_client off; location / { proxy_pass https://127.0.0.1:7899; # 新的端口,這里有一個關鍵點,如果我們是ssl的,這里使用https的連接,如果沒有ssl,這里需要設置為http proxy_http_version 1.1; # 必須使用 HTTP 1.1 proxy_redirect off; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
這里我們可以把nginx的這層反向代理看著是透明的,因為客戶端和nginx建立長連接,而nginx和后端服務器也會建立長連接,一旦我們的后端進程重啟了,客戶端還是會感知到.
拓展1: 負載均衡分類
我們按照起作用的ISO7層模式的層來區(qū)分的話,可以分為4層負載均衡和7層負載均衡
4層負載均衡
例如LVS或是AWS的NLB就是4層負載均衡 它的原理: 分別獲取包中的源IP地址和端口和目標IP地址和端口,對后端做負載均衡(算法可能是輪詢或是權重等)后修改包中的目標IP地址和端口,使其流量能得到轉發(fā)
請求的路徑是:
- 客戶端發(fā)出情況,數(shù)據(jù)包被送到負載均衡器
- 負載均衡通過源IP地址+端口和目標IP+端口確定請求最后轉發(fā)到哪一臺后端服務器
- 負載均衡器通過修改目標IP和端口
- 數(shù)據(jù)包被轉發(fā)到指定的后端服務器
響應的路徑是:
- 后端程序進行業(yè)務處理
- 如果負載均衡器做了NAT(為了讓后端進程透明,目的是隱藏后端服務器,原理就是將源IP地址和源端口修改成負載均衡器的IP地址和端口),數(shù)據(jù)包會回到負載均衡器中
- 返回給客戶端
如果負載均衡器沒有NAT功能,或是配置為直連的方式,則響應的數(shù)據(jù)包是不會經(jīng)過負載均衡器的,這個可以通過分析流量包的源IP地址和端口來確認
4層負載均衡器的好處 4層負載均衡器不會解傳輸數(shù)據(jù)包,只會解header包從而獲取IP地址和端口,所以相對來說速度更快 什么時候我們需要使用4層負載均衡呢
- 非HTTP的時候
- 需要較高的性能
- 場景簡單
7層負載均衡
例如nginx IIS就是7層的負載均衡
主要用于處理HTTP/HTTPS等應用層協(xié)議。它不僅可以基于傳輸層信息(如IP地址和端口)進行負載均衡,還可以深入解析應用層數(shù)據(jù),提供更靈活和高級的流量管理。
原理: 7層負載均衡器可以解析和檢查HTTP頭、URL、cookie、SSL信息等應用層數(shù)據(jù)。這使得它能根據(jù)這些內容做出智能的流量路由決策。 因為比較上層,所以可以做的事情比較多
- 基于內容轉發(fā): 可以根據(jù)特定的URL路徑、域名、HTTP方法或其他應用層數(shù)據(jù),將請求定向到不同的服務器池。例如,將所有以"/images"結尾的請求路由到圖片服務器
- session保持: 通過使用cookie或其他機制,確保來自同一客戶端的所有請求都被轉發(fā)到同一個后端服務器,從而維護用戶會話的連續(xù)性
- 請求重定向: 能夠修改請求內容或路徑,或將請求重定向到其他資源或服務器
- 數(shù)據(jù)壓縮和緩存: 處理請求時,可以對響應內容進行壓縮,減少傳輸?shù)臄?shù)據(jù)量。同時,還能緩存常見請求的響應,降低后端服務器負擔
請求路徑:
- 客戶端發(fā)送請求到負載均衡器
- 負載均衡器通過分析內容進行轉發(fā)
- 請求達到具體的后端進程
響應路徑:
- 后端處理業(yè)務邏輯
- 響應經(jīng)過負載均衡器
- 負載均衡器做一些優(yōu)化處理 例如緩存/壓縮等
- 響應給客戶端
可以發(fā)現(xiàn),響應是會經(jīng)過負載均衡器的,實際上客戶端和nginx建立了連接,nginx和后端進程建立了連接實現(xiàn)了請求的轉發(fā)和請求的響應
拓展2: 還有哪些負載均衡
使用rabbitMQ多個消費者也可以實現(xiàn)負載均衡的作用
grpc+etcd實現(xiàn)的負載均衡
到此這篇關于如何使用nginx代理ws或是wss的請求的文章就介紹到這了,更多相關nginx代理ws或wss內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Linux查看nginx安裝目錄和配置文件路徑的實現(xiàn)
本文主要介紹了Linux查看nginx安裝目錄和配置文件路徑的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-01-01詳解Nginx服務器的nginx-http-footer-filter模塊配置
這篇文章主要介紹了Nginx服務器的nginx-http-footer-filter模塊配置,nginx-http-footer-filter用作在請求的頁面底部插入代碼,需要的朋友可以參考下2016-01-01windows系統(tǒng)下關閉Nignx的多種方式總結
這篇文章主要給大家總結介紹了windows系統(tǒng)下關閉Nignx的多種方式, 在Windows中啟動Nginx是簡單的,但有許多小伙伴不會關閉,這里給大家介紹下,需要的朋友可以參考下2023-08-08解決Nginx無法啟動 -10013: An attempt was
這篇文章主要給大家介紹了解決用nginx -t 發(fā)成Nginx無法啟動報錯10013: An attempt was made to access a socket in a way forbidden by its access permissions的問題,需要的朋友可以參考下2023-11-11Nginx如何獲取自定義請求header頭和URL參數(shù)詳解
這篇文章主要給大家介紹了關于Nginx如何獲取自定義請求header頭和URL參數(shù)的相關資料,本文適用于需要在nginx里獲取http請求頭信息或者傳遞的參數(shù)進行一些計算和處理的情況,需要的朋友可以參考下2022-07-07