因為nginx賬號不能直接啟動80端口,所以利用iptables做了80到8081端口的轉(zhuǎn)發(fā),這樣外部應(yīng)用可以直接訪問80端口,然后通過iptables轉(zhuǎn)發(fā)到真正的nginx服務(wù)的8081端口。
Iptables轉(zhuǎn)發(fā)命令:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081 |
外網(wǎng)的網(wǎng)頁頁面能打通,如下:
[tomcat@dev_121_21 ~]$ wget http://bright.test.com/PLATFORM_AUTH_Service/1.html --2016-11-22 12:43:01-- http://bright.test.com/PLATFORM_AUTH_Service/1.html 正在解析主機 bright.test.com... 192.168.121.21 正在連接 bright.test.com|192.168.121.21|:80... 已連接。 已發(fā)出 HTTP 請求,正在等待回應(yīng)... 200 OK 長度:39 [text/html] 正在保存至: “1.html”
100%[=====================================================================================================================================================>] 39 --.-K/s in 0s
2016-11-22 12:43:01 (4.13 MB/s) - 已保存 “1.html” [39/39])
[tomcat@dev_121_21 ~]$ |
本地的service服務(wù)器打不通:
[tomcat@dev_121_21 ~]$ wget http://bright.test.com/PLATFORM_AUTH_Service/remoting/AuthenticationService --2016-11-22 12:29:17-- http://bright.test.com/PLATFORM_AUTH_Service/remoting/AuthenticationService 正在解析主機 bright.test.com... 192.168.121.21 正在連接 bright.test.com|192.168.121.21|:80... 失?。壕芙^連接。 [tomcat@dev_121_21 ~]$ |
問題在哪里呢?直接telnet端口80試試
# telnet域名的80端口不通 [tomcat@dev_121_21 ~]$ telnet bright.test.com 80 Trying 192.168.121.21... telnet: connect to address 192.168.121.21: Connection refused [tomcat@dev_121_21 ~]$ # telnet 域名所在ip地址的80端口,也不通 [tomcat@dev_121_21 ~]$ telnet 192.168.121.21 80 Trying 192.168.121.21... telnet: connect to address 192.168.121.21: Connection refused [tomcat@dev_121_21 ~]$
# 因為80只是iptables轉(zhuǎn)發(fā)的端口,不是真正nginx服務(wù)的端口,nginx服務(wù)的8081端口是有效的, [tomcat@dev_121_21 ~]$ telnet bright.test.com 8081 Trying 192.168.121.21... Connected to bright.test.com. Escape character is '^]'. Connection closed by foreign host. [tomcat@dev_121_21 ~]$ |
問題場景很明顯了,就是本地本機telnet不通80端口,其它的外部過來的訪問80端口都ok。
問題分析:
外網(wǎng)訪問需要經(jīng)過PREROUTING鏈,但是localhost以及192.168.121.21本機ip地址不經(jīng)過該鏈,因此需要用OUTPUT。
設(shè)置output限制:
#在本機telnet也可以做轉(zhuǎn)發(fā)到本機端口,不過限制了ip地址為localhost的域名訪問 [root@dev_121_21 ~]#iptables -t nat -A OUTPUT -d 192.168.121.21 -p tcp --dport 80 -j REDIRECT --to-ports 8081
#不限制ip地址的訪問 [root@dev_121_21 ~]#iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8081
PS:如果想外部內(nèi)部都通過域名來走,而域名又綁定實際的ip地址的話,那么這里就需要采用第一種限制域名實際ip的方式來操作才能有效
# iptables永久生效,保存到系統(tǒng)配置中 [root@dev_121_21 ~]# service iptables save; iptables:將防火墻規(guī)則保存到 /etc/sysconfig/iptables: [確定] [root@dev_121_21 ~]# chkconfig --level 2345 iptables on; [root@dev_121_21 ~]# chkconfig --add iptables; [root@dev_121_21 ~]# service iptables restart iptables:清除防火墻規(guī)則: [確定] iptables:將鏈設(shè)置為政策 ACCEPT:nat [確定] iptables:正在卸載模塊: [確定] iptables:應(yīng)用防火墻規(guī)則: [確定] [root@dev_121_21 ~]#
|
再試下,本地就可以訪問本地的service接口服務(wù)了:
[tomcat@dev_121_21 ~]$ wget http://bright.test.com/PLATFORM_AUTH_Service/remoting/AuthenticationService --2016-11-22 12:51:14-- http://bright.test.com/PLATFORM_AUTH_Service/remoting/AuthenticationService 正在解析主機 bright.test.com... 192.168.121.21 正在連接 bright.test.com|192.168.121.21|:80... 已連接。 已發(fā)出 HTTP 請求,正在等待回應(yīng)... 405 Method Not Allowed 2016-11-22 12:51:14 錯誤 405:Method Not Allowed。
[tomcat@dev_121_21 ~]$ |
參考文章:http://blog.csdn.net/zzhongcy/article/details/42738285