代码之家  ›  专栏  ›  技术社区  ›  Yogesh

Nginx未按预期重定向域

  •  0
  • Yogesh  · 技术社区  · 1 年前

    我有以下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-deb11/”时,我想将他们重定向到“https://dashboard-test-deb11.company.com“但由于某些原因,它只服务于localhost:3000,如块3中所述。

    我有两个疑虑:

    1. 为什么第二个块不适用于URL“dashboard-test-deb11/”
    2. 为什么第三块在工作?我在那个块中提到了“server_name dashboard-test-deb11.company.com”,但它仍然适用于“dashboard-stest-deb11/”
    2 回复  |  直到 1 年前
        1
  •  1
  •   Anvith    1 年前

    为什么第二个块不适用于URL“dashboard-test-deb11/”

    这个 listen 没有为第二个块定义参数

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

    假设您已经正确设置了DNS记录,这应该会起作用。

    为什么第三块在工作?我提到了“服务器名称 dashboard-test-deb11.company.com“在那个街区,它仍然 为“dashboard-test-deb11/”工作

    你已经设置了 default_server 参数 Nginx将转发任何与任何其他服务器块不匹配的请求 server_name 的参数 默认服务器 无论 服务器名称 在该块中定义。

    由于您的第二个服务器块没有在端口443上侦听,所以所做的任何https请求都被发送到第三个块

    您可以阅读更多关于如何在Nginx中处理请求的信息 here

        2
  •  0
  •   Richie QC    1 年前

    为了使第二个块按预期工作,您应该包括一个“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”。