2011-01-12 55 views
0

我有有我需要使用HTTPS与登录页面的网站HTTPS。我正在使用Django在Apache与nginx的前端作为反向代理做两件事情的网站:路由HTTP使用nginx的反向代理

1)服务的所有Django的静态内容 2)配置为支持SSL

的SSL东西是所有设置和似乎工作正常....即我可以去这两个

http://www.mysite.com/login

https://www.mysite.com/login

,没有任何问题,和HTTPS要求我验证证书等

我的问题是我试图请将nginx设置为无法在不是https的登录页面中输入密码。我无法让它做到这一点重新指导。

有人可以解释它是如何工作

的SSL是443运行,80

感谢

回答

1

这些重定向nginx的被转发端口更适合配置在你的web应用程序,而不是Nginx的,因为虽然你可能在Nginx中硬编码重定向,但它更容易在Python中设置,它与你的视图直接相关。

只是我当然意见。

有吨SSL的重定向djangosnippets将重定向的URL HTTPS中间件。

这里有一个与装饰,所以你可以做@secure对你的看法。 http://djangosnippets.org/snippets/1999/

我peresonally用这一个稍微http://djangosnippets.org/snippets/880/ 修改,我设置某些URL路径是在settings.py文件SSL。

例如,在我的conf我:SSL_URLS = ('/cart/', '/checkout/', '/accounts/')

1

什么重定向URL http://www.mysite.com/loginHTTPS:在nginx的代理级别//www.mysite.com/login,这将避免任何的Django机械被加载,使其更快速和响应。

你可以添加到您的nginx配置

location /login { 
    # redirect to secure page [permanent | redirect] 
    rewrite ^/login(.*) https://www.mysite.com/login permanent; 
    } 

basicly重定向任何/登录到它的HTTPS conterpart。

希望它有帮助。

UPDATE

确保你听端口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 
    } 
} 
+0

由于某种原因,这是行不通的。之前,我插入此配置并重新启动nginx的,要去“https://开头正常工作后,我插入这个配置和启动服务器,从http重定向://为” https://开头的作品,但我得到一个网页“无法连接”的错误。任何线索,怎么回事? – josephmisiti 2011-01-13 05:19:21