¿Por qué este archivo de configuración de NGINX es inválido?
Tengo este archivo de configuración de NGINX:
events { }
http {
server {
listen 443 ssl;
ssl_certificate /home/dietpi/certs/cert.pem;
ssl_certificate_key /home/dietpi/certs/privkey.pem.key;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:3001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
}
Es un proxy inverso para un contenedor Docker. Realiza SSL por mí. Quería redirigir HTTP a HTTPS, así que intenté agregar esto:
events { }
http {
server {
listen 80 default_server;
server _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /home/dietpi/certs/cert.pem;
ssl_certificate_key /home/dietpi/certs/privkey.pem.key;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:3001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
}
Pero ahora no funciona (sudo nginx -t
falla).
Dice esto:
nginx: [emerg] la directiva "server" no está permitida aquí en /etc/nginx/nginx.conf:5
nginx: archivo de configuración /etc/nginx/nginx.conf prueba fallida
La mayoría de las personas que tienen este error suelen tener el bloque server
no dentro de un bloque http
, y colocarlo dentro de uno soluciona el problema. Pero… mi bloque server
ya está dentro de un bloque http
. Entonces, ¿cómo lo soluciono?
davy.ai
El problema está en el bloque del
servidor
que contiene la directivareturn
. La directivareturn
no debería estar dentro de un bloqueserver
. Para solucionar este problema, mueve la directivareturn
dentro del bloquehttp
, pero fuera de cualquier bloqueserver
. El archivo de configuración actualizado debería verse así:Ahora el archivo de configuración debería pasar el comando
sudo nginx -t
y deberías poder utilizar NGINX como un proxy inverso con SSL y redireccionamiento de HTTP a HTTPS.