Nginx: “для директивы ssl listen ... ssl не определен ssl_certificate” на пользовательском порту 8001
Извините, если этот вопрос был задан ранее, но я перепробовал приведенные здесь предложения и до сих пор не могу его решить.
Я запускаю проект Django за Nginx на своем VPS. Основной проект находится по адресу https://myproject.com (порт 443) и работает как по маслу.
Я хочу опубликовать второй проект Django по адресу https://myproject.com:8001 но я не смог загрузить его по этому адресу, я получил сообщение об ошибке, упомянутое в заголовке: no ssl_certificate is defined for the listen … ssl directive” on custom port 8001
Для этого я обновил /etc/nginx/sites-available/myproject до этого (первая часть отлично работает для основного проекта по адресу https://myproject.com , во второй части я сталкиваюсь с некоторыми проблемами (отмеченными # NEW CONFIG FOR SECOND PROJECT (on :8001)
):
# Redirect all HTTP requests to HTTPS
server {
listen 80;
server_name myproject.com www.myproject.com;
return 301 https://$host$request_uri;
}
# Serve the app over HTTPS
server {
listen 443 ssl;
server_name myproject.com www.myproject.com;
ssl_certificate /etc/letsencrypt/live/myproject.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myproject.com/privkey.pem;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /home/myname/myproject/staticfiles/;
}
location /media/ {
alias /home/myname/myproject/media/;
access_log off;
expires 1h;
}
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8000;
}
}
##########################################
# NEW CONFIG FOR SECOND PROJECT (on :8001)
# HTTP on :8001 → HTTPS on :8001
server {
listen 8001;
server_name myproject.com www.myproject.com;
return 301 https://$host:8001$request_uri;
}
# HTTPS on :8001 for second project
server {
listen 8001 ssl;
server_name myproject.com www.myproject.com;
ssl_certificate /etc/letsencrypt/live/myproject.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myproject.com/privkey.pem;
# Optional per-app static/media (comment out if not used)
location /static/ { alias /home/myname/project2/staticfiles/; }
location /media/ { alias /home/myname/project2/media/; access_log off; expires 1h; }
location / {
include proxy_params;
proxy_pass http://127.0.0.1:9001;
}
}
Вы не можете использовать один и тот же порт для HTTP и HTTPS в Nginx. Вот почему вы получаете сообщение об ошибке no ssl_certificate is defined
.
В принципе, каждый порт может быть только HTTP или HTTPS. Итак, для вашего второго проекта:
Используйте один порт (скажем, 8001) для HTTPS с вашим SSL-сертификатом.
Если вам тоже нужен HTTP, используйте другой порт (например, 8000) и перенаправьте его на HTTPS.
Пример только для HTTPS:
server {
listen 8001 ssl;
server_name myproject.com www.myproject.com;
ssl_certificate /etc/letsencrypt/live/myproject.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myproject.com/privkey.pem;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:9001;
}
}
После этого протестируйте и перезагрузите Nginx:
sudo nginx -t
sudo systemctl reload nginx
<время работы/>