La configuración que he establecido (a continuación) funciona localhost
pero 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.com
no 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 https
y 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 localhost
configurado el nombre.
server_name localhost;
El dominio api.example.com
falta 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 -t
antes de aplicarla; 'systemctl reload nginx' no le dirá que tiene una configuración incorrecta.