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

Apache пытается получить доступ к параметрам wsgi-rest в DocumentRoot (AH01797)

У меня есть следующая конфигурация 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 - это фундаментальная и явная опция, которой вы не можете не иметь, но можете запретить доступ.