使用nginx作為websocket的proxy server

以下內(nèi)容均copy該文章,鏈接地址

一、下載

下載鏈接硬猫。
下載后解壓即可。

二改执、修改配置文件

nginx配置文件在 nginx-1.8.0\conf\nginx.conf

server {
    listen 80;
    server_name xxx.com;
    # add_header    '*' ;
    location /u/ {
        # 反向代理透傳客戶端ip
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://127.0.0.1:8001;
        proxy_redirect off;
    }

    location /c/ {
        proxy_pass http://127.0.0.1:8002;
        # WebScoket Support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header Origin xxx;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
    }
}

備份一下這個配置文件啸蜜。

首先為服務(wù)器設(shè)置監(jiān)聽端口,然后是服務(wù)的域名辈挂。

location的具體用法在這里要展開說一下衬横,因為實在太常用到了。

location [=|~|~*|^~] patt {

}

這里分別是4個語法

  1. 精確匹配终蒂。

  2. 正則表達(dá)式匹配蜂林。

  3. 正則表達(dá)式不區(qū)分大小寫匹配。

  4. ^~ 開頭表示uri以某個常規(guī)字符串開頭后豫,理解為匹配url路徑即可悉尾。nginx不對url做編碼突那,因此請求為/static/20%/aa挫酿,可以被規(guī)則^~ /static/ /aa匹配到(注意是空格)。

  5. 另外還有一種用法沒在這里 加 愕难!號的用法早龟。!和!*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配的正則。

這里比如我要捕捉一個請求 /oauth/user 的請求轉(zhuǎn)發(fā)到本地 8000 端口:

location /oauth/ {
        proxy_pass http://localhost:8000;
   }

這里比如我又要捕捉一個/api/pp/asdasd 的請求轉(zhuǎn)發(fā)到 /pp/asdasd:

location ~ ^/api/(.*) {
        proxy_pass http://127.0.0.1:8000/$1?$args;
   }

這個正則寫法稍微進階了一點猫缭。我們以正則正則表達(dá)式 ^ 表示開始匹配葱弟,然后精確匹配/api/這一層然后使用正則表達(dá)式分組捕捉后面捕捉到的信息,在轉(zhuǎn)發(fā)的時候我們把捕捉到的分組信息追加到轉(zhuǎn)發(fā)之后猜丹,就完成了一個動態(tài)轉(zhuǎn)發(fā)地址芝加,另外值得一題的是,location中捕捉到的 uri 是不帶參數(shù)的射窒,如果需要把參數(shù)也追加到后面需要手動增加后面 $args 變量藏杖。這里的 $args 由 nginx 提供用于存儲傳遞的變量将塑。更多探索可以參考文章末尾 reference 的第一篇和第三篇文章。

下面我依次介紹各參數(shù)作用:

proxy_set_header X-Real-IP $remote_addr;               # 遠(yuǎn)端真實ip地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   # 反向代理之后轉(zhuǎn)發(fā)之前的ip地址
proxy_set_header Host $http_host;                    # http請求的主機域名
proxy_set_header X-NginX-Proxy true;                 # nginx代理

這些參數(shù)都是在nginx反向代理中使用的蝌麸。

proxy_pass http://127.0.0.1:8001;    # 反向代理轉(zhuǎn)發(fā)地址
proxy_redirect off;                  # 代理是否支持重定向

下面匹配/c/路徑下的点寥,是我的websocket轉(zhuǎn)發(fā)服務(wù)。跟上面不同的是来吩,他需要再header里面加入下面內(nèi)容

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

升級http1.1到 websocket協(xié)議敢辩。另外有一個特別值得注意的地方是,如果websocket服務(wù)器在收到websocket握手包弟疆,查看Origin信息與所在域信息不符的話戚长。會直接拒絕服務(wù)。這點很坑兽间,我花了接近半天的時間來找為什么連不上的原因历葛,最后竟然發(fā)現(xiàn)是Origin 必須和請求地址在一個域,不然會被拒絕訪問并且返回403.

另外以上的所有配置里面的變量都是可以通過get_header里面的信息拿到并且獲取的嘀略。

另外再提一點就是 upstream 的使用恤溶,之前我都是直接在 proxy_pass 那里寫轉(zhuǎn)發(fā)地址。后來發(fā)現(xiàn)只要指定好 upstream 地址之后帜羊,就可以方便的進行負(fù)載均衡或者直接用upstream 的 name 進行轉(zhuǎn)發(fā)咒程。這里再貼一個配置看下:

server {
    listen       8030;
    server_name  odin;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
    location ~ ^/api/v4/axiba/(.*) {
        proxy_pass http://odin/$1?$args;
    }
}
upstream odin {
    server localhost:8999;
}

這里我配置了一個叫 odin 的服務(wù)器。然后指定了一個 server 地址讼育。這里其實可以同時指定很多個 server 地址進行負(fù)載均衡帐姻。

然后在 location 中使用的時候就可以設(shè)置轉(zhuǎn)發(fā)了 要使用 http//:upstream/XXXX 這種形式。

根據(jù)各不同想更詳細(xì)查看配置的 可以查閱nginx的官網(wǎng)和reference奶段。

以上饥瓷。

Reference:

https://www.kancloud.cn/curder/nginx/97541 Nginx的location詳解
https://segmentfault.com/n/1330000006925038 nginx 配置文件梳理
http://seanlook.com/2015/05/17/nginx-location-rewrite/ nginx配置location總結(jié)及rewrite規(guī)則寫法
http://www.ha97.com/5194.html (總結(jié))Nginx配置文件nginx.conf中文詳解
http://nginx.org/en/docs/http/websocket.html WebSocket proxying

三、啟動nginx

注意不要直接雙擊nginx.exe痹籍,這樣會導(dǎo)致修改配置后重啟呢铆、停止nginx無效,需要手動關(guān)閉任務(wù)管理器內(nèi)的所有nginx進程

在nginx.exe目錄蹲缠,打開命令行工具棺克,用命令 啟動/關(guān)閉/重啟nginx

start nginx : 啟動nginx
nginx -s reload :修改配置后重新加載生效
nginx -s reopen :重新打開日志文件
nginx -t -c /path/to/nginx.conf 測試nginx配置文件是否正確

關(guān)閉nginx:
nginx -s stop :快速停止nginx
nginx -s quit :完整有序的停止nginx

如果遇到報錯:
bash: nginx: command not found

有可能是你再linux命令行環(huán)境下運行了windows命令,

如果你之前是允許 nginx -s reload報錯线定, 試下 ./nginx -s reload

或者 用windows系統(tǒng)自帶命令行工具運行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末娜谊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子斤讥,更是在濱河造成了極大的恐慌纱皆,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異派草,居然都是意外死亡撑帖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門澳眷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胡嘿,“玉大人,你說我怎么就攤上這事钳踊≈缘校” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵拓瞪,是天一觀的道長缴罗。 經(jīng)常有香客問我,道長祭埂,這世上最難降的妖魔是什么面氓? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮蛆橡,結(jié)果婚禮上舌界,老公的妹妹穿的比我還像新娘。我一直安慰自己泰演,他們只是感情好呻拌,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睦焕,像睡著了一般藐握。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垃喊,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天猾普,我揣著相機與錄音,去河邊找鬼本谜。 笑死初家,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的耕突。 我是一名探鬼主播笤成,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼评架,長吁一口氣:“原來是場噩夢啊……” “哼眷茁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纵诞,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤上祈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體登刺,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡籽腕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了纸俭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皇耗。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖揍很,靈堂內(nèi)的尸體忽然破棺而出郎楼,到底是詐尸還是另有隱情,我是刑警寧澤窒悔,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布呜袁,位于F島的核電站,受9級特大地震影響简珠,放射性物質(zhì)發(fā)生泄漏阶界。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一聋庵、第九天 我趴在偏房一處隱蔽的房頂上張望膘融。 院中可真熱鬧,春花似錦祭玉、人聲如沸托启。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屯耸。三九已至,卻和暖如春蹭劈,著一層夾襖步出監(jiān)牢的瞬間疗绣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工铺韧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留多矮,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓哈打,卻偏偏與公主長得像塔逃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子料仗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容