nginx 域名跳轉一例~~~(rewrite、proxy)


http://storysky.blog.51cto.com/628458/486338

前幾天搭了一個論壇服務器並放到了公司的局域網里面,論壇用的是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,這個配置也很簡單:

server {
listen       80;
server_name  bbs.xxx.com;
        location /
         {
        proxy_pass http://bbs.xxx.com:9066/;
          }
        }

然后再訪問 bbs.xxx.com 后面的端口號就不在了,注冊、登錄、發帖都正常,可是不一會兒又出問題了,用戶反映論壇無法注冊,提示說“單一ip一天內只能注冊5次”,這是怎么回事,通過檢查日志后發現 所有公網發過來的請求竟然都是 網關的ip地址 ,這下我明白了簡單的加了proxy以后如果不進一步設置的話 nginx是不會去判斷真正的客戶端ip的,而是直接把路由的地址作為請求ip,所以會出現上述情況,分析后查了下 nginx的wiki 於是就在上面又加了幾條:

server {
listen       80;
server_name  bbs.xxx.com;
        location /
         {
        proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://bbs.xxx.com:9066/;
          }
      }

改完以后 reload 了一下nginx,發現日志里面的源ip已經是真實的客戶端地址了,重新注冊,登錄,發帖,都正常,重復了多次后沒有發現問題,客戶那里也都正常了。

 

 


免責聲明!

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



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