域名、仪表盘升级和基本Web服务器配置

域名

许多组织通常会在一个总组织域名的子域名下部署Web应用程序。用户期望的域名形式通常为 openstack.example.org。在这种情况下,通常会在相同的二级域名空间中部署应用程序。这种命名结构很方便,并简化了名称服务器的维护。

我们强烈建议将仪表盘部署到二级域名,例如 https://example.com,而不是将其部署到任何级别的共享子域名上,例如 https://openstack.example.orghttps://horizon.openstack.example.org。我们还建议不要部署到裸内部域名,例如 https://horizon/。这些建议基于浏览器同源策略的限制。

如果将仪表盘部署在也托管用户生成内容的域名中,即使该内容位于单独的子域中,本指南中的建议也无法有效防止已知攻击。用户生成的内容可以包含脚本、图像或任何类型的上传文件。包括 googleusercontent.com、fbcdn.com、github.io 和 twimg.co 在内的主要Web站点都使用这种方法来隔离用户生成的内容与cookie和安全令牌。

如果您不遵循关于二级域名的建议,请避免使用基于cookie的会话存储,并采用HTTP严格传输安全 (HSTS)。在子域名上部署时,仪表盘的安全性等同于在同一二级域名上部署的安全性最低的应用程序。

基本Web服务器配置

仪表盘应作为Web服务网关接口 (WSGI) 应用程序部署在HTTPS代理服务器(如Apache或Nginx)之后。如果尚未使用Apache,我们建议使用 Nginx,因为它轻量级且更易于正确配置。

使用 Nginx 时,我们建议使用 gunicorn 作为WSGI主机,并配置适当数量的同步工作进程。使用Apache时,我们建议使用 mod_wsgi 来托管仪表盘。

允许的主机

使用OpenStack仪表盘提供的完全限定主机名配置 ALLOWED_HOSTS 设置。提供此设置后,如果传入HTTP请求的“Host:”标头中的值与此列表中的任何值不匹配,将引发错误,并且请求者将无法继续。未能配置此选项,或在指定的主机名中使用通配符,将导致仪表盘容易受到与伪造HTTP Host标头相关的安全漏洞的影响。

有关更多详细信息,请参阅 Django文档

Horizon图像上传

我们建议实施者 禁用 HORIZON_IMAGES_ALLOW_UPLOAD,除非他们已经实施了防止资源耗尽和拒绝服务的计划。