【问题标题】:Asking for advice on Django deployment settings with Apache and mod_wsgi使用 Apache 和 mod_wsgi 寻求有关 Django 部署设置的建议
【发布时间】:2014-11-05 21:13:39
【问题描述】:

按照官方文档和其他帖子,我已经使用 Apache 和 mod_wsgi 部署了 Django。虽然我的网站正常工作,但我担心我的设置可能有误。我想就我的设置以及它是否遵循最佳实践提供一些建议。如果您发现此设置有问题,请告诉我。谢谢,李

wsgi.py

import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")))
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../")))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoProject.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

settings.py

  ...
    ALLOWED_HOSTS = ['DjangoProject.example.com']
    STATIC_ROOT = "/var/www/DjangoProject/static/"
    STATIC_URL = '/static/'
    ....

/etc/apache2/apache2.conf - 其他设置在此行之上

...
WSGIPythonPath /var/www/DjangoProject/DjangoProject:/var/www/DjangoProject/env/lib/python2.6/site-packages

/etc/apache2/httpd.conf - 没有其他设置,但此行已部署

WSGIPythonPath /var/www/DjangoProject:/var/www/DjangoProject/DjangoProject:/var/www/DjangoProject/env/lib/python2.6/site-packages

/etc/apache2/sites-available/默认

NameVirtualHost *:8080
<VirtualHost *:8080>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                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>


        ErrorLog ${APACHE_LOG_DIR}/error.log

        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
##############################
## DjangoProject WSGI         ##
##############################

ServerName DjangoProject.example.com
Alias /favicon.ico /var/www/DjangoProject/DjangoProject/static/favicon.ico
AliasMatch ^/([^/]*\.css) /var/www/DjangoProject/MyApp/static/MyApp/css/$1

Alias /media/  /var/www/DjangoProject/DjangoProject/media/
Alias /static/ /var/www/DjangoProject/MyApp/static/

<Directory /var/www/DjangoProject/MyApp/static>
Order deny,allow
Allow from all
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 1 seconds"
  ExpiresByType image/gif "access plus 10080 minutes"
  ExpiresByType image/jpeg "access plus 10080 minutes"
  ExpiresByType image/png "access plus 10080 minutes"
  ExpiresByType text/css "access plus 60 minutes"
  ExpiresByType text/javascript "access plus 60 minutes"
  ExpiresByType application/x-javascript "access plus 60 minutes"
  ExpiresByType text/xml "access plus 60 minutes"
ExpiresByType text/xml "access plus 60 minutes"
</IfModule>
</Directory>


<Directory /var/www/DjangoProject/DjangoProject/media>
Order deny,allow
Allow from all
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 1 seconds"
  ExpiresByType image/gif "access plus 10080 minutes"
  ExpiresByType image/jpeg "access plus 10080 minutes"
  ExpiresByType image/png "access plus 10080 minutes"
  ExpiresByType text/css "access plus 60 minutes"
  ExpiresByType text/javascript "access plus 60 minutes"
  ExpiresByType application/x-javascript "access plus 60 minutes"
  ExpiresByType text/xml "access plus 60 minutes"
</IfModule>
</Directory>


WSGIDaemonProcess DjangoProject.example.com processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup DjangoProject.example.com


WSGIScriptAlias /MyApp /var/www/DjangoProject/DjangoProject/wsgi.py
WSGIScriptAlias / /var/www/DjangoProject/DjangoProject/wsgi.py


<Directory /var/www/DjangoProject/DjangoProject>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
<IfModule mod_expires.c>
  ExpiresActive On
ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 1 seconds"
  ExpiresByType image/gif "access plus 10080 minutes"
  ExpiresByType image/jpeg "access plus 10080 minutes"
  ExpiresByType image/png "access plus 10080 minutes"
  ExpiresByType text/css "access plus 60 minutes"
  ExpiresByType text/javascript "access plus 60 minutes"
  ExpiresByType application/x-javascript "access plus 60 minutes"
  ExpiresByType text/xml "access plus 60 minutes"
</IfModule>
</Directory>


AddType audio/mpeg .mp1 .mp2 .mp3 .mpg .mpeg
</VirtualHost>

【问题讨论】:

  • 在不知道您认为可能有什么问题的情况下,很难提供帮助。如果它有效,那还不够好吗?
  • 确实我的网站正在运行,但我独自在这方面工作,以前从未做过 SysAdmin 工作,而且是 Django 新手。我认为如果我做的事情明显错误 - 将我的网站暴露在安全漏洞中,有人可以帮助指出这一点。
  • 可能 nginx 会是更合适的选择。 Apache 在 Python 的 virtualenvs 上遇到了一些问题,这绝对是一个必备功能。
  • Apache/mod_wsgi 在 Python 虚拟环境中没有任何问题。问题在于没有配置 mod_wsgi 以正确使用它们的人。如何更具体地说明您声称问题出在虚拟环境支持方面。

标签: python django apache mod-wsgi


【解决方案1】:

设置:

DocumentRoot /var/www

一开始就很危险。

您不应该将 DocumentRoot 目录设置为存储 Django 项目的父目录。如果您填充配置的其他部分,可能会导致您的 Django 设置文件可下载,包括任何数据库密码。

【讨论】:

  • 谢谢 - 我删除了 /etc/apache2/sites-available/default 的初始 部分。我认为该部分不需要运行我的网站,因为它在 apache 重新启动后仍在工作。
猜你喜欢
  • 2014-07-31
  • 1970-01-01
  • 2011-07-14
  • 2012-06-17
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 2021-01-15
  • 2014-03-02
相关资源
最近更新 更多