Mod_wsgi https错误连接被拒绝

时间:2015-03-03 01:11:10

标签: django apache ssl https mod-wsgi

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

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

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

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专用API方法都按预期监听和响应。 HTTPS方面没有合作。尝试访问仅限HTTPS的方法时,连接被拒绝

例如,当尝试使用Google Chrome连接到该方法时...

  

https://ipaddress:8001/ldapauth/(ldapauth是一种HTTPS方法)

Chrome吐了回来...... enter image description here

同样在客户端Swift中形成的请求也拒绝连接。

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

  

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

在配置mod_wsgi或mod_wsgi-httpd时我有什么想法?非常感谢你的帮助,去吧!

1 个答案:

答案 0 :(得分:2)

您需要使用https地址指定--server-name选项及其可访问的站点名称。这应该与已设置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

然后,您将使用带有FQDN的URL访问它:

https://host.example.com:8001

如果您希望能够从localhost(同一系统)访问它而无需提供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的问题,这个问题很可能引起了我的注意。