nginx default_server 如何与 ssl 交互以及连接被拒绝

nginx default_server 如何与 ssl 交互以及连接被拒绝

所以我遇到了一个问题,我在其他主机上配置了看似相同的 nginx,但它在一个服务器上工作,而在其他两个服务器上不工作。本质上,尝试通过 https 连接导致 2 台服务器拒绝连接,但另一台服务器工作正常。这显然发生在 nginx 级别,因为请求甚至没有到达 nginx 后面运行的进程,修复 nginx 配置解决了这个问题。

nginx.conf:

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##
        client_max_body_size 50M;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

站点启用中的端口 80 配置:

server {
    listen [::]:80;
    server_name [my_domain].com [hostname].[subdomain].com;

    location / {
            return 301 https://$server_name$request_uri;
    }
}

站点启用中的端口 443 配置:

server {
    listen 443 default_server ssl;
    listen [::]:443 ssl;
    server_name [my_domain].com [hostname].[subdomain].com;

    ssl_certificate /etc/ssl/certs/nginx/[certname].pem;
    ssl_certificate_key /etc/ssl/certs/nginx/[certname]-key.pem;

    root /var/www/[document root]/;
    index index.html;

    location /api {
        proxy_pass http://127.0.0.1:[internal port];
    }

    location /web {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://127.0.0.1:[internal port];
    }

    location / {
        try_files $uri $uri/ =404;
    }
}

最初我listen [::]:443 ssl;只有 ,它在 host1 上工作,但在 host2 和 host3 上不工作,添加后default_serverhost2 和 host3 正常工作。所有三个主机都是通过 saltstack 配置的,我几乎不需要交互就可以设置它们,我能想到的主机之间的唯一区别是 host1 和 2 与 host3 属于不同的提供商,这显然不是问题所在。我可能错过了什么,导致这些主机不同,从而需要不同的配置。

编辑:记得检查你的版本,我是个白痴

答案1

始终存在一个默认服务器。该default_server选项仅允许您选择默认服务器,而不是nginx选择它。如果每个服务器上的文件名不同,则评估它们的顺序可能会不同 - 这意味着nginx可能在每个服务器上使用不同的server块作为默认块。

这个文件了解更多信息。

相关内容