nginxredirect循环与ssl

这是一个非常类似的问题, Nginxconfiguration导致无尽的redirect循环,但讨论还没有让我得到答案。 我正在学习如何使用nginx和ssl,并且在东西的常规http:// example.com一切都可以正常工作,但是当路由到https:// example.com/admin时,我会看到:

此网页有redirect循环

这是我的configuration文件:

map $uri $example_org_preferred_proto { default "http"; ~^/(images|css|javascript)/ "none"; ~^/admin/ "https"; } server { listen 80; root /usr/share/nginx/www/example.com/blog; server_name example.com; if ($example_org_preferred_proto = "https") return 301 https://example.com$request_uri; } location ~ / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:2368; } } server { listen 443; ssl on; root /usr/share/nginx/www/example.com/blog; server_name example.com; ssl_certificate /usr/share/nginx/<redacted>.crt; ssl_certificate_key /usr/share/nginx/<redacted>.key; if ($example_org_preferred_proto = "http") { return 301 http://example.com$request_uri; } location ~ / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:2368; } } 

基本上我想完成的是有一个网站,通常运行未encryption,但是当我指向我的pipe理页浏览器redirect到https和encryption我的login。

注意:映射的想法来自http://www.redant.com.au/ruby-on-rails-devops/manage-ssl-redirection-in-nginx-using-maps-and-save-the-universe/和似乎是比使用重写更好的方法

当nginx遇到一个'https'协议时,它认为它仍然使用'http'作为协议,并且没有与其他头部一起转发,请尝试添加:

 proxy_set_header X-Forwarded-Proto $scheme; 

在你的位置块来修复它。