Ich versuche, meinen Routine-Webserver einzurichten und stoße auf dieses Hindernis. Egal, was ich probiere, es funktioniert nicht. Das habe ich schon hunderte Male gemacht und mir gehen die Ideen aus.
Typisches Webserver-Setup, CentOS 8 mit einem auf PM2 laufenden Node-Prozess, Firewall-Eingabeaufforderung mit http, https und dem Port meiner App. Die App funktioniert einwandfrei beim Besuch von http://IP:Port.
Ich habe die Domäne auf den Server umgeleitet, bestätigt, dass sie auf den Server verweist, und das Problem wurde behoben.
Das Problem tritt auf, wenn Sie versuchen, nginx mit einem Let’s Encrypt-Zertifikat einzurichten. Beim Besuch der Domäne im Browser /var/log/nginx/error.log
tritt der Fehler auf no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking
. Unten sind meine nginx-Konfigurationsdateien.
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;
}
Datei default.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;
}
meinewebsite.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
}
Alle Dateien sind vorhanden, die Nginx-Konfiguration ist fehlerfrei. Irgendwelche Ideen? Lassen Sie es mich wissen, wenn Sie weitere Informationen benötigen.
Antwort1
Ihr virtueller Standardhost ist so konfiguriert, dass er sowohl IPv4 als auch IPv6 empfängt:
listen 80 default_server;
listen 443 ssl default_server;
listen [::]:80 default_server;
listen [::]:443 ssl default_server;
Ihre anderen virtuellen Hosts hören jedoch nur IPv4:
listen 443 ssl; # managed by Certbot
listen 80;
listen 443 ssl;
listen 80;
Da für den Standard-Vhost keine SSL-Schlüssel konfiguriert sind, gibt es bei einer Verbindung über IPv6 für nginx nichts zu verwenden.
Um das Problem zu beheben, fügen Sie Ihren anderen virtuellen Hosts Abhöranweisungen für IPv6 hinzu.