需求:內網有一台mqtt協議服務器,需要將外網的mqtt請求通過一台服務器代理到內網的mqtt服務器上。而這台代理服務器不會開放出了80之外的端口,所以只能使用80端口來轉發mqtt請求。
步驟:
1.安裝nginx,步驟略。
2.關閉80端口。
(1)通常80端口會被apache的httpd進程使用,查看進程使用80端口的命令是:
sudo netstat -apn|grep 80
(2)關閉使用80端口的進程,有兩種方式,第一種是“kill -9 進程號”,這個命令好像殺不掉httpd進程,就是用第二種命令“pkill -9 httpd”。
3.修改nginx的配置文件。
(1)Nginx1.9 版本以后增加 stream模塊,可以對tcp,udp請求進行代理和負載均衡了。
(2)打開配置文件,添加如下模塊:
stream {
server {
listen 80;
proxy_pass apllo;
}
upstream apllo {
server 127.0.0.1:31613;
}
}
然后刪除http模塊。
(3)重啟nginx,命令是“nginx -s reload”,這個命令不一定好用,如果不好用的話,先用“pkill -9 nginx”命令殺掉nginx,再用“nginx -c /etc/nginx/nginx.conf”命令啟動nginx。
注意:在啟動nginx的過程中,可能會報一個端口80被占用的錯誤,是因為配置文件中http模塊也在監聽80端口,所以之后在stream模塊監聽80端口就報錯了,解決辦法就是刪除http模塊的配置。