502 плохой шлюз из-за запрещенных разрешений - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь развернуть проект django на digitalocean, используя nginx и gunicorn. Мой проект имеет следующую структуру

projects
|_isli
  |_isli
    |_forecast #project directory
      |_manage.py
      |_forecast.sock
      |_forecast
        |_wsgi.py
        |_settings.py
        |_urls.py

Мой проект создан в каталоге root без создания дополнительного пользователя sudo. Я знаю, что это не правильное решение, но я так решаю. В моем файле settings.py внутри разрешенных хостов я указал ip адрес

ALLOWED_HOSTS = ['165.22.23.233']

В официальных документах digitalocean есть учебник по развертыванию django с использованием nginx и gunicorn Развертывание django с использованием Nginx и Gunicorn

в этой статье использовался метод, в котором gunicorn, заданный как socet, является моей настройкой /etc/systemd/system/gunicorn.service

[Unit]                                                        
Description=gunicorn daemon                                   
After=network.target


[Service]                                                     
User=root                                                   
Group=root                                                  
WorkingDirectory=/root/projects/isli/isli/forecast         
ExecStart=/root/projects/isli/env/bin/gunicorn --log-level debug --error-logfile /var/log/gunicorn/error.log --access-logfile /var/log/gunicorn/access.log --workers 3 --bind unix:/root/projects/isli/isli/forecast/forecast.sock forecast.wsgi:application

[Install]                                                     
WantedBy=multi-user.target

после создания файла gunicorn.service, который я запускаю systemctl start gunicorn, чем systemctl enable gunicorn после того, как в моем каталоге проекта был создан файл forecast.sock, чем я настраиваю nginx в /etc/nginx/sites-available/forecast со следующими

server {
    listen 165.22.23.233:80;

    location = /favicon.ico {access_log off; log_not_found off;}                                                                                                                       
    location / { 
          include proxy_params;                                       
          proxy_pass http://unix:/root/projects/isli/isli/forecast/forecast.sock;
    }
 }

, чем systemctl restart nginx

Когда я пытаюсь чтобы получить доступ к http://165.22.23.233:80 из браузера, его необходимо ввести 502 неверных шлюза. После этого в файле /var/log/nginx/error.log я вижу следующее

2020/02/09 16:29:01 [crit] 13533#13533: *11 connect() to unix:/root/projects/isli/isli/forecast/forecast.sock failed (
13: Permission denied) while connecting to upstream, client: 178.176.218.110, server: , request: "GET / HTTP/1.1", upstream: "http://unix:/root/projects/isli/isli/forecast/forecast.sock:/", host: "165.22.23.233"

Как я понял из этой ошибки, моя проблема в том, что nginx не может получить доступ к /root/projects/isli/isli/forecast/forecast.sock файлу. После этого я попытался проверить разрешения для каждой сущности указанного выше пути с помощью

namei -nom /root/projects/isli/isli/forecast/forecast.sock

. И вот вывод:

f: /root/projects/isli/isli/forecast/forecast.sock
drwxr-xr-x root root /
drwx------ root root root
drwxr-xr-x root root projects
drwxr-xr-x root root isli
drwxr-xr-x root root isli
drwxr-xr-x root root forecast
srwxrwxrwx root root forecast.sock

На выходе выше root пользователь имеет разрешения для каждой сущности для моего путь к сокету, но почему ошибка говорит мне, что в разрешении отказано

1 Ответ

0 голосов
/ 10 февраля 2020

Вам необходимо отделить прослушивание от имени_сервера:

server {
        listen 80;
        server_name 165.22.23.233; # (Example 192.168.0.1, example.com)
        location = /favicon.ico { access_log off; log_not_found off; }
        location /static/ {
                root /root/projects/isli/isli/forecast/;
        }
        location / {
                include proxy_params;
                proxy_pass http://unix:/root/projects/isli/isli/forecast/forecast.sock;
        }
}
...