前幾天搭了一個論壇伺服器并放到了公司的區域網路裡面,論壇用的是9066端口并在路由器上面做了個端口轉發,而且把bbs.xxx.com這個域名也指向了公司的公網IP,因為想讓使用者在通路的時候不用輸入端口号于是就想在公司的web伺服器上面做個跳轉,将通路bbs.xxx.com的請求都轉到他的伺服器上面去。我第一個想法就是 用 nginx的rewrite,過程很簡單 配置如下:
server {
listen 80;
server_name bbs.xxx.com;
rewrite "^/(.*)$" http://bbs.xxx.com:9066/$1 break;
}
于是通路bbs.xxx.com檢查了一下,注冊,登入發帖等等操作都正常,本以為這樣就ok了,結果随後問題出現了,雖然能正常的跳轉但是 使用者浏覽器的域名欄上的位址後面一直跟着 9066 這個端口号,這讓上司很不滿意,于是我找了下nginx的文檔和在qq群問了下别的朋友,沒有什麼好辦法。于是就改用了 proxy_pass,這個配置也很簡單:
listen 80;
location /
{
proxy_pass http://bbs.xxx.com:9066/;
}
然後再通路 bbs.xxx.com 後面的端口号就不在了,注冊、登入、發帖都正常,可是不一會兒又出問題了,使用者反映論壇無法注冊,提示說“單一ip一天内隻能注冊5次”,這是怎麼回事,通過檢查日志後發現 所有公網發過來的請求竟然都是 網關的ip位址 ,這下我明白了簡單的加了proxy以後如果不進一步設定的話 nginx是不會去判斷真正的用戶端ip的,而是直接把路由的位址作為請求ip,是以會出現上述情況,分析後查了下 nginx的wiki 于是就在上面又加了幾條: