Mod_wsgi https 错误连接被拒绝

Mod_wsgi https Error Connection Refused

我的团队正在开发 REST API 以支持使用 Django 的 REST 框架的 iPhone 应用程序。现在是我们从通过开发 WSGI 接口托管切换到 mod_wsgi apache 接口的时候了。我们决定使用 mod_wsgi-httpd 作为 Apache 实例。

我们无法让 mod_wsgi 通过 HTTPS 托管。

我们已将 mod_wsgi 包含在我们的 django 应用程序设置文件中 (settings.py)

INSTALLED_APPS = (
    'sslserver',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'mod_wsgi.server',
)

并且可以使用此命令成功启动 mod_wsgi 服务器:

python manage.py runmodwsgi --host 0.0.0.0 --port 8000 --https-port 8001 --ssl-certificate /path/to/cert/and/key

HTTP 服务器工作得很好。我们所有的 HTTP only API 方法都会按预期进行监听和响应。 HTTPS 端不合作。尝试访问仅 HTTPS 方法时,连接被拒绝

例如,当尝试使用 Google Chrome...

连接到方法时

https://ipaddress:8001/ldapauth/ (ldapauth is an HTTPS method)

Chrome吐回去...

类似地,在客户端 Swift 中形成的请求被拒绝连接。

通常我会认为这是一个更基本的问题,但是我们在使用开发 WSGI sslserver(也在项目的 settings.py INSTALLED_APPS 中)的成功让我认为这是一个问题 mod_wsgi 或 mod_wsgi-httpd.使用此命令,我们可以通过 SSL 成功托管 API:requests/responses:

python manage.py runsslserver 0.0.0.0:8001 --key /path/to/key --cert /path/to/cert

我在配置 mod_wsgi 或 mod_wsgi-httpd 时可能遗漏了什么想法?非常感谢您的帮助,加油!

您需要指定 --server-name 选项以及可以使用 https 地址访问的站点名称。这应该与设置 SSL 证书的名称相匹配。

python manage.py runmodwsgi --host 0.0.0.0 --port 8000 --https-port 8001 --ssl-certificate /path/to/cert/and/key --server-name host.example.com

然后您将使用 URL 和 FQDN 访问它:

https://host.example.com:8001

如果您希望能够从本地主机(同一系统)访问它而无需提供 FQDN 主机名,您可以使用 --allow-localhost 选项。

python manage.py runmodwsgi --host 0.0.0.0 --port 8000 --https-port 8001 --ssl-certificate /path/to/cert/and/key --server-name host.example.com --allow-localhost

对于后者,即使使用官方证书作为主机名,您也会收到浏览器关于证书不匹配的警告。对于 wget 和 curl 等命令行 HTTP 工具,在这些情况下,您必须告诉他们这是一个不安全的站点。

这是因为它违背了 HTTPS 和 SSL 证书的正常使用方式,因此仅允许从 localhost 出于测试目的使用正确服务器名称以外的名称进行访问。

简而言之,在使用 HTTPS 时,您在访问站点时应该始终使用正确的主机名而不是 IP 地址。如有必要,您可以在主机服务文件中为您的系统创建虚拟主机映射。

例如,在 /etc/hosts 文件中您可以添加:

127.0.0.1       host.example.com

如需更多信息,建议您使用 mod_wsgi 邮件列表。我不再习惯在这里闲逛或回答有关 mod_wsgi 的问题,这个问题引起了我的注意。