使用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_proxymod_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公司有限公司在芬兰和其他国家的商标。所有其他商标均为其各自所有者的财产。