0

我有一个 Debian 7.1 amd64 服务器,安装了 apache httpd 2.2.22 和 Python 2.7.3,以提供一个 django 应用程序,我使用 mod_wsgi 和默认 django 连接到 apachewsgi.py脚本连接到 apache。Django 是最新的 1.5.4 版本,所有 python 包依赖项都在由pipdebian 提供的 virtualenv 中管理。

我已经chown -R www-data:www-data在整个 django app 和 python virtualenv 目录上运行以使其工作。此虚拟主机的 Apache 配置非常少,并遵循官方 django 指南https://docs.djangoproject.com/en/1.5/howto/deployment/wsgi/modwsgi/上的官方 django 指南。

我已经设法让它工作,除了一些客户端得到 apache(不是 django)403 Forbidden 错误页面。此虚拟主机的 apache 错误日志文件包含如下行:

[client x.x.x.x] client denied by server configuration: /path/to/django/proj/app/wsgi.py

它对其他客户非常有效。可能出了什么问题?

编辑:这里是 apache 配置:

<VirtualHost *:80>
ServerName mydomain.com
ServerAlias www.mydomain.com
ServerAdmin myname@mydomain.com
ErrorLog ${APACHE_LOG_DIR}/error_django.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access_django.log combined
Options -Indexes +FollowSymLinks +MultiViews

Alias /robots.txt /path/to/django/proj/static/robots.txt
Alias /favicon.ico /path/to/django/proj/static/img/favicon.ico

Alias /media/ /path/to/django/proj/media/
Alias /static/ /path/to/django/proj/static/

<Directory /path/to/django/proj/media>
    Order allow,deny
    Allow from all
</Directory>

<Directory /path/to/django/proj/static>
    Order allow,deny
    Allow from all
</Directory>

<Directory /path/to/django/proj/app>
    <Files wsgi.py>
        Order allow,deny
        Allow from all
    </Files>
</Directory>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www.mydomain.com
    RewriteRule (.*) http://mydomain.com$1 [R=301,L]
</IfModule>

<IfModule mod_wsgi.c>
    WSGIDaemonProcess mydomain.com processes=10 threads=15 display-name=%{GROUP} python-path=/path/to/django/proj:/path/to/virtualenv/lib/python2.7/site-packages
    WSGIProcessGroup mydomain.com
    WSGIPassAuthorization On
    WSGIScriptAlias / /path/to/django/proj/app/wsgi.py
</IfModule>

</VirtualHost>
4

1 回答 1

1

此错误来自mod_evasiveapache 模块。

我已经安装了 Apache mod_evasive 用于 DoS 保护,但我不知道仅安装此模块会影响 Apache,并且在 Debian 上,此模块的默认(不存在)配置对于现代基于服务的 Web 应用程序非常激进。

/etc/apache2/mods-available/mod-evasive.conf为此模块创建了默认配置,具有更高的限制并解决了问题。

于 2013-10-15T16:41:03.223 回答