Como nginx default_server interage com ssl e conexão recusada

1

Então eu estava tendo um problema em que eu tinha configurações aparentemente idênticas do nginx em hosts idênticos, mas estava trabalhando em um e não em dois outros. Essencialmente tentando se conectar via https causou uma conexão recusada em 2 dos servidores, mas o outro funcionou bem. Isso estava claramente acontecendo no nível do nginx, já que os pedidos não estavam chegando ao processo rodando atrás do nginx e consertando o problema do nginx conf.

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/*;
}

configuração da porta 80 em sites habilitados:

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

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

configuração da porta 443 nos sites habilitados:

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;
    }
}

Inicialmente, eu tinha apenas listen [::]:443 ssl; , que funcionava no host1, mas não no host2 e no host3, adicionando default_server feito host2 e host3 funcionando corretamente. Todos os três hosts foram configurados via saltstack com interação mínima da minha parte para configurá-los, a única diferença que consegui pensar entre os hosts é que host1 e 2 estão em um provedor diferente de host3, o que obviamente não pode seja o problema. O que eu poderia ter perdido que torna esses hosts diferentes, causando a necessidade de configurações diferentes.

Editar: lembre-se de verificar suas versões, sou um idiota

    
por hamalnamal 30.06.2017 / 16:56

1 resposta

0

Existe sempre um servidor padrão. A opção default_server apenas permite escolher o servidor padrão em vez de nginx escolhendo-o. Se os nomes dos arquivos forem diferentes em cada servidor, a ordem em que eles são avaliados pode ser diferente - o que significa que nginx pode estar usando um bloco server diferente como padrão em cada servidor.

Consulte este documento para saber mais.

    
por 30.06.2017 / 17:08

Tags