亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

nginx: [emerg] unknown "connection_upgrade&qu

gecko23 / 3113人閱讀

摘要:什么是傳統(tǒng)的通訊模式是客戶端發(fā)起請(qǐng)求,服務(wù)端接收請(qǐng)求并作出響應(yīng)。而協(xié)議復(fù)用了的握手通道,具體指的是,客戶端通過請(qǐng)求與服務(wù)端協(xié)商升級(jí)協(xié)議。第二步,交換數(shù)據(jù),客戶端與服務(wù)端可以使用協(xié)議進(jìn)行雙向通訊。

問題


一天更新完主分支后啟動(dòng)nginx,結(jié)果報(bào)錯(cuò):nginx: [emerg] unknown "connection_upgrade" variable

解決方法

網(wǎng)上查,發(fā)現(xiàn)是nginx配置文件出了問題,將下面map代碼塊補(bǔ)上即可。

   http {
    map $http_upgrade $connection_upgrade {
    default upgrade;
    ""      close;
   }

    server {
        location / {
                    #…
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
            }
        }
}
思考

雖然問題解決了,但后來我想知道為什么會(huì)出現(xiàn)這種情況,以及解決方法的真正原理。
在這篇博客可以知道問題出在了nginx代理websocket上。

什么是websocket

傳統(tǒng)的http通訊模式是:客戶端發(fā)起請(qǐng)求,服務(wù)端接收請(qǐng)求并作出響應(yīng)。

而websocket協(xié)議復(fù)用了http的握手通道,具體指的是,客戶端通過HTTP請(qǐng)求與WebSocket服務(wù)端協(xié)商升級(jí)協(xié)議。

第一步,建立連接,客戶端使用http報(bào)文的格式發(fā)起協(xié)議升級(jí)的請(qǐng)求,服務(wù)端響應(yīng)協(xié)議升級(jí)。

第二步,交換數(shù)據(jù),客戶端與服務(wù)端可以使用websocket協(xié)議進(jìn)行雙向通訊。

nginx反向代理websocket


首先,客戶端發(fā)起協(xié)議升級(jí)的請(qǐng)求,而nginx在攔截時(shí)需要識(shí)別出這是一個(gè)協(xié)議升級(jí)(upgrade)的請(qǐng)求,所以必須顯式設(shè)置升級(jí)(Upgrade head)和連接頭(Connection head),如下:

    location /sockjs-node/ {
    proxy_pass http://127.0.0.1:4200/sockjs-node/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
}

完成后,nginx將其作為WebSocket連接處理。

接著,服務(wù)器響應(yīng)升級(jí)請(qǐng)求,由nginx做代理進(jìn)行處理,這時(shí),需要進(jìn)行如下配置:

http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        "" close;
    }
    
    server {
        ...
    }
}

這時(shí)就出現(xiàn)了一開始我所修改的地方,結(jié)合上面那段的內(nèi)容,我大概可以猜出來map 代碼段該作用主要是根據(jù)客戶端請(qǐng)求中 $http_upgrade 的值,來構(gòu)造改變 $connection_upgrade 的值,即根據(jù)變量 $http_upgrade 的值創(chuàng)建新的變量 $connection_upgrade。
由于我沒有進(jìn)行map映射,它不知道connection_upgrade是什么,所以就會(huì)出現(xiàn)unknown "connection_upgrade" variable錯(cuò)誤。

總結(jié)

即使是小小的一點(diǎn)改動(dòng),背后也會(huì)隱藏龐大的信息。如果止步于解決問題,而不是探索問題,就永遠(yuǎn)不會(huì)有進(jìn)步。

本人水平有限,歡迎各位在評(píng)論區(qū)指出不足,你們的反饋就是我的進(jìn)步動(dòng)力!
參考文檔:
https://www.nginx.com/blog/we...
https://www.cnblogs.com/chyin...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/40394.html

相關(guān)文章

  • Nginx 反向代理 websocket

    摘要:個(gè)人的理解參考資料的關(guān)于官方文檔開發(fā)者的博客文檔介紹的章節(jié) 最近有一個(gè)需求,就是需要使用 nginx 反向代理 websocket,經(jīng)過查找一番資料,目前已經(jīng)測(cè)試通過,本文只做一個(gè)記錄 注: 看官方文檔說 Nginx 在 1.3 以后的版本才支持 websocket 反向代理,所以要想使用支持 websocket 的功能,必須升級(jí)到 1.3 以后的版本,因此我這邊是下載的 Te...

    aisuhua 評(píng)論0 收藏0
  • 不一樣的nginx報(bào)錯(cuò)"Primary script unknown"

    摘要:昨天晚上忘記對(duì)開發(fā)環(huán)境做了什么改動(dòng),導(dǎo)致今天來了在進(jìn)行接口調(diào)試的時(shí)候提示這個(gè)大多數(shù)情況下來說是一個(gè)很簡(jiǎn)單的問題配置里面的錯(cuò)誤。然而我檢查了我的配置,發(fā)現(xiàn)并沒有什么問題。 昨天晚上忘記對(duì)開發(fā)環(huán)境做了什么改動(dòng),導(dǎo)致今天來了在進(jìn)行接口調(diào)試的時(shí)候nginx提示Primary script unknown,這個(gè)大多數(shù)情況下來說是一個(gè)很簡(jiǎn)單的問題:nginx配置里面的script_filename...

    simpleapples 評(píng)論0 收藏0
  • [gist]<div id=&quot;gist6376327&quot; class=&qu

    from http://oyanglul.us 1 [x/2 for x in range(2,10,2)]

    vspiders 評(píng)論0 收藏0
  • Nginx反向代理WebSocket響應(yīng)403的解決辦法

    摘要:在反向代理一個(gè)帶有功能的程序源代碼地址時(shí),發(fā)現(xiàn)訪問接口時(shí)總是出現(xiàn)響應(yīng),的配置參考的是官方文檔相關(guān)配置唯一不同的是我們的配置了。 在Nginx反向代理一個(gè)帶有WebSocket功能的Spring Web程序(源代碼地址)時(shí),發(fā)現(xiàn)訪問WebSocket接口時(shí)總是出現(xiàn)403響應(yīng),Nginx的配置參考的是官方文檔: http { // ssl 相關(guān)配置 ... map...

    王偉廷 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<