Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Mod_wsgi https错误连接被拒绝_Django_Apache_Ssl_Https_Mod Wsgi - Fatal编程技术网

Django Mod_wsgi https错误连接被拒绝

Django Mod_wsgi https错误连接被拒绝,django,apache,ssl,https,mod-wsgi,Django,Apache,Ssl,Https,Mod Wsgi,我的团队正在开发一个RESTAPI,以支持使用Django的REST框架的iPhone应用程序。现在是我们从通过开发WSGI接口托管转到mod_WSGI apache接口托管的时候了。我们决定使用mod_wsgi-httpd作为Apache实例 我们无法让mod_wsgi通过HTTPS托管。 我们在django应用程序设置文件(settings.py)中包含了mod_wsgi 并且可以使用以下命令成功启动mod_wsgi服务器: python manage.py runmodwsgi--主机0.

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

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

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

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

python manage.py runmodwsgi--主机0.0.0.0--端口8000--https端口8001--ssl证书/path/to/cert/和/key

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

例如,当试图连接到使用谷歌浏览器的方法

(ldapauth是一种HTTPS方法)

铬吐回。。。

类似地,客户端Swift中形成的请求也被拒绝

通常我认为这是一个更基本的问题,但是我们在使用开发WSGI sslserver(也在project的settings.py安装的应用程序中)方面的成功使我认为这是mod_WSGI或mod_WSGI-httpd的问题。使用此命令,我们可以通过SSL托管API,并获得成功的请求/响应:

python manage.py runsslserver 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
然后,您将使用带有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的问题,这是一个偶然的机会,我注意到了这个问题。

谢谢你的帮助!这正是问题所在。必须确保mod_wsgi知道服务器名称。
127.0.0.1       host.example.com