Как исправить ошибку подключения Nginx к сокету (В доступе отказано) - PullRequest
0 голосов
/ 10 мая 2019

Я слежу за этим уроком по как подавать фляги-приложения-с-оружейным и-nginx-на-убунту-18-04

Когда я пытаюсь подключиться, Nginx выдает мне эту ошибку:

2019/05/10 17:21:03 [crit] 922#922: *22 connect() to 
unix:/var/www/patria/flask/pirata.sock failed (13: Permission denied) 
while connecting to upstream, client: my_ip_address, server: 
digital_ocean_ip, request: "GET / HTTP/1.1", upstream: 
"http://unix:/var/www/patria/flask/pirata.sock:/", host: "digital_ocean_ip"

Примечание: в пути к сокету нет опечатки

Вот разрешения для сокетов:

root@ageispolis:/var/www/patria/flask# ll pirata.sock
srwxrwxr-- 1 slash3b www-data 0 May 10 16:43 pirata.sock=

Бегущий огнестрельный:

root@ageispolis:/var/www/patria/flask# ps -aux|grep gunicorn
slash3b    863  0.0  2.2  60000 22304 ?        Ss   16:43   0:00 /var/www/patria/pirata/bin/python3.6 /var/www/patria/pirata/bin/gunicorn --workers=3 --bind unix:pirata.sock -m 007 wsgi:pirata
slash3b   1036  0.0  2.7  99884 28024 ?        S    16:43   0:00 /var/www/patria/pirata/bin/python3.6 /var/www/patria/pirata/bin/gunicorn --workers=3 --bind unix:pirata.sock -m 007 wsgi:pirata
slash3b   1040  0.0  2.7  99884 28024 ?        S    16:43   0:00 /var/www/patria/pirata/bin/python3.6 /var/www/patria/pirata/bin/gunicorn --workers=3 --bind unix:pirata.sock -m 007 wsgi:pirata
slash3b   1041  0.0  2.7  99904 28024 ?        S    16:43   0:00 /var/www/patria/pirata/bin/python3.6 /var/www/patria/pirata/bin/gunicorn --workers=3 --bind unix:pirata.sock -m 007 wsgi:pirata
root      3008  0.0  0.1  13136  1056 pts/1    S+   17:39   0:00 grep --color=auto gunicorn

Вот файл службы systemd:

root@ageispolis:/var/www/patria/flask# cat /etc/systemd/system/pirata.service 
[Unit]
Description=Gunicors instance to serve pirata.com
After=network.target

[Service]
User=slash3b
Group=www-data
WorkingDirectory=/var/www/patria/flask
Environment="PATH=/var/www/patria/pirata/bin"
ExecStart=/var/www/patria/pirata/bin/gunicorn --workers=3 --bind unix:pirata.sock -m 007 wsgi:pirata

[Install]
WantedBy=multi-user.target

Файл конфигурации Nginx:

root@ageispolis:/var/www/patria/flask# cat /etc/nginx/sites-enabled/pirata 
server {
    listen 80;
    server_name digital_ocean_ip;

    location / {
        include proxy_params;
        proxy_pass http://unix:/var/www/patria/flask/pirata.sock;
    }
}

Запуск nginx:

root@ageispolis:/var/www/patria/flask# ps -aux|grep nginx
root       921  0.0  0.1 140628  1504 ?        Ss   16:43   0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data   922  0.0  0.6 143300  6164 ?        S    16:43   0:00 nginx: worker process
root      3116  0.0  0.0  13136  1008 pts/1    S+   17:46   0:00 grep --color=auto nginx

Итак, предположительно, у работника nginx (www-data) есть доступ к сокету, но похоже, что нет?

Не работает событие, когда я устанавливаю разрешение сокета на 777.

Я не могу понять, что происходит. По крайней мере, было бы неплохо как-то отладить этот сокет Unix. Мне кажется, что я могу подключиться к нему с nc -U /path_to_socket и socat, но я не понимаю, как отладить его и отправлять запросы.

Пожалуйста, помогите!

Обновление: Я нашел способ завить сокет!

root@ageispolis:/var/www/patria/flask# curl -H --unix-socket pirata.sock http
curl: (6) Could not resolve host: pirata.sock
curl: (6) Could not resolve host: http
root@ageispolis:/var/www/patria/flask# curl -v  --unix-socket pirata.sock http
* Rebuilt URL to: http/
*   Trying pirata.sock...
* Connected to http (pirata.sock) port 80 (#0)
> GET / HTTP/1.1
> Host: http
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: gunicorn/19.9.0
< Date: Fri, 10 May 2019 19:03:17 GMT
< Connection: close
< Content-Type: text/html; charset=utf-8
< Content-Length: 17326
<
<!doctype html>
<html lang="en">

<head>
...

В любом случае nginx все еще не работает с ошибкой.

1 Ответ

0 голосов
/ 12 мая 2019

Огромное спасибо металлику за подсказку!

Итак, последние разрешения, с которыми я боролся, были drwxrw-r-- 5 slash3b www-data, так или иначе, это не сработало. Затем я сделал su - www-data -s /bin/bash и стал пользователем www-data, и я попытался перечислить файлы в каталоге сокетов, и это дало мне ошибку разрешения.

Таким образом, решение было предоставить пользователю www-data разрешение на выполнение для папки с файлом сокета. Я не понимал, что для этого должен быть включен бит выполнения, что за глупая ошибка:)

...