O Apache ignora o WSGIScriptAlias se o mesmo diretório existir no diretório raiz

1

Eu noto um erro peculiar ao servir o aplicativo Django através de mod_wsgi.

Na raiz do meu documento, eu tenho o diretório /admin restrito a 127.0.0.1 usando a diretiva LocationMatch . Eu também tenho /admin URLConf montado no / no aplicativo Django, que é o caminho padrão para a interface de administração autogerada do Django. O aplicativo em si está em /app path, configurado com WSGIScriptAlias directive.

Agora, o Apache de alguma forma trata cada solicitação de /app/admin e seus subcaminhos, conforme direcionado ao aplicativo e à raiz do documento. Eu recebo o admin do Django exibido, mas error.log contém uma linha como esta: [Tue Feb 14 01:25:35.538501 2017] [authz_core:error] [pid 29235] [client 32.135.203.150:36412] AH01630: client denied by server configuration: /var/www/html/admin/

Isso é quase um problema, além de duas coisas:

  • Eu tive que desativar o fail2ban,
  • Não consigo fazer upload de arquivos no admin, e suspeito que essa seja a razão porque, porque esse erro aparece toda vez que eu tento (recebendo 500 como resposta).

Isso é resolvido renomeando meu diretório html ou o aplicativo de administração do Django, mas eu realmente gostaria de encontrar a solução certa que me permita ter ambos.

A configuração do Apache no Debian é dividida em vários arquivos, mas acredito que as partes relevantes são as seguintes:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    SetOutputFilter DEFLATE
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

    Include conf-available/default.conf

    DocumentRoot /var/www/html

    <LocationMatch ^/admin>
        Require ip 127.0.0.1 ::1
    </LocationMatch>

    <LocationMatch ^/admin/status>
        SetHandler server-status
    </LocationMatch>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    SetEnvIf Request_URI "/admin/status" nolog
    CustomLog ${APACHE_LOG_DIR}/access.log combined env=!nolog
</VirtualHost>

default.conf:

<Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        DirectoryIndex disabled
        AllowOverride Indexes
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    Alias /app/static/ /var/www/app/static/
    Alias /app/media/ /var/www/app/media/

    <Directory /var/www/app/static>
        Require all granted
    </Directory>
    <Directory /var/www/app/media>
        Require all granted
    </Directory>

    WSGIDaemonProcess pbf.net.pl python-path=/var/www/app:/usr/local/virtualenvs/app/lib/python3.4/site-packages/
    WSGIProcessGroup app
    WSGIScriptAlias /app /var/www/app/wsgi.py process-group=app
    # WSGIPythonPath /var/www/app/
    <Directory /var/www/app>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
    
por Red 14.02.2017 / 01:57

0 respostas