Tengo nginx configurado para uno de mis dominios. Funciona como interfaz para el servidor de aplicaciones Wildfly. Un día decidí configurar el entorno de pruebas beta en la misma máquina. Entonces agregué otro subdominio a la configuración. Después de reiniciar, nginx se detuvo para servir la primera aplicación. Mis archivos de configuración son:
subdominio principal:
server {
listen 80;
server_name sub.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name sub.example.com;
ssl_certificate /etc/nginx/ssl/bundle.crt;
ssl_certificate_key /etc/nginx/ssl/sub.example.com.key;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/sub.example.com.access.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080;
proxy_read_timeout 90;
}
}
subdominio de prueba:
server {
listen 443;
server_name sub-test.example.com;
return 301 http://$host$request_uri;
}
server {
listen 80;
server_name sub-test.example.com;
access_log /var/log/nginx/sub-test.example.com.access.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080;
proxy_read_timeout 90;
}
}
Debo agregar que cada una de las configuraciones anteriores funciona como se esperaba cuando está sola. Pero juntos no se agradan. La solicitud del primero de ellos devuelve el estado HTTP NO ENCONTRADO.
Por supuesto, el problema puede estar ubicado en mi servidor Wildfly. Está configurado para manejar hosts virtuales y no estoy muy seguro de que esté bien. Pero cuando se ejecutan ambas aplicaciones y solo una de ellas es proxy de nginx, funciona bien.
Gracias por la ayuda.
Respuesta1
Patryk, desafortunadamente no puedes configurar más de un servidor HTTPS basado en nombres. Las explicaciones son largas, pero puedes comprobarlas.aquípara obtener información detallada y ejemplos (basados en Apache, no tengo idea sobre nginx)
Respuesta2
Puede utilizar más de un sitio https.
La tecnología se llama SNI o indicación del nombre del servidor.Referencia
Al sacar la parte SSL de las configuraciones del servidor, también reduce la revisión para configurar los certificados. Utilizo la siguiente estructura en mis servidores proxy inversos:
sites.d/ | -ssl.conf | -vhost1.conf | -vhost2.conf
ssl.conf luego contiene:
ssl_certificate /etc/ssl/certs/ssl.crt; ssl_certificate_key /etc/ssl/certs/server.key;
Otra opción sería el uso de certificados separados con diferentes nombres comunes.