前几天搭了一个论坛处事器并放到了公司的局域网内里,论坛用的是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已经是真实的客户端地点了,从头注册,登录,发帖,都正常,反复了多次后没有发明问题,客户哪里也都正常了。
感激为我提供热情辅佐的三门板牙。