nginx的default.nginx中添加
location ~ ^/mqtt {
proxy_pass http://emqttd:8083;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# nginx支持websockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
說明:
1. 如果使用了多個代理,不能 使用proxy_set_header X-Real-IP $remote_addr直接得到用戶真實IP,需要使用命令 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
1)X-real-ip是一個自定義的變量名,名字可以隨意取,這樣做完之后,用戶的真實ip就被放在X-real-ip這個變量里了,然后,在web端可以這樣獲取:request.getAttribute("X-real-ip")
2)$remote_addr用於獲取到上一級代理的IP
3)$proxy_add_x_forwarded_for變量包含客戶端請求頭中的"X-Forwarded-For",與$remote_addr兩部分,他們之間用逗號分開,例如:(223.104.6.125, 10.10.10.45),第一個是用戶的真實IP,第二個是一級代理的IP,依此類推
2. Nginx通過在客戶端和后端服務器之間建立隧道來支持WebSockets通信。為了讓Nginx可以將來自客戶端的Upgrade請求發送到后端服務器,Upgrade和Connection的頭信息必須被顯式的設置