在SSL终止负载均衡器后面,如何设置nginxredirect到某个主机的https

您好,我有一个在ELB(负载平衡器)后面的EC2中的web服务器(运行nginx),终止SSL连接。

如果有一个请求www.domain.com它将http到ELB并传递到Nginx服务器上的http

如果有一个请求secure.domain.com它应该去https到ELB并传递到http到nginx服务器。

如果请求来自http://secure.domain.com我希望nginx做一个301redirecthttps://secure.domain.com

我可以通过使用由ELB注入的http_X_Forwarded_Proto头来完成这个任务。 所以像

 server { listen 80; server_name secure.domain.com ; if ($http_X_Forwarded_Proto = http) { return 301 https://secure.domain.com$request_uri; } .... } 

问题是,“if()”似乎在服务器块上运行,因此,对于http://www.domain.com/foo (在另一个服务器块中)的请求被if()和301到https://secure.domain.com/foo

我怎样才能configurationnginx只是redirectsecure.domains.com到https而不影响我所有的其他虚拟主机?

谢谢

 server { listen 80 default; server_name domain.com ; .... } 

一种select是有一个默认的服务器块。

Nginx文件server_name

第二个选项是让if循环来检查请求是https和主机是secure.domain.com的情况。

 if ($host == secure.domain.com){ set $random_var 1; } if ($http_X_Forwarded_Proto == https ){ set $random_var 10; } if ($random_var == 10){ return 301 https://secure.domain.com$request_uri; } 

我个人更喜欢第一种方法,因为我觉得它更清洁。