Nginx配置WebSocket代理的示例代碼
Nginx
官方文檔網(wǎng)址 nginx documentation
... http:{ ... server{ ... # WebSocket代理 location /wsUrl/ { rewrite ^/wsUrl/(.*)$ /$1 break; #攔截標(biāo)識(shí)去除 proxy_pass http://192.168.100.20:8080; #這里是http不是ws,不用懷疑,代理的ip和port寫ws訪問的實(shí)際地址 proxy_http_version 1.1; #這里必須使用http 1.1 #下面兩個(gè)必須設(shè)置,請(qǐng)求頭設(shè)置為ws請(qǐng)求方式 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } ... } ... }
官方文檔代理樣例
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 9001; server_name localhost; location / { root html; index index.html index.htm; } location ^~ /websocket { proxy_pass http://localhost:8090/; proxy_http_version 1.1; 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_read_timeout 120s; proxy_set_header Upgrade websocket; proxy_set_header Connection Upgrade; } } }
Linux 查看安裝文件命令手冊(cè)
[!起因]
我使用指令 whereis nginx 跳出來了很多路徑,但是我不太明白每個(gè)路徑是什么意思,就仔細(xì)去看了看,然后發(fā)現(xiàn)了一個(gè)路徑 /usr/share/man/man8/ 這個(gè)目錄,下面一般都是手冊(cè)路徑,在這里面可以看很多軟件的基本指令操作 可使用指令 man nginx 來查看 nginx.8.gz 手冊(cè)。
Nginx 日志配置方案
可以參考 Nginx訪問日志(access_log)配置及信息詳解
一般使用 main
格式
如下
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' '$upstream_addr $upstream_response_time $request_time '; access_log logs/access.log main;
$remote_addr
: 客戶端的IP地址。$remote_user
: 使用HTTP基本身份驗(yàn)證的情況下,遠(yuǎn)程用戶的用戶名。$time_local
: 本地時(shí)間的訪問時(shí)間。$request
: 客戶端請(qǐng)求的內(nèi)容。$status
: 服務(wù)器響應(yīng)的HTTP狀態(tài)碼。$body_bytes_sent
: 發(fā)送給客戶端的字節(jié)數(shù),不包括響應(yīng)頭的大小。$http_referer
: 引用頁面的URL。$http_user_agent
: 客戶端的User-Agent字符串,標(biāo)識(shí)客戶端的瀏覽器和操作系統(tǒng)等信息。$http_x_forwarded_for
: X-Forwarded-For 頭,用于標(biāo)識(shí)原始客戶端的IP地址,當(dāng)請(qǐng)求通過代理服務(wù)器時(shí)使用。$upstream_addr
: 后端(上游)服務(wù)器的IP地址。$upstream_response_time
: 從后端服務(wù)器接收響應(yīng)的時(shí)間。$request_time
: 客戶端發(fā)起請(qǐng)求到收到響應(yīng)的總時(shí)間。
[!錯(cuò)誤]
配置 nginx 日志的時(shí)候,由于不知道要將 log_format main 配置放在哪里,就放在了最外層,導(dǎo)致錯(cuò)誤提示 nginx: [emerg] "log_format" directive is not allowed here in /etc/nginx/nginx.conf:14后序解決是 將 log_format main 放在 http {} 里面就解決問題了
成功解決問題–使用 Nginx 代理 WebSocket
nginx.conf
具體配置如下, 實(shí)現(xiàn)的功能是將所有發(fā)往 10.6.30.185:9001
的請(qǐng)求去匹配一下 url
里面有沒有 /websocket
這一級(jí),如果有就使用 WebSocket
請(qǐng)求發(fā)往 10.6.3.46:8001
,后序使用了6臺(tái)服務(wù)器進(jìn)行了一個(gè) nginx
代理 WebSocket
操作,都能夠在后臺(tái)讀取到信息,同時(shí),后臺(tái)也能夠推送信息過去。
user nobody; worker_processes 6; #nginx 開啟多核設(shè)置,目前185的機(jī)子,都是6核 worker_cpu_affinity 000001 000010 000100 001000 010000 100000; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; error_log /var/log/nginx/error.log info; #進(jìn)程文件 pid /var/run/nginx.pid; worker_rlimit_nofile 1024; events { use epoll; # 修改這里 worker_connections 1024; } # 設(shè)置http 服務(wù)器 http { include mime.types; #文件擴(kuò)展名與文件類型映射表 default_type application/octet-stream; #默認(rèn)文件類型 charset utf-8; #默認(rèn)編碼 fastcgi_connect_timeout 2000; fastcgi_send_timeout 2000; fastcgi_read_timeout 2000; client_max_body_size 1024m; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 120; gzip on; limit_req_zone $binary_remote_addr zone=test:10m rate=10r/s; #日志配置 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' '$upstream_addr $upstream_response_time $request_time '; #$remote_addr: 客戶端的IP地址。 #$remote_user: 使用HTTP基本身份驗(yàn)證的情況下,遠(yuǎn)程用戶的用戶名。 #$time_local: 本地時(shí)間的訪問時(shí)間。 #$request: 客戶端請(qǐng)求的內(nèi)容。 #$status: 服務(wù)器響應(yīng)的HTTP狀態(tài)碼。 #$body_bytes_sent: 發(fā)送給客戶端的字節(jié)數(shù),不包括響應(yīng)頭的大小。 #$http_referer: 引用頁面的URL。 #$http_user_agent: 客戶端的User-Agent字符串,標(biāo)識(shí)客戶端的瀏覽器和操作系統(tǒng)等信息。 #$http_x_forwarded_for: X-Forwarded-For 頭,用于標(biāo)識(shí)原始客戶端的IP地址,當(dāng)請(qǐng)求通過代理服務(wù)器時(shí)使用。 #$upstream_addr: 后端(上游)服務(wù)器的IP地址。 #$upstream_response_time: 從后端服務(wù)器接收響應(yīng)的時(shí)間。 #$request_time: 客戶端發(fā)起請(qǐng)求到收到響應(yīng)的總時(shí)間。 access_log /var/log/nginx/nginx-access.log main; map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 9001; server_name 10.6.30.185; location ^~ /websocket { proxy_pass http://10.6.3.46:8001; proxy_http_version 1.1; 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_read_timeout 120s; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } }
可能出現(xiàn)的問題
- 同一個(gè)網(wǎng)關(guān)出來的 IP 可能會(huì)重復(fù),所以如果我想要做一個(gè)具體的指定連接的
WebSocket IP
集合中,key
必須是mac
地址value
是 `連接的對(duì)象信息 - 能指定發(fā)消息的需求
到此這篇關(guān)于Nginx配置WebSocket代理的示例代碼的文章就介紹到這了,更多相關(guān)Nginx WebSocket代理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx配置location匹配順序詳細(xì)總結(jié)
這篇文章主要介紹了Nginx配置location匹配順序詳解,Nginx是十分輕量級(jí)的HTTP服務(wù)器,Nginx憑借其穩(wěn)定性、低資源消耗、簡(jiǎn)單配置和豐富的功能,從十多年前名不見經(jīng)傳的Web服務(wù)器軟件,發(fā)展到如今能夠跟Apache匹敵的地位,需要的朋友可以參考下2023-08-08Nginx設(shè)置響應(yīng)超時(shí)配置的實(shí)現(xiàn)
本文詳細(xì)介紹了如何查找和修改Nginx的配置文件,包括全局配置文件、站點(diǎn)配置文件、包含文件的查找,以及客戶端超時(shí)設(shè)置、代理超時(shí)設(shè)置、FastCGI超時(shí)設(shè)置的修改方法,最后還介紹了如何在Linux系統(tǒng)中重啟Nginx服務(wù),通過這些步驟,可以有效提高Nginx的性能和穩(wěn)定性2024-10-10Nginx設(shè)置404錯(cuò)誤頁面跳轉(zhuǎn)的幾種方法總結(jié)
一個(gè)網(wǎng)站項(xiàng)目,肯定是避免不了404頁面的,通常使用Nginx作為Web服務(wù)器時(shí),有些相關(guān)配置方法,下面小編給大家?guī)砹薔ginx實(shí)現(xiàn)404頁面的幾種方法,感興趣的朋友一起看看吧2024-03-03Nginx轉(zhuǎn)發(fā)丟失cookie表現(xiàn)形式及解決方案
本文主要介紹了Nginx轉(zhuǎn)發(fā)丟失cookie表現(xiàn)形式及解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01Nginx中l(wèi)ocation匹配以及rewrite重寫跳轉(zhuǎn)詳解
訪問重寫 rewrite 是 Nginx HTTP 請(qǐng)求處理過程中的一個(gè)重要功能,下面這篇文章主要給大家介紹了Nginx中l(wèi)ocation匹配以及rewrite重寫跳轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下2022-03-03Nginx中使用Lua腳本與圖片的縮略圖處理的實(shí)現(xiàn)
本文主要介紹了Nginx中使用Lua腳本與圖片的縮略圖處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03詳解阿里云LINUX服務(wù)器配置HTTPS(NGINX)
本篇文章主要介紹了阿里云LINUX服務(wù)器配置HTTPS(NGINX) ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02Nginx HTTP:413 Request Entity Too Large解決方法
這篇文章主要介紹了Nginx HTTP:413 Request Entity Too Large解決方法,這個(gè)問題需要修改PHP配置以及Nginx配置才可以解決,需要的朋友可以參考下2015-07-07