您好,我有一个在ELB(负载平衡器)后面的EC2中的web服务器(运行nginx),终止SSL连接。
如果有一个请求www.domain.com它将http到ELB并传递到Nginx服务器上的http
如果有一个请求secure.domain.com它应该去https到ELB并传递到http到nginx服务器。
如果请求来自http://secure.domain.com我希望nginx做一个301redirect到https://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; }
我个人更喜欢第一种方法,因为我觉得它更清洁。