У меня есть следующая конфигурация apache2 / wsgi, которая отлично работает, за исключением того, что apache ведет журнал:
[info] Initial (No.1) HTTPS request received for child 1 (server myserver:443)
[error] [client <IP>] client denied by server configuration: /empty/<API_CALL>
за каждый звонокhttps: // myserver / rest / API_CALL'
<VirtualHost *:443>
ServerName myserver:443
DocumentRoot /empty/
<Directory />
Order allow,deny
Deny from all
</Directory>
SSLEngine On
SSLCertificateFile /cert.pem
SSLCertificateKeyFile /key.pem
SSLVerifyClient optional_no_ca
SSLOptions +StdEnvVars +ExportCertData
WSGIDaemonProcess my.api processes=2 threads=1 display-name=%{GROUP} python-path=/API
WSGIProcessGroup my.api
WSGIScriptReloading On
WSGIScriptAlias /rest /API/server.py
<Directory /API/>
<Files server.py>
Order deny,allow
Allow from all
SetHandler wsgi-script
Options ExecCGI
</Files>
</Directory>
</VirtualHost>
Почему Apache пытается получить доступ к чему-то в DocumentRoot? Как я могу это остановить?
редактировать Та же проблема с Apache2.4:
AH01797: client denied by server configuration: /empty/<API_CALL>
редактировать Обновление синтаксиса управления доступом из:
<Directory />
Order allow,deny
Deny from all
</Directory>
<Directory /API/><Files server.py>
Order deny,allow
Allow from all
</Files></Directory>
кому:
<Directory />
Require all denied
</Directory>
<Directory /API/><Files server.py>
Require all granted
</Files></Directory>
Исправлена проблема. Спасибо.
Как я могу это остановить?
Я принял следующее участие в вашем вопросе:
<VirtualHost *:443>
ServerName myserver:443
DocumentRoot /empty/
<Directory />
Order allow,deny
Deny from all
</Directory>
если /rest/API_CALL
единственный используемый URI и из-за WSGIScriptAlias
, Я считаю, что мой ответ устранит следующую ошибку:
AH01797: клиент отклонен конфигурацией сервера
DocumentRoot
и <Directory>
, Apache's httpd
будет принимать значение по умолчанию из основного httpd.conf
(в зависимости от вашего дистрибутива и / или упаковки, местоположение может указывать на другое место, в качестве примера я возьму обычное место, например /var/www/html
), есть значения по умолчанию для <Directory>
также, что должно удовлетворить httpd
от записи ошибки в error_log
.Я бы рекомендовал протестировать эти изменения в тестовой среде перед применением в реальной среде.
Также, отвечая на этот вопрос, я сам узнаю что-то новое). Я думаю, что это распространенная ошибка многих, поэтому я решил поделиться со всеми:
DocumentRoot следует указывать без косой черты в конце.
возможно, я ошибаюсь (посмотрев документацию Apache, теперь я уверен, что это правильно) - но разве Apache не думает, что обслуживает файлы из DocumentRoot? - это не имеет ничего общего с / rest (это ваш URL-адрес кода) - если вы не размещаете файлы с этого виртуального хоста, просто укажите тот же корневой каталог документов в качестве корневого каталога документа apache по умолчанию. здесь вы вызываете корень документа htps: // myserver: 443, а затем проксируете корневой каталог скрипта / rest.
его http-запрос> docroot> deny> scriptalias> 200
У Apache есть DocumentRoot, а WSGIScriptAlias - это только тип прокси, разделяющий ваши документы и код.
В итоге - Apache должен иметь корень документа (даже если вы отключите корень документа, по умолчанию он будет PREFIX / htdocs), так что это допустимая и ожидаемая ошибка, псевдонимы сценария не заменяют корень документа, а прокси-сервер отключен в URL определен WSGIScriptAlias /rest /API/server.py
-> https: // сервер / отдых.
ServerName myserver: 443 DocumentRoot / пустой /
Заказать разрешить, запретить Запретить от всехклиент отклонен конфигурацией сервера: / пусто /
Думаю, это правильно:
<VirtualHost *:443>
ServerName myserver:443
**DocumentRoot /**
<Directory />
Order allow,deny
**allow from all**
</Directory>
SSLEngine On
SSLCertificateFile /cert.pem
SSLCertificateKeyFile /key.pem
SSLVerifyClient optional_no_ca
SSLOptions +StdEnvVars +ExportCertData
WSGIDaemonProcess my.api processes=2 threads=1 display-name=%{GROUP} python-path=/API
WSGIProcessGroup my.api
WSGIScriptReloading On
**WSGIScriptAlias /** /API/server.py
<Directory /API/>
<Files server.py>
Order deny,allow
Allow from all
SetHandler wsgi-script
Options ExecCGI
</Files>
</Directory>
</VirtualHost>
Document Root - это фундаментальная и явная опция, которой вы не можете не иметь, но можете запретить доступ.