Nginx未按预期重定向域

1bqhqjot  于 2023-10-17  发布在  Nginx
关注(0)|答案(2)|浏览(117)

我有下面的nginx配置文件

server {
        listen 80 default_server;

        server_name _;
        return 301 https://dashboard-test-deb11.company.com$request_uri;
}

server {
        server_name dashboard-test-deb11;
        return 301 https://dashboard-test-deb11.company.com$request_uri;
}

server {
        listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;

        server_name dashboard-test-deb11.company.com;

        ssl_certificate    /etc/nginx/certificates/certnew.crt;
        ssl_certificate_key    /etc/nginx/certificates/server.key;

        location / {
                proxy_pass http://localhost:3000;
                proxy_http_version 1.1;
                proxy_set_header   X-Forwarded-For $remote_addr;
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
        }
}

当用户输入URL“dashboard-test-deb 11/”时,我想将他们重定向到“https://dashboard-test-deb11.company.com“,但由于某种原因,它只提供localhost:3000,如块3所述。
我有两个疑问:
1.为什么第二个块不适用于URL“dashboard-test-deb 11/”
1.为什么第三块能用?我在该块中提到了“server_name dashboard-test-deb11.company.com“,但它仍然适用于“dashboard-test-deb 11/”

neekobn8

neekobn81#

为什么第二个块不适用于URL“dashboard-test-deb 11/”
listen参数没有为第二个块定义

server {
        listen 443;
        server_name dashboard-test-deb11;
        return 301 https://dashboard-test-deb11.company.com$request_uri;
}

假设您已正确设置DNS记录,此操作应该有效。
为什么第三块能用?我在该块中提到了“server_name dashboard-test-deb11.company.com“,但它仍然适用于“dashboard-test-deb 11/”
设置default_server参数。Nginx会将任何不匹配任何其他服务器块server_name参数的请求转发到default_server块,而不管该块中定义的server_name
由于您的第二个服务器块没有侦听端口443,因此发出的任何https请求都将发送到第三个块
你可以阅读更多关于如何在Nginx here中处理请求的信息

x7yiwoj4

x7yiwoj42#

为了使第二个块按预期工作,您应该包含一个location块,它定义如何处理此server_name的请求。
举例来说:

server {
    server_name dashboard-test-deb11;
    listen 80;

    location / {
        return 301 https://dashboard-test-deb11.company.com$request_uri;
    }
}

第三个服务器块正在工作,因为它有一个server_name指令设置为“dashboard-test-deb11.company.com“。

相关问题