如何在SSL终端负载均衡器后面设置nginx以重定向到某个主机的https

前端之家收集整理的这篇文章主要介绍了如何在SSL终端负载均衡器后面设置nginx以重定向到某个主机的https前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

您好我在EC2(负载均衡器)后面的EC2中有一个Web服务器(运行Nginx),它终止了SSL连接.

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

如果有对secure.domain.com的请求,它应该转到https到ELB并传递给http到Nginx服务器.

如果请求来自http://secure.domain.com,我希望Nginx进行301重定向到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()”似乎在服务器块上运行,因此对这个if()和http://www.domain.com/foo(在不同的服务器块中)的请求被拾取301到https://secure.domain.com/foo.

如何配置Nginx只是将secure.domains.com重定向到https而不影响我的所有其他虚拟主机?

谢谢

最佳答案
server {
   listen       80 default;
   server_name  domain.com ;
 ....
}

一种选择是拥有默认服务器块.

Nginx Doc server_name

第二个选项是使用if循环来检查请求是https且host是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;
}

我个人更喜欢第一种方法,因为我发现它更清洁.

猜你在找的Nginx相关文章