nginx 在 *:80 之前匹配 127.0.0.1

nginx 在 *:80 之前匹配 127.0.0.1

我通过包含 conf.d/*.conf 设置了以下两个服务器指令。当我通过公共外部 IP 地址导航到服务器时,它似乎与 127.0.0.1 的服务器匹配,因为 localhost.access_log 文件中添加了一个条目。我预计这只会在通过 localhost 访问时发生。从外部 IP,我预计会匹配 .host.tld 指令server_namedefault_server参数。

我是否需要确保 conf 文件的加载顺序?为什么 127.0.0.1 上的 listen 会以这种方式匹配?第二个 location 指令是空的吗?

server {
    listen 127.0.0.1;
    server_name localhost;

    access_log /var/log/nginx/localhost.access_log main;
    error_log /var/log/nginx/localhost.error_log info;

    root /var/www/localhost/htdocs;
}

server {
    listen 80 default_server;
    server_name .host.tld;

    access_log /var/log/nginx/host.access_log main;
    error_log /var/log/nginx/host.error_log info;

    root /var/www/host/htdocs;

    location = / {
            index index.php index.html;
    }

    location / {
    }
}

答案1

将两个listen指令更改为80并将127.0.0.1名称添加到server_name段中localhost可以修复此问题:

server {
    listen 80;
    server_name localhost;

    access_log /var/log/nginx/localhost.access_log main;
    error_log /var/log/nginx/localhost.error_log info;

    root /var/www/localhost/htdocs;
}

server {
    listen 80 default_server;
    server_name .host.tld;

    access_log /var/log/nginx/host.access_log main;
    error_log /var/log/nginx/host.error_log info;

    root /var/www/host/htdocs;

    location = / {
            index index.php index.html;
    }

    ...
}

相关内容