Nginx no funciona con dominio/URL que apunta a la IP del servidor

Nginx no funciona con dominio/URL que apunta a la IP del servidor

La configuración que he establecido (a continuación) funciona localhostpero no para mi dominio. El objetivo es acceder al puerto 3000 externamente conautenticación básicaasí solo yo puedo acceder a él. Cuando voy a localhost, se actualiza a https, tengo que completar la autenticación y luego se muestra el puerto 3000, tal como debe ser. Sin embargo, acceder a api.example.comno solicita autenticación, no actualiza la conexión y solo muestra Invalid Host header. Cuando abro el puerto 3000 para el reenvío de puertos y voy a api.example.com:3000, puedo acceder al puerto, pero no requiere autenticación, no usa httpsy mi objetivo es evitar el reenvío de puertos. Esta configuración surgió de las instrucciones, así que no sé cuál podría ser el problema. ¿Por qué mi subdominio no funciona con esta configuración?

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

upstream supabase {
    server 127.0.0.1:3000;
}

server {
    listen      80;
    server_name localhost *host IP* api.example.com;
    access_log  off;
    rewrite ^ https://$host$request_uri? permanent;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name localhost *host IP* api.example.com;

    ssl_certificate /etc/api.example.com/fullchain.pem;
    ssl_certificate_key /etc/api.example.com/privkey.pem;

    # STUDIO
    location / {
        auth_basic "Authentication Required";
        auth_basic_user_file /etc/nginx/.htpasswd;
        proxy_set_header Host $host;
        proxy_pass http://supabase;
        proxy_redirect off;
        proxy_set_header Upgrade $http_upgrade;
    }
}

Cortafuegos:

 sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
80/tcp (Nginx HTTP)        ALLOW IN    Anywhere
80                         ALLOW IN    Anywhere
443                        ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
8000                       ALLOW IN    Anywhere
80,443/tcp (Nginx Full)    ALLOW IN    Anywhere
443/tcp (Nginx HTTPS)      ALLOW IN    Anywhere
80/tcp (Nginx HTTP (v6))   ALLOW IN    Anywhere (v6)
80 (v6)                    ALLOW IN    Anywhere (v6)
443 (v6)                   ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)
8000 (v6)                  ALLOW IN    Anywhere (v6)
80,443/tcp (Nginx Full (v6)) ALLOW IN    Anywhere (v6)
443/tcp (Nginx HTTPS (v6)) ALLOW IN    Anywhere (v6)

Respuesta1

Su bloque de servidor para el puerto 80 solo tiene localhostconfigurado el nombre.

server_name localhost;

El dominio api.example.comfalta aquí. Entonces, la solicitud a ese dominio a través de HTTP es capturada por el bloque del servidor predeterminado de la configuración predeterminada de nginx.

Agregue el dominio aquí, como lo hizo en el bloque del servidor SSL.

server_name localhost api.example.com;

Respuesta2

Dudo que su nombre DNS sea realmente api.example.com, pero es una buena práctica NO publicarlo aquí. Sin embargo, se espera este error si proporciona un nombre de host no válido, es decir, uno que contenga caracteres distintos de az, 0-9, '.' y '-'. Es posible que esto no sea deliberado: omitir un ';' al final. de la lista de nombres probablemente tendrá el mismo resultado. En tal escenario, nginx se negará a cargar un archivo de configuración. Essiemprees una buena idea probar su configuración nginx -tantes de aplicarla; 'systemctl reload nginx' no le dirá que tiene una configuración incorrecta.

información relacionada