Nginx的重定向错误的虚拟主机(Nginx redirecting to wrong vhost)

2019-08-19 08:20发布

我身边有1300vhosts在一个nginx的的c​​onf文件。 所有具有以下布局(他们之后在虚拟主机文件互相列出)。

现在我的问题是,有时我的浏览器重定向到站点2 SITE1。 出于某种原因,而域名不匹配的情况。

它看起来像nginx的总是重定向到在虚拟主机文件中的第一个站点。

有人说知道这个问题可能是什么?

server {
    listen   80;

    server_name site1.com;
    rewrite ^(.*) http://www.site1.com$1 permanent;
}

server {
    listen   80;

    root /srv/www/site/public_html/src/public/;
    error_log /srv/www/site/logs/error.log;
    index index.php;

   server_name www.site1.com;

    location / {
        if (!-e $request_filename) {
            rewrite ^.*$ /index.php last;
        }
    }

    location ~ .(php|phtml)$ {
        try_files $uri $uri/ /index.php;
        fastcgi_param SCRIPT_FILENAME /srv/www/site/public_html/src/public$fastcgi_script_name;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

server {
    listen   80;

    server_name site2.com;
    rewrite ^(.*) http://www.site2.com$1 permanent;
}

server {
    listen   80;

    root /srv/www/site/public_html/src/public/;
    error_log /srv/www/site/logs/error.log;
    index index.php;

   server_name www.site2.com;

    location / {
        if (!-e $request_filename) {
            rewrite ^.*$ /index.php last;
        }
    }

    location ~ .(php|phtml)$ {
        try_files $uri $uri/ /index.php;
        fastcgi_param SCRIPT_FILENAME /srv/www/site/public_html/src/public$fastcgi_script_name;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

编辑也许还有一点要提的是,我重装这一切虚拟主机每2分钟的nginx -s重装。

在第一次测试中,它看起来像只重定向重装时发生......将做一些更多的测试,但是这可能是有帮助的..

Answer 1:

参考(nginx怎么处理请求): http://nginx.org/en/docs/http/request_processing.html

在这种配置nginx的测试,只有请求的报头字段“主机”,以确定哪些服务器的请求应该被路由到。 如果它的值不匹配任何服务器的名称,或请求不包含这个头域的话,那么nginx的意愿将请求路由到默认的服务器此端口。

默认的服务器是第一个 - 这是nginx的标准默认行为

你可以检查这些错误的请求的主机头?

你还可以创建一个明确的默认服务器来捕获所有这些坏的请求,并且只要登录请求信息(即$ HTTP_HOST)为调查不同的错误日志文件。

server {
    listen       80  default_server;
    server_name  _;
    error_log /path/to/the/default_server_error.log;

    return       444;
}

[ 更新 ]当你在做nginx -s reload ,你必须在nginx的的conf文件,所以很多领域,以下是可能的:

一重装是这样的

用新的配置开始新的工作进程,旧的工作进程正常关闭

所以,老工人和新工人可以并存一段时间。 例如,当您在重装时添加新的服务器模块(使用新的域名)到你的配置文件,新的工人将有新的域和旧的不会。 当请求恰好由老工人进程发送,这将被视为未知的主机,并通过默认的服务器提供服务。

你说,它的每2分钟完成。 你可以运行

ps aux |grep nginx

检查每个工人正在运行多久? 如果它要超过2分钟,重装可能并不如你预期的工作。



文章来源: Nginx redirecting to wrong vhost
标签: nginx