使用Apache、Lighttpd或Nginx设置生产服务器
部署服务器可以与常规Web服务器(Apache、Lighttpd或Nginx)结合使用。该Web服务器可用于减少打开端口的数量或添加SSL加密层。
对于与Django版本一起使用的部署服务器,有两种可能的设置方式:运行另一种Web服务器的情况
- 反向代理设置 - 这是我们在下面介绍的
- WSGI设置 - 为了简洁,这种设置不包括在本范围内,因为在功能上与反向代理设置类似
反向代理设置
对于所有Web服务器,初步设置是相同的。首先,部署服务器应该像独立使用一样进行设置。如果服务器将用于Web服务器的子目录中(例如http://hostname.domain/url_prefix/),那么应该在 appstore/settings.py 中的 URL_PREFIX
变量中设置该前缀。
在此示例中,该变量设置为 'url_prefix';请注意没有斜杠。另外,如果将 URL_PREFIX
设置为非空值,还应该更改 STATIC_URL
,使其从设置的前缀开始。因此,STATIC_URL
将为 '/<url_prefix>/static/'
,而不是 '/static/'
之后,应设置服务器以服务形式在任意空闲端口上运行。这通过运行以下命令完成
./venv/bin/python manage.py runserver 127.0.0.1:<port>
假设Python虚拟环境已设置在项目目录中,位于 venv 子目录下。
在Linux和Unix系统上,作为非root用户运行时,必须使用大于1024的端口号。
一旦服务运行,设置Web服务器的配置。
Apache2设置
首先,通过运行 a2enmod proxy proxy_http
在Apache中启用 mod_proxy 和 mod_proxy_http 模块。
然后,将以下代码片段插入到配置文件的VirtualHost部分
<Location '/<url_prefix>/'> ProxyPass "http://127.0.0.1:<port>/<url_prefix>/" ProxyPassReverse "http://127.0.0.1:<port>/<url_prefix>/" </Location>
如果需要,添加配置部分来设置对此URL的访问权限。
设置好之后,重新加载Web服务器的配置。
Lighttpd设置
对于Lighttpd,首先,以root身份运行 lighttpd-enable-mod proxy
来启用mod_proxy。或者,在 /etc/lighttpd/lighttpd.conf 文件中添加以下行
server.modules += ( "mod_proxy" )
接下来,添加以下代码片段
$HTTP["url"] =~ "^/<url_prefix>/" { proxy.balance = "hash" proxy.server = ( "" => ( ( "host" => "127.0.0.1", "port" => "<port>" ), ) ) }
其中 <url_prefix> 与 settings.py 文件中的相同,并且 <port> 是部署服务器实例正在运行的端口号。
最后,重新启动Lighttpd服务器的配置。
Nginx设置
对于Nginx,需要在服务器配置中的 server { }
语句内部添加代码片段,并重启服务器。
需要添加的代码是
location /<url_prefix>/ { proxy_pass http://127.0.0.1:<port>/<url_prefix>/; }
其中 <url_prefix> 与 settings.py 文件中的相同,并且 <port> 是部署服务器实例正在运行的端口号。
在Django应用外提供静态文件
可以通过分别提供静态文件来加速部署服务器的管理员页面工作。为了实现这一点,Web服务器应该配置为将部署服务器安装的static/子目录作为实例的static/子目录来提供。(如果部署服务器托管为http://deployment.server.name/,则源中的static/目录应重定向到http://deployment.server.name/static/,绕过django应用。)
配置完成后,应使用以下命令进行静态文件收集
./venv/bin/python manage.py collect static
©2020 Qt公司有限公司。本文档中的贡献保留各自的版权。本提供的文档受自由软件基金会发布的GNU自由文档许可协议第1.3版条款的许可。Qt及其相关标志是Qt公司有限公司在芬兰和其他国家的商标。所有其他商标均为其各自所有者的财产。