Назад | Перейти на главную страницу

Apache, Отказано в доступе на mod_wsgi, исправлено с помощью WSGISocketPrefix - Но почему?

Это казалось случайным событием: сегодня вечером сайт отключился, и после просмотра журналов ошибок Apache возникла следующая проблема:

 (13)Permission denied: mod_wsgi (pid=2751): Unable to connect to WSGI daemon process 'mysite.com-ssl' on '/var/run/apache2/wsgi.2579.0.2.sock' after multiple attempts.

Теперь я читаю Конфигурация wiki для mod_wsgi, и исправление кажется разумным. Не удалось записать в этот каталог, поэтому необходимо указать альтернативу с помощью WSGISocketPrefix

Итак, я установил:

WSGISocketPrefix /var/run/wsgi

Это устраняет проблему, и сайт может загружаться после перезапуска Apache.

Однако мне очень любопытно - почему этот каталог перестал быть доступен для записи? Я что-то упускаю? В /var/run/apache2 каталог принадлежит root:root, но новые сокеты, которые теперь работают под /var/run/wsgi*.sock являются www-data:root .. Была перезагрузка сервера, но все тут. Может быть, что-то теперь берет на себя права доступа к этому каталогу при загрузке?

Любые идеи? Спасибо!

Ошибка, которую вы видели, также может возникать как временная проблема, если вы выполнили изящный перезапуск Apache, а рабочий процесс Apache имел соединения с сокетами, которые еще не были подключены к процессу демона mod_wsgi для первоначального запроса или последующего запроса из-за сохранения активности на розетке.

Это произойдет, потому что при плавном перезапуске процесс демона mod_wsgi будет перезапущен независимо, и при этом путь к файлу сокета изменится так сильно. Это означает, что старые рабочие процессы, зависшие для обработки текущих запросов и запросов keepalive, не смогут подключиться к демону, поскольку они по-прежнему будут пытаться использовать старый путь для файла сокета.

Что касается каталога, в котором находятся файлы сокетов, важно, чтобы каталог был доступен для чтения www-data. Первоначально сокеты будут созданы как root с perms 0600, а затем право собственности должно быть изменено на www-data, чтобы рабочие процессы www-data могли подключаться и ничего больше. Это зависит от того, доступен ли каталог для www-данных.

Причина использования WSGISocketPrefix заключается в том, что Redhat создал каталог журналов, в котором конфигурация Apache сообщает, что этот материал следует использовать по умолчанию, чтобы его не могли читать другие, поэтому www-data не может видеть сокеты в каталоге. Вот почему в Redhat нужно изменить его на / var / run.

В какой момент права доступа к каталогу изменяются или фиксируются и может ли это случиться без обновления пакета Apache, не знаю.