¿Cómo debo nombrar mi servidor en nginx si tengo un servidor de redireccionamiento y el servidor principal?

¿Cómo debo nombrar mi servidor en nginx si tengo un servidor de redireccionamiento y el servidor principal?

Supongamos que mi servidor principal es para servir https://www.example.comy el servidor de redireccionamiento es para redirigir http://www.example.coma https://www.example.com. ¿Cómo debo nombrar estos dos servidores? ¿Existe algún tipo de mejor práctica para esto?

¿El nombre del servidor es principalmente una preferencia personal, de modo que puedo nombrar cualquier cosa?

Respuesta1

Ambos deberían tener nombre www.example.com. Este nombre a menudo es bastante importante porque si aloja más de un host virtual en la misma dirección IP, nginxusará el nombre para hacer coincidir el vhost que debe manejar la solicitud con el que está en el Hostencabezado de la solicitud http. En su caso con dos vhosts pero protocolos diferentes (http/https), el protocolo (o más bien el Listenpuerto) se utilizará para diferenciar aún más entre los dos vhosts.

Respuesta2

Los nombres de los servidores son una parte importante de su configuración de nginx. Si sirve varios dominios/subdominios desde un servidor con una única IP pública, la server_namedirectiva le dice a nginx qué servidor debe responder a una solicitud. Si no hay ningún nombre de servidor que coincida, nginx buscará a continuación un servidor predeterminado que, si está presente, actuará como una especie de servidor "catch all".

Aquí está unejemplo de configuraciónpara http -> https redirigir donde también puedes ver cómo nombrar servidores correctamente sin recibir errores.

/etc/nginx/sitios-disponibles/www.example.com.vhost

# This server will redirect all http -> https
server {
        # Listen for both IPv4 and IPv6 requests.
        listen 80;
        listen [::]:80;
        server_name www.example.com example.com;

        # This section assuming you're using Let's Encrypt / certbot
        location ^~ /.well-known/acme-challenge/ {
            default_type "text/plain";
            root         /path/to/your/document/root
        }
        location = /.well-known/acme-challenge/ {
            return 404;
        }

        # Here's where your 301 permanent redirect to the https:/www version happens.
        return 301 https://www.example.com$request_uri;

}

# This server will redirect all https requests without www to the version with www
server {
        # Listen for both IPv4 and IPv6 requests and activate http2.
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name example.com;

        ssl on;
        # Paths to certificates assuming you're using Let's Encrypt / certbot
        ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
        # There's much more directives you should fine tune for https, but that's another task.

        # Here's where your 301 permanent redirect to the https://www version happens.
        return 301 https://www.example.com$request_uri;
}

# This server will actually server your https content.
server {
        # Listen for both IPv4 and IPv6 requests and activate http2.
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name www.example.com;

        ssl on;
        # Paths to certificates assuming you're using let's encrypt / certbot
        ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
        # There's much more directives you should fine tune for https, but that's another task.

        ####
        #
        # Your server directives go here.
        #
        ####
}

información relacionada