Existem vários blocos de servidores ou um bloco de servidores com redirecionamentos preferidos no NGINX? Por quê?

2

Eu quero usar uma configuração NGINX para redirecionar não-www para www e http para https. Eu vi dois métodos para fazer isso. Um usa vários blocos de servidores, dois dos quais redirecionam para o terceiro, assim:

server {
    listen      80;   #listen for all the HTTP requests
    server_name example.com www.example.com;
    return      301         https://example.com$request_uri;
}

server {
    listen              443 ssl;
    server_name         www.example.com;

    ssl_certificate     ssl.crt; #you have to put here...
    ssl_certificate_key ssl.key; #   ...paths to your certificate files
    return      301     https://example.com$request_uri;
}

server {
    listen              443 ssl;
    server_name         example.com;

    ssl_certificate     ssl.crt;
    ssl_certificate_key ssl.key;

    # Omitting rest of configuration for brevity.
}

A segunda opção é ter UM bloco de servidor escutando 80 e 443, e usar uma declaração if dentro desse bloco, assim:

server {
    listen      80;
    listen      [::]:80;
    listen      443 ssl http2;
    listen      [::]:80 ipv6only=on;
    listen      [::]:443 ssl http2 ipv6only=on;

    server_name   example.com www.example.com;

    if ($host ~* ^www\.(.*)) {
        return 301 https://$1$request_uri;
    }

    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
    ...
}

Um desses métodos é a melhor prática no NGINX? Se sim, por quê?

    
por YPCrumble 02.01.2018 / 21:59

1 resposta

4

Você deve usar vários blocos de servidor e, em cada servidor, usar locais, em vez de instruções if. É mais eficiente e o comportamento é mais previsível.

O artigo do Nginx " if is evil " é uma leitura necessária. Você também deve ler " armadilhas comuns "

    
por 02.01.2018 / 22:09

Tags