Al intentar configurar mi servidor web de rutina y encontrarme con este obstáculo, no importa lo que intente, no funciona, algo que he hecho cientos de veces y me he quedado sin ideas.
Configuración típica de servidor web, centos 8 con un proceso de nodo ejecutándose en pm2, firewall-cmd con http, https y el puerto de mi aplicación, la aplicación funciona bien cuando visita http://ip:port.
Dirigí el dominio al servidor y confirmé que apunta al servidor y lo resolví.
El problema surge cuando al intentar configurar nginx con un certificado de cifrado, /var/log/nginx/error.log
aparece el error no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking
al visitar el dominio en el navegador. A continuación se muestran mis archivos de configuración de nginx.
nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
}
predeterminado.conf
server {
listen 80 default_server;
listen 443 ssl default_server;
listen [::]:80 default_server;
listen [::]:443 ssl default_server;
server_name _;
root /var/www/;
index index.html index.htm index.nginx-debian.html;
include /etc/nginx/default.d/*.conf;
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 7d;
access_log off;
}
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
#return 301 http://$host$request_uri;
}
misitioweb.conf
server {
server_name www.mywebsite.com;
return 301 https://mywebsite.com;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = mywebsite.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name mywebsite.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name mywebsite.com;
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://127.0.0.1:3100";
proxy_redirect http:// https://;
}
ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; # managed by Certbot
}
server {
if ($host = www.mywebsite.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name www.mywebsite.com;
return 404; # managed by Certbot
}
Todos los archivos existen, la configuración de nginx no tiene errores. ¿Algunas ideas? Hágame saber si necesita más información.
Respuesta1
Su host virtual predeterminado está configurado para escuchar tanto IPv4 como IPv6:
listen 80 default_server;
listen 443 ssl default_server;
listen [::]:80 default_server;
listen [::]:443 ssl default_server;
Sin embargo, tus otros vhosts solo escuchan IPv4:
listen 443 ssl; # managed by Certbot
listen 80;
listen 443 ssl;
listen 80;
Dado que el vhost predeterminado no tiene ninguna clave SSL configurada, significa que cuando se conecta a través de IPv6, nginx no puede usar nada.
Para solucionar el problema, agregue directivas de escucha para IPv6 a sus otros hosts virtuales.