加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

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

发布时间:2020-12-13 21:19:18 所属栏目:Nginx 来源:网络整理
导读:您好我在EC2(负载均衡器)后面的EC2中有一个Web服务器(运行nginx),它终止了SSL连接. 如果有请求到www.domain.com,它将转到http到ELB并传递给nginx服务器上的http 如果有对secure.domain.com的请求,它应该转到https到ELB并传递给http到nginx服务器. 如果请求来

您好我在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;
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读