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

apache-2.2 – 来自后端的301的nginx负载均衡问题

发布时间:2020-12-13 21:10:47 所属栏目:Nginx 来源:网络整理
导读:我遇到了一个奇怪的问题,我不确定它是配置问题还是nginx中的错误.我的设置是一个nginx反向代理,它有Apache2后端服务器.负载平衡器非常基本类似于example from the wiki,例如简化: http { upstream myproject { server 127.0.0.1:8000; } server { listen 80

我遇到了一个奇怪的问题,我不确定它是配置问题还是nginx中的错误.我的设置是一个nginx反向代理,它有Apache2后端服务器.负载平衡器非常基本类似于example from the wiki,例如简化:

http {
  upstream myproject {
    server 127.0.0.1:8000;
  }

  server {
    listen 80;
    location / {
      proxy_pass http://myproject;
    }
  }
}

现在,例如当我尝试在Apache中请求目录时,会出现问题,而在URL的末尾没有尾部斜杠.例如,客户端请求:

http://apache.myserver.com/somedirectory

Apache将使用HTTP 302进行回复以将客户端重定向到

http://apache.myserver.com/somedirectory/

注意,url最后有一个斜杠,注意它是一个目录.另请注意,通过在重定向标头中使用传入请求主机名,Apache是??“智能”的.到目前为止都很好.但是,当使用具有负载平衡的nginx时,将301发送到客户端,而不将nginx上游名称转换回实际的服务器/域.所以客户将收到以下内容:

GET http://nginx.myserver.com/somedirectory
HTTP 301 Moved Permanently
...
Location: http://myproject:8000/somedirectory/

myproject是nginx上游后端的名称.它不是客户端可以解析的实际主机.在我看来,客户端应该被重定向到

http://nginx.myserver.com/somedirectory/  

即应该在响应头中替换上游后端的名称.这是nginx中的错误还是我做错了什么?

最佳答案
原来nginx有很多proxy redirect选项来处理这类问题.我最终使用了这样的东西:

location / {
    proxy_pass  http://myproject;
    proxy_set_header Host myproject;
    proxy_redirect http://myproject/ $scheme://$host/;
    proxy_redirect http://myproject:8000/ $scheme://$host/;
}

这基本上用$host替换了上游名称并删除了端口.这在我的情况下工作,因为我在HTTP / HTTPS的默认端口上托管nginx.如果nginx在非默认端口上运行,则需要这样的东西:

    proxy_redirect http://myproject/ $scheme://$host:$server_port/;
    proxy_redirect http://myproject:8000/ $scheme://$host:$server_port/;

(编辑:李大同)

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

    推荐文章
      热点阅读