搭建nginx反向代理用做內網域名轉發


情景

由於公司內網有多台服務器的http服務要映射到公司外網靜態IP,如果用路由的端口映射來做,就只能一台內網服務器的80端口映射到外網80端口,其他服務器的80端口只能映射到外網的非80端口。非80端口的映射在訪問的時候要域名加上端口,比較麻煩。並且公司入口路由最多只能做20個端口映射。肯定以后不夠用。
然后k兄就提議可以在內網搭建個nginx反向代理服務器,將nginx反向代理服務器的80映射到外網IP的80,這樣指向到公司外網IP的域名的HTTP請求就會發送到nginx反向代理服務器,利用nginx反向代理將不同域名的請求轉發給內網不同機器的端口,就起到了“根據域名自動轉發到相應服務器的特定端口”的效果,而路由器的端口映射做到的只是“根據不同端口自動轉發到相應服務器的特定端口”,真是喜大普奔啊。

涉及的知識:nginx編譯安裝,nginx反向代理基本配置,路由端口映射知識,還有網絡域名等常識。

本次實驗目標是做到:在瀏覽器中輸入xxx123.tk能訪問到內網機器192.168.10.38的3000端口,輸入xxx456.tk能訪問到內網機器192.168.10.40的80端口。

配置步驟

服務器ubuntu 12.04

###更新倉庫

#下載nginx和相關軟件包

pcre是為了編譯rewrite模塊,zlib是為了支持gzip功能。額,這里nginx版本有點舊,因為我還要做升級nginx的實驗用。大家可以裝新版本。

#安裝編譯環境

#創建nginx用戶

所謂的unprivileged user

#開始編譯安裝

#給文件夾授權

#修改配置文件
vim nginx.conf

編輯反向代理服務器配置文件:
vim /usr/local/nginx/conf/reverse-proxy.conf

然后重新加載nginx配置文件,使之修改生效,再把xxx123.tk域名指向公司靜態IP,這樣就成功的做到了在瀏覽器中輸入xxx123.tk的時候訪問的內網服務器192.168.10.38的3000端口,輸入xxx456.tk訪問192.168.10.40的80端口的作用。
如果想對后端機器做負載均衡,像下面這配置就可以把對nagios.xxx123.tk的請求分發給內網的131和132這兩台機器做負載均衡了。

額,關於負載均衡和緩存就不多說了,這里只是要起到一個簡單的“域名轉發”功能。
另外,由於http請求最后都是由反向代理服務器傳遞給后段的機器,所以后端的機器原來的訪問日志記錄的訪問IP都是反向代理服務器的IP。
要想能記錄真實IP,需要修改后端機器的日志格式,這里假設后端也是一台nginx:
在后端配置文件里面加入這一段即可:

再看看原來日志的格式長什么樣:

看出區別了吧

 

遇到的問題

 

  • 之前沒配置下面這段,訪問時候偶爾會出現504 gateway timeout,由於偶爾出現,所以不太好排查

報錯日志:

從日志看來是連接超時了,網上一通亂查之后估計可能是后端服務器響應超時了,本着大膽假設,小心求證的原則,既然假設了錯誤原因就要做實驗重現錯誤:那就調整代理超時參數,反過來把代理超時閥值設小(比如1ms)看會不會次次出現504。后來發現把proxy_read_timeout 這個參數設置成1ms的時候,每次訪問都出現504。於是把這個參數調大,加入上面那段配置,解決問題了。

作者郵箱:790455803@qq.com,有問題可以直接EMAIL作者,當然也可以加入我們ttlsa群單獨私聊或者群里發提問。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM