';冲突的服务器名称';nginx有两个默认/捕获所有位置-一个有默认的_服务器,一个没有?

';冲突的服务器名称';nginx有两个默认/捕获所有位置-一个有默认的_服务器,一个没有?,nginx,Nginx,我在这里束手无策。我已经和nginx配置斗争了几个小时。以下是我尝试使用的两个模块: server { listen 80 default_server; location /health-check { default_type 'text/plain'; access_log off; return 200; } } server { listen 80; location / { re

我在这里束手无策。我已经和nginx配置斗争了几个小时。以下是我尝试使用的两个模块:

server {
    listen 80 default_server;
    location /health-check {
        default_type 'text/plain';
        access_log off;
        return 200;
    }
}

server {
    listen 80;
    location / {
        return 301 https://$http_host$request_uri;
    }
}

# other application servers/upstreams follow -- one is provided here for completeness,
# although the issue is almost certainly above

upstream quinoa-icehouse {
    server 172.17.8.100:49153;

}

server {
    server_name ~^quinoa-icehouse\.(?<domain>.+)$;
    server_name_in_redirect off;
    port_in_redirect off;


    listen 443 ssl spdy;
    listen 80;
    ssl_certificate /etc/ssl/deis.cert;
    ssl_certificate_key /etc/ssl/deis.key;

    location / {

        proxy_buffering             off;
        proxy_set_header            Host $host;

        proxy_set_header            X-Forwarded-Proto $scheme;

        proxy_set_header            X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_redirect              off;
        proxy_connect_timeout       30s;
        proxy_send_timeout          1200s;
        proxy_read_timeout          1200s;
        proxy_http_version          1.1;
        proxy_set_header            Upgrade           $http_upgrade;
        proxy_set_header            Connection        $connection_upgrade;

        proxy_next_upstream         error timeout http_502 http_503 http_504;

        add_header                  X-Deis-Upstream   $upstream_addr;

        proxy_pass                  http://quinoa-icehouse;
    }
}

我有没有办法完成我所追求的?谢谢

本质上,您超出了Nginx定义的参数。可以说,您不能让两个默认服务器块彼此重叠

但是,您可以通过定义以下内容来实现所需:

  • 在端口80上侦听以将所有请求重定向到端口443的“捕获所有”块
  • 在端口443上侦听所有不匹配域的“捕获所有”块
  • 然后,您需要确保以下几点:

  • 删除“default_server”指令,并依赖服务器块的位置,如示例答案所示
  • 确保其他应用程序服务器/上游仅侦听端口443 因此,您的配置应该是以下内容:

    http {
    
        [ ... ]
    
        # Default to redirect from Port 80 to Port 443
        server {
            listen 80;
            return 301 https://$host$request_uri;
        }
        # Default for unmatched domains on Port 443
        server {
            listen 443 ssl spdy;
            ssl_certificate /etc/ssl/someCert.cert;
            ssl_certificate_key /etc/ssl/someKey.key;
            # Return 403, 404 or 444
            return 403;
        }
    
        # Other servers.
        # 1. These must be below this for this configuration to work.
        # 2. None should listen on Port 80
        server {
            server_name ABC
            listen 443 ssl spdy;
            ssl_certificate /etc/ssl/someCert.cert;
            ssl_certificate_key /etc/ssl/someKey.key;
    
            [ ... ]
    
        }
        server {
            server_name XYZ
            listen 443 ssl spdy;
            ssl_certificate /etc/ssl/someCert.cert;
            ssl_certificate_key /etc/ssl/someKey.key;
    
            [ ... ]
    
        }
    }
    
    参考:


    还请注意,对于只返回简单响应的简单服务器块,您不需要位置块。

    合并两个第一个服务器我希望在匹配服务器名称时出现301,然后您应该添加
    server\u name
    当然,但是
    server\u name
    值是多少?我希望它与所有服务器名称匹配。谢谢Dayo!这给了我一些可以继续下去的东西。我会试一试,如果一切正常,我会接受的。当然。希望能给你一个工作配置。
    http {
    
        [ ... ]
    
        # Default to redirect from Port 80 to Port 443
        server {
            listen 80;
            return 301 https://$host$request_uri;
        }
        # Default for unmatched domains on Port 443
        server {
            listen 443 ssl spdy;
            ssl_certificate /etc/ssl/someCert.cert;
            ssl_certificate_key /etc/ssl/someKey.key;
            # Return 403, 404 or 444
            return 403;
        }
    
        # Other servers.
        # 1. These must be below this for this configuration to work.
        # 2. None should listen on Port 80
        server {
            server_name ABC
            listen 443 ssl spdy;
            ssl_certificate /etc/ssl/someCert.cert;
            ssl_certificate_key /etc/ssl/someKey.key;
    
            [ ... ]
    
        }
        server {
            server_name XYZ
            listen 443 ssl spdy;
            ssl_certificate /etc/ssl/someCert.cert;
            ssl_certificate_key /etc/ssl/someKey.key;
    
            [ ... ]
    
        }
    }