Nginx 为什么反向代理多个站点,访问是同一个站点?

发布于 2022-09-07 09:00:14 字数 2524 浏览 24 评论 0

1.Nginx 反向代理多个站点,访问是同一个站点。
192.157.1.1 放置了多个站点(例如,website1.com website2.com,...)

192.157.1.1:80 nginx 监听转发给127.0.0.1:8000
192.157.1.1:8000 APACHE 监听,一般处理nginx转发的http请求。
192.157.1.2:8000 其他服务器web监听

  • 情况一:配置一个server段,(server_name localhost)这样子,所有127的站点均可正常访问。
  • 情况二:配置两个server段,默认server不变,在前面插入一个server段(指向其他服务器),所有站点访问插入的server段网站。
  • 情况三:配置两个server段,默认server不变,在后面追加一个server段(指向其他服务器),所有站点访问默认最前面server段配置的站点。
  • 情况四:很神奇的,再额外在前面插入一个server段,也就是插入了两个server段,最后面是一个默认的。第二个插入的server段是存在于默认server段里面的其中一个站点,例如website1.com,此时,127的apache站点均可访问,包括website1.com,而且配置的其他服务器站点也可以访问。

我想知道为什么?在第一种情况下,nginx是正常处理。
第二种情况下,nginx匹配到第一个站点域名访问则正常,匹配不到第一个站点的域名,为什么不继续向下走,进入默认的配置段?
第三种情况下,nginx还未匹配到直接域名,请求就被转发到127.0.0.1:8000端口了。也一样,不继续向下匹配执行。
第四种情况下,令人费解,为什么追加两个server,所有的站点就都恢复正常了?

2.nginx.conf

...

http{
    include       mime.types;
    default_type  application/octet-stream;
    
...

    include /usr/local/nginx/vhost/*.conf;#位置1#
    
    server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
                proxy_pass http://local_to_httpd;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-IP $remote_addr;
            }
    }
    
    include /usr/local/nginx/vhost/*.conf;#位置2#

...

}
...

vhost/*.conf(vhost目录下只有一个文件时,例如:test.conf)
大致如下

server {
        listen       80;
        server_name www.test.com;
        index index.html index.htm index.php;
        root  /mnt/web/test/wwwroot;

        set_real_ip_from 10.0.0.0/16;
        real_ip_header proxy_protocol;

        location / {
            index  index.html index.htm;
            proxy_pass http://test-other.com:8000;#另外一台服务器
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
        }

        #access_log  /mnt/web/test/log/access.log test.log.format;
        error_log  /mnt/web/test/log/error.log;
}

当有两个配置文件时

test.conf => test.com
website1.conf => website1.conf

访问一切正常。

麻烦各位,有了解的解答下,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文