Доступ через www. покажет Nginx страницу приветствия [+ Gunicorn + Django] - PullRequest
1 голос
/ 07 февраля 2020

Nginx + Ubuntu 18.04 + Django 2.2.10

При прямом доступе через "www.examples.com" отобразится nginx страница приветствия, но доступ к чему-либо еще - examples.com, «https://examples.com», «https://www.examples.com» - будет работать как положено.

В DigitalOcean у меня есть две записи типа A [www.examples.com, examples.com], указывающие на IP-адрес - я считаю, что они настроены правильно.
В моем проекте Django, У меня есть ALLOWED_HOSTS = ['localhost', 'examples.com', '137.68.49.136', 'www.examples.com'] набор.

Вот мой / etc / nginx / sites-available / project:

server {
    server_name examples.com www.examples.com;
    charset     UTF-8;

    error_log   /home/jay/eco/nginx-error.log;
    location = /favicon.ico { access_log off; log_not_found off; }
    location /static {
        alias /home/jay/eco/static;
    }

    location /media/ {
        alias /home/jay/eco/media/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/examples.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/examples.com/privkey.pem; # managed by Certb$
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = examples.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen      80;
    listen      [::]:80;
    server_name examples.com;
    return 404; # managed by Certbot


}

Я верил, что это все, но, видимо, нет. Чего мне не хватает?

1 Ответ

1 голос
/ 07 февраля 2020

У вас есть два блока server, первый обрабатывает запросы по протоколу https, а второй обрабатывает запросы по протоколу http. В каком-то другом файле есть также блок server по умолчанию, который отвечает страницей приветствия Nginx.

Второй блок server в вашем вопросе обрабатывает только запросы на http://example.com. Вам необходимо добавить www.example.com в директиву server_name и обновить logi c, чтобы оба доменных имени были перенаправлены в службу https.

Например:

server {
    listen      80;
    listen      [::]:80;

    server_name example.com www.example.com;

    return 301 https://$host$request_uri;
}

Подробнее см. в этом документе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...