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
<время работы/>
Вернуться на верх