前幾天搭了一個論壇處事器并放到了公司的局域網內里,論壇用的是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已經是真實的客戶端地點了,從頭注冊,登錄,發帖,都正常,反復了多次后沒有發明問題,客戶哪里也都正常了。
感激為我提供熱情輔佐的三門板牙。