我的网站有一个登录页面,我需要使用https。我在apache上使用django运行该站点,其中nginx前端充当反向代理,执行两项操作:
1)提供所有django静态内容 2)配置为支持ssl
ssl的东西都设置好了,似乎工作正常....我可以去两个
和
没有问题,https要求我验证证书等。
我的问题是我正在尝试设置nginx,以便无法在不是https的登录页面中输入密码。我不能让它重新指导。
有人可以解释一下这是如何运作的
ssl在443上运行,nginx在端口80上转发
感谢
答案 0 :(得分:1)
这些重定向更适合在您的网络应用中配置,而不是Nginx,因为虽然您可能在Nginx中硬编码重定向,但在Python中设置它们与您的视图直接相关更容易。
当然是我的意见。
djangosnippets上有大量的SSL重定向中间件会将网址重定向到https。
这是一个装饰器,所以你可以在你的视图上做@secure
。
http://djangosnippets.org/snippets/1999/
我稍微修改一下这个修改后的http://djangosnippets.org/snippets/880/
我在settings.py
文件中将某些url路径设置为SSL。
例如,在我的conf中,我有:SSL_URLS = ( '/cart/', '/checkout/', '/accounts/' )
答案 1 :(得分:1)
如果要在nginx代理级别将网址http://www.mysite.com/login重定向到 https ://www.mysite.com/login,这样可以避免加载任何django机器,更快,更快速。
您可以添加到您的nginx配置
location /login {
# redirect to secure page [permanent | redirect]
rewrite ^/login(.*) https://www.mysite.com/login permanent;
}
基本上将任何/ login重定向到其https conterpart。
希望它有所帮助。更新
确保您收听端口443
server {
listen yourIP:80;
server_name yourdomain.com;
# redirect /login to the https page
location /login {
# redirect to secure page [permanent | redirect]
rewrite ^/login(.*) https://www.mysite.com/login permanent;
}
}
#the HTTPS section listening to port 443
server {
listen yourIP:443;
server_name yourdomain.com;
location / {
#your proxy code or root setting
}
}