zoukankan      html  css  js  c++  java
  • nginx 域名跳转一例~~~(rewrite、proxy)

    前几天搭了一个论坛服务器并放到了公司的局域网里面,论坛用的是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已经是真实的客户端地址了,重新注册,登录,发帖,都正常,重复了多次后没有发现问题,客户那里也都正常了。

  • 相关阅读:
    sql存储过程简单教程
    深入揭示Web 2.0核心技术——混搭
    Struts 2创始人Patrick Lightbody看《精通Struts 2:Web 2.0开发实战 》
    深入全面阐释Struts 2的方方面面
    设计原本如此简单
    掌握ASP.NET技术之捷径
    Struts 2创始人Patrick Lightbody作序推荐
    Struts 2权威著作
    Amazon超级畅销书之《C#与.NET 3.5高级程序设计(第4版)》
    Web开发领域最热门的话题之混搭
  • 原文地址:https://www.cnblogs.com/doseoer/p/5291739.html
Copyright © 2011-2022 走看看