Пытаюсь настроить свой обычный веб-сервер и сталкиваюсь с этим препятствием. Что бы я ни делал, ничего не получается. Я делал это сотни раз, и у меня закончились идеи.
Типичная настройка веб-сервера, Centos 8 с процессом узла, запущенным на pm2, firewall-cmd с http, https и портом моего приложения. Приложение отлично работает при посещении http://ip:port.
Я направил домен на сервер и убедился, что он указывает на сервер и проблема решена.
Проблема возникает при попытке настроить nginx с сертификатом let's encrypt, /var/log/nginx/error.log
выдает ошибку no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking
при посещении домена в браузере. Ниже приведены мои файлы nginx conf.
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;
}
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;
}
мойвебсайт.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
}
Все файлы существуют, конфигурация nginx без ошибок. Есть идеи? Дайте знать, если понадобится больше информации.
решение1
Ваш виртуальный хост по умолчанию настроен на прослушивание как IPv4, так и IPv6:
listen 80 default_server;
listen 443 ssl default_server;
listen [::]:80 default_server;
listen [::]:443 ssl default_server;
Однако ваши другие виртуальные хосты слушают только IPv4:
listen 443 ssl; # managed by Certbot
listen 80;
listen 443 ssl;
listen 80;
Поскольку для виртуального хоста по умолчанию не настроены никакие ключи SSL, это означает, что при подключении через IPv6 nginx нечего использовать.
Чтобы устранить эту проблему, добавьте директивы прослушивания для IPv6 на другие виртуальные хосты.