最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx配置WebSocket反向代理的實(shí)現(xiàn)示例

 更新時(shí)間:2023年08月04日 08:32:21   作者:微風(fēng)粼粼  
本文主要介紹了Nginx配置WebSocket反向代理的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、WebSocket協(xié)議

? WebSocket協(xié)議相比較于HTTP協(xié)議成功握手后可以多次進(jìn)行通訊,直到連接被關(guān)閉。但是WebSocket中的握手和HTTP中的握手兼容,它使用HTTP中的Upgrade協(xié)議頭將連接從HTTP升級(jí)到WebSocket。這使得WebSocket程序可以更容易的使用現(xiàn)已存在的基礎(chǔ)設(shè)施。

2、Nginx配置WebSocket反向代理

$ vim /usr/local/nginx/conf/nginx.conf (nginx配置文件)

# 在http上下文中增加如下配置,確保Nginx能處理正常http請(qǐng)求。
http {
  # 根據(jù)請(qǐng)求頭中的"Upgrade"字段來確定是否升級(jí)連接。如果請(qǐng)求頭中的"Upgrade"字段的值為"default",則將其升級(jí)為"upgrade"。
    如果請(qǐng)求頭中的"Upgrade"字段的值為空字符串(即沒有"Upgrade"字段),則將連接關(guān)閉。
    對(duì)于其他情況,默認(rèn)將"Upgrade"字段的值設(shè)為"upgrade"。
  map $http_upgrade $connection_upgrade {
    default upgrade;
    ''   close;
  }
  # 定義了一個(gè)名為"websocket"的負(fù)載均衡集群。
  upstream websocket {
    #ip_hash; # 這是一個(gè)負(fù)載均衡算法的注釋,表示使用IP哈希算法進(jìn)行負(fù)載均衡。
    server localhost:8010;  # 指定一個(gè)后端服務(wù)器地址
    server localhost:8011;
  }
  # 以下配置是在server上下文中添加,location指用于websocket連接的path。
  server {
    listen       80;
    server_name localhost;
    access_log /var/log/nginx/yourdomain.log;
    location / {
      proxy_pass http://websocket;
      proxy_http_version 1.1; # 指定使用HTTP/1.1協(xié)議進(jìn)行代理
      proxy_set_header Upgrade $http_upgrade; # 將請(qǐng)求頭中的"Upgrade"字段的值傳遞給后端服務(wù)器。
      proxy_set_header Connection $connection_upgrade; # 請(qǐng)求頭中的"Connection"字段的值設(shè)為"upgrade",表示要升級(jí)連接。
	  proxy_connect_timeout 4s; # 設(shè)置與后端服務(wù)器建立連接的超時(shí)時(shí)間為4秒。
	  proxy_read_timeout 7200s; # 置從后端服務(wù)器讀取響應(yīng)的超時(shí)時(shí)間為7200秒。
	  proxy_send_timeout 12s; # 設(shè)置向后端服務(wù)器發(fā)送請(qǐng)求的超時(shí)時(shí)間為12秒。
	  proxy_set_header Host $host; # 將請(qǐng)求頭中的"Host"字段的值設(shè)為當(dāng)前請(qǐng)求的主機(jī)名。
      proxy_set_header X-Real-IP $remote_addr; # 將請(qǐng)求頭中的"X-Real-IP"字段的值設(shè)為客戶端的真實(shí)IP地址。
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 將請(qǐng)求頭中的"X-Forwarded-For"字段的值設(shè)為客戶端IP地址的列表,這樣后端服務(wù)器就可以知道請(qǐng)求的真實(shí)來源IP。
	  proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr; # 將請(qǐng)求頭中的"HTTP_X_FORWARDED_FOR"字段的值設(shè)為客戶端的真實(shí)IP地址。
	  proxy_set_header X-Forwarded-Proto $scheme; # 將請(qǐng)求頭中的"X-Forwarded-Proto"字段的值設(shè)為請(qǐng)求的協(xié)議類型(HTTP或HTTPS)。
	  proxy_redirect   default; # 默認(rèn)啟用代理重定向。
    }
  }
}

核心是下面的配置 其他和普通反向代理沒區(qū)別, 表示請(qǐng)求服務(wù)器升級(jí)協(xié)議為WebSocket

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

這里面的關(guān)鍵部分在于HTTP的請(qǐng)求中多了如下頭部:

Upgrade: websocket
Connection: Upgrade

這兩個(gè)字段表示請(qǐng)求服務(wù)器升級(jí)協(xié)議為WebSocket。服務(wù)器處理完請(qǐng)求后,響應(yīng)如下報(bào)文:

# 狀態(tài)碼為101
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade

? 告訴客戶端已成功切換協(xié)議,升級(jí)為Websocket協(xié)議。握手成功之后,服務(wù)器端和客戶端便角色對(duì)等,就像普通的Socket一樣,能夠雙向通信。不再進(jìn)行HTTP的交互,而是開始WebSocket的數(shù)據(jù)幀協(xié)議實(shí)現(xiàn)數(shù)據(jù)交換。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-XqnLRKLi-1690603346484)(E:\PRD\Images\image-20230729114740230.png)]

3、配置反向代理常見問題

3.1 為什么要配置Host參數(shù)?

WebSocket反向代理需要配置host參數(shù)的原因是WebSocket協(xié)議的特性。在WebSocket協(xié)議中,客戶端在建立與服務(wù)端的WebSocket連接時(shí),會(huì)發(fā)送一個(gè)Origin頭部字段,用于標(biāo)識(shí)請(qǐng)求的來源。這個(gè)Origin字段的值通常是客戶端的域名。

當(dāng)使用反向代理來代理WebSocket請(qǐng)求時(shí),代理服務(wù)器會(huì)接收到客戶端的WebSocket連接請(qǐng)求。如果沒有配置host參數(shù),代理服務(wù)器會(huì)將自己的主機(jī)名作為Origin字段的值發(fā)送給服務(wù)端。而服務(wù)端在驗(yàn)證WebSocket連接時(shí)會(huì)比較Origin字段的值與其預(yù)期的值是否一致,如果不一致,則會(huì)拒絕連接。

為了解決這個(gè)問題,需要在反向代理配置中明確指定host參數(shù),將客戶端的原始域名作為host參數(shù)的值發(fā)送給服務(wù)端。這樣服務(wù)端就能正確驗(yàn)證WebSocket連接的來源,從而確保連接的安全性和正確性。

3.2 WebSocket反向代理為什么要設(shè)置http協(xié)議為1.1版本

當(dāng)使用WebSocket反向代理時(shí),將HTTP協(xié)議版本設(shè)置為1.1是為了確保與WebSocket協(xié)議的兼容性和正常工作。

WebSocket協(xié)議是在HTTP協(xié)議基礎(chǔ)上進(jìn)行升級(jí)的,它的握手過程與HTTP握手類似。在進(jìn)行WebSocket握手時(shí),客戶端會(huì)發(fā)送一個(gè)類似HTTP請(qǐng)求的握手請(qǐng)求,然后服務(wù)器進(jìn)行響應(yīng),最終建立WebSocket連接。在這個(gè)過程中,需要使用HTTP的一些特性和頭部字段。

將HTTP協(xié)議版本設(shè)置為1.1是因?yàn)閃ebSocket握手過程使用了HTTP/1.1的一些新特性,包括Upgrade頭部字段和Connection頭部字段的值設(shè)置為Upgrade。當(dāng)HTTP協(xié)議版本為1.1時(shí),代理服務(wù)器能夠正確理解并處理這些頭部字段,從而正確地轉(zhuǎn)發(fā)WebSocket握手請(qǐng)求和響應(yīng)。

如果將HTTP協(xié)議版本設(shè)置為較低的版本,如HTTP/1.0,代理服務(wù)器可能無法正確處理WebSocket握手請(qǐng)求,導(dǎo)致握手失敗或連接無法建立。因此,為了保證WebSocket反向代理的正常工作,一般會(huì)將HTTP協(xié)議版本設(shè)置為1.1版本。

需要注意的是,雖然WebSocket握手過程使用了HTTP協(xié)議,但WebSocket連接建立后,實(shí)際上是通過WebSocket協(xié)議進(jìn)行數(shù)據(jù)傳輸?shù)?,而不是HTTP協(xié)議。所以,一旦建立了WebSocket連接,HTTP協(xié)議版本的設(shè)置對(duì)后續(xù)的數(shù)據(jù)傳輸沒有影響。

到此這篇關(guān)于Nginx配置WebSocket反向代理的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Nginx WebSocket反向代理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • k8s部署nginx訪問Tomcat的實(shí)現(xiàn)示例

    k8s部署nginx訪問Tomcat的實(shí)現(xiàn)示例

    本文介紹了如何使用Kubernetes部署Nginx,并通過Nginx訪問Tomcat,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • nginx反向代理60s超時(shí)報(bào)錯(cuò)問題解決

    nginx反向代理60s超時(shí)報(bào)錯(cuò)問題解決

    本文主要介紹了Nginx反向代理時(shí)遇到60秒超時(shí)報(bào)錯(cuò)的問題,經(jīng)過排查發(fā)現(xiàn)是由于代理服務(wù)執(zhí)行時(shí)間過長導(dǎo)致的,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • Nginx的基本概念和原理

    Nginx的基本概念和原理

    這篇文章主要介紹了Nginx的基本概念和原理,Nginx專為性能優(yōu)化而開發(fā),性能是器最重要的考量,實(shí)現(xiàn)上非常注重效率,能經(jīng)受高負(fù)載的考驗(yàn),據(jù)報(bào)告能支持高達(dá)50,000個(gè)并發(fā)連接數(shù)。下文我們就來看看Nginx概念和原理,需要的小伙伴可以參考一下
    2022-03-03
  • 一文搞懂Nginx限流(簡單實(shí)現(xiàn))

    一文搞懂Nginx限流(簡單實(shí)現(xiàn))

    這篇文章主要介紹了一文搞懂Nginx限流(簡單實(shí)現(xiàn)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • nginx反向代理配置400,404,502等狀態(tài)的自定義頁面問題

    nginx反向代理配置400,404,502等狀態(tài)的自定義頁面問題

    這篇文章主要介紹了nginx反向代理配置400,404,502等狀態(tài)的自定義頁面問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Nginx限制特定IP訪問自己的網(wǎng)站實(shí)現(xiàn)的幾種方法

    Nginx限制特定IP訪問自己的網(wǎng)站實(shí)現(xiàn)的幾種方法

    本文主要介紹了使用Nginx限制特定IP訪問自己的網(wǎng)站的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Nginx的預(yù)定義變量方式

    Nginx的預(yù)定義變量方式

    這篇文章主要介紹了Nginx的預(yù)定義變量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • nginx的location的優(yōu)先級(jí)和匹配方式

    nginx的location的優(yōu)先級(jí)和匹配方式

    location是Nginx中的塊級(jí)指令,本文主要介紹了nginx的location的優(yōu)先級(jí)和匹配方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • Nginx?部署及配置詳細(xì)步驟(附詳細(xì)代碼)

    Nginx?部署及配置詳細(xì)步驟(附詳細(xì)代碼)

    Nginx是一個(gè)web服務(wù)器也可以用來做負(fù)載均衡及反向代理使用,目前使用最多的就是負(fù)載均衡,這篇文章主要介紹了Nginx部署及配置的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • nginx.conf配置兩個(gè)前端路徑

    nginx.conf配置兩個(gè)前端路徑

    本文主要介紹了nginx.conf配置兩個(gè)前端路徑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評(píng)論

库尔勒市| 南昌县| 苏尼特右旗| 万山特区| 江口县| 长顺县| 浪卡子县| 洛隆县| 元江| 台北市| 页游| 海门市| 克拉玛依市| 宜兰市| 武胜县| 白沙| 开鲁县| 洪湖市| 正定县| 上林县| 山阳县| 交口县| 翁牛特旗| 泰来县| 蓬莱市| 上林县| 胶州市| 平塘县| 四川省| 开平市| 安顺市| 罗田县| 汤阴县| 含山县| 通州市| 石嘴山市| 陇川县| 涡阳县| 罗平县| 青冈县| 泸州市|