Разрешение Errno 13 отказано в использовании Gunicorn

Я запускаю django на цифровом океане с gunicorn и nginx и. Gunicorn для обслуживания django и nginx для статических файлов.

после загрузки файла через веб-сайт я не могу сохранить в папку в / home directory. Я получаю [Errno 13] Permission denied.

пожалуйста, как сделать веб-сервер, чтобы иметь доступ для чтения записи в любую произвольную папку в любом месте под /home?

2 ответов


все зависит от пользователя, от которого работает ваше приложение.

если вы проверяете ps aux | grep gunicorn какой пользователь сервер Gunicorn запускает ваше приложение, как тогда вы можете изменить chmod или chown соответственно разрешения.

ls -lash покажет вам, какой текущий пользователь владеет только папкой и какие разрешения находятся в папке, в которую вы пытаетесь написать:

4.0K drwxrwx--- 4 username username 4.0K Dec 9 14:11 uploads

вы можете использовать это, чтобы проверить наличие каких-либо проблем.

некоторые документы об изменении владельца и разрешений

http://linux.die.net/man/1/chmod

http://linux.die.net/man/1/chown

Я бы посоветовал быть очень осторожны к каким местоположениям на вашем диске вы предоставляете доступ для веб-сервера для чтения / записи. Это может иметь серьезные последствия для безопасности.


Ну, я работал над этим вопросом более недели и, наконец, смог ВЫЯСНИТЬ ЭТО. Пожалуйста, следуйте ссылкам из цифровой океан, но они не указали на важные вопросы, которые включают в себя

  1. нет живых потоков при подключении к upstream
  2. *4 подключение () к unix:/myproject.ошибка носка (13: отказано в разрешении) при подключении к upstream
  3. gunicorn OSError: [Errno 1] операция не разрешено
  4. *1 подключение() к unix:/tmp / myproject.sock failed (2: нет такого файла или каталога)

    etc.

эти вопросы в основном проблема разрешения для соединения между Nginx и Gunicorn. Чтобы сделать вещи простыми, я рекомендую дать же разрешение nginx для каждого файла/проекта / программы python, которую вы создаете.

чтобы решить все проблемы, выполните следующее подход: Во-первых:

  1. войдите в систему как пользователь root
  2. создать каталог/home / nginx.
  3. после этого следуйте в соответствии с сайт до создайте сценарий выскочки.
  4. выполнить команду chown -р с nginx:nginx в /дома/nginx и
  5. для сценария upstart выполните следующие изменения в последней строке : exec gunicorn --workers 3 --bind unix:myproject.носок-u nginx-g nginx wsgi Не добавляйте-m разрешение, как это испортит сокет. Из документации Gunicorn, когда -m по умолчанию, python выяснит лучшее разрешение
  6. запустите сценарий выскочки
  7. теперь просто перейдите в /etc/nginx / nginx.файл conf. Перейдите в серверный модуль и добавьте:

    расположение / { включить proxy_params; директива proxy_pass HTTP в://Юникса/дома/nginx в/myproject будет.носок; } удалить Не следуйте digitalocean aricle отсюда

    1. теперь перезапустите сервер nginx и вы хорошо идти.