server { listen 8000; server_name correct.name.gr; location /test/register { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1; } }
我要做的是,当用户访问http://correct.name.gr:8000/test/register/
时,应该将他们代理到运行在端口80上的apache。
当我访问http://correct.name.gr:8000/test/register/
时,我会得到正确的结果(index.php)。当我访问http://correct.name.gr:8000/test/register/asd
时,我会得到正确的结果(404来自apache)。当我访问http://correct.name.gr:8000/test/asd
时,我会得到正确的结果(404来自nginx)。当我访问http://correct.name.gr:8000/test/register123
时,我会得到正确的结果(404来自apache)。
问题是当我访问http://correct.name.gr:8000/test/register
时。我得到一个301响应,并被重定向到http://localhost/test/register/
(注意后面的斜杠,当然还有'localhost')!!!
更新1:我从另一台计算机尝试了http://correct.name.gr:8000/test/register
,而不是昨天发生不良行为的计算机。好了,它奏效了:我刚刚得到了一个301响应,它指向了正确的http://correct.name.gr:8000/test/register/
!怎么可能在一台电脑上工作而不在另一台电脑上工作(我在两台电脑上使用相同的浏览器-Chrome)?我明天再试一次,从第三个测试,看看行为。
谢谢!
我猜是上游服务器(apache或脚本)触发了对绝对urlhttp://localhost/test/register/
的重定向。因为在proxy_pass
指令中使用http://127.0.0.1
,所以nginx找不到与域名匹配的域名,并按原样返回location
标头。
我认为正确的解决方案是不要使用绝对重定向,如果重定向是一个内部URL。这总是一个很好的做法。
但是,在不改变上游服务器的情况下,有两种快速解决方案。
proxy_pass http://localhost;
另一个方法是添加proxy_redirect
行,以强制nginx重写任何位置标头,标头中包含http://localhost/
。
proxy_pass http://127.0.0.1;
proxy_redirect http://localhost/ /;
我更喜欢第一个解决方案,因为它更简单。使用proxy_pass http://localhost;
没有DNS查找开销,因为nginx在启动web服务器时会提前进行查找。
参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
我的a域是在CloudFlare的免费工具后面管理的。我想添加一个名为“test”的子域,但我希望它指向在我的服务器端口8183上运行的第二个webserver。在Cloudflare DNS portal中,我有一个“test.example.com”的A记录,它指向我的WebServer的IP地址,该地址也被代理以隐藏我的WebServer的实际IP地址。所有流量都通过HTTPS路由,证书也由
问题内容: 我的nginx服务器实际上是使用以下简单的代理来代理节点后端(侦听端口3000): 其中上游_1是我在nginx.conf中定义的节点群集(在端口3000上)。 我将不得不通过http连接添加SSL,所以我有以下问题:我是否只需要配置nginx来启用ssl?并且它将自动“解密”请求并将未解密的请求传递给能够正常处理的Node?还是我需要将Nodejs配置为也支持ssl? 问题答案: 如
我正在阅读Flask quickstart指南,但是使用变量进行路由的示例对我来说并不适用。 http://127.0.0.1:5000/user/bob重定向到http://127.0.0.1:5000/user/bob/给我一个404 我还尝试了与指南中完全相同的代码。我的第一个要点中的错误是意料之中的吗?快速入门版本中的代码应该工作吗?还是我误解了什么? 我使用的是Python 2.7.10
我不确定这是否可以实现。我正在使用以下版本以群集模式运行docker: 客户端:版本:17.03.0-CE API版本:1.26Go版本:GO1.7.5 Git提交:3A232C8构建:周二2月28日08:10:07 2017 OS/arch:linux/amd64 显然,客户端套接字连接无法解析到群集中托管的服务集群。docker swarm是否有一个变通配置,或者它只是不可能?我没有太多的运气
我正在尝试使用nginx代理传递到使用基本身份验证的Kibanapod。 用于测试(这是另一个k8s集群,但非常相似,使用相同的命名空间,kube dns,POD内的env匹配,并且它们彼此看到)上下文:我通过AWS中k8s的helm部署了这个,nginx有一个Kubernetes LB服务类型(基本上是AWS的ELB,其cname位于route53)。 如果我将nginx pod指向kibana
我有一个Spring控制器,其中有几个用于不同URI的RequestMapping。我的servlet是“UI”。servlet的基本URI只使用尾随斜杠。我希望我的用户不必输入尾随斜杠。 此URI的工作方式是: