考虑下面的nginx配置文件:
server {
listen 443;
ssl on;
ssl_certificate /etc/tls/cert.pem;
ssl_certificate_key /etc/tls/key.pem;
location / {
proxy_pass http://api.default.svc.cluster.local;
}
}
字符串
443上所有传入的TCP请求都应该重定向到我在api.default.svc.cluster.local:80
上运行的服务器(这是一个节点REST-Api btw)。这工作正常,我可以curl https://<nginx-IP>/
nginx并获得正确的响应,正如预期的那样。
现在,我想将位置从/
更改为/api
,这样我就可以触发curl https://<nginx-IP>/api
以获得与以前相同的响应。
1.尝试
因此,我将配置中的位置行更改为:location /api {
个
不幸的是,这不起作用,相反,我得到了一个错误Cannot GET /api
,这是一个节点错误,所以很明显它被路由到API,但仍然有一些问题。
2.尝试
似乎URI中的尾随斜杠是必需的,所以我将其添加到位置:location /api/ {
个
现在有些事情改变了。我不会得到和以前一样的错误,而是得到一个“301永久移动”。我如何修复我的nginx配置文件?
关于环境的补充资料
我使用了一个kubernetes部署,部署了nginx反向代理,包括所介绍的配置。然后我使用kubernetes服务暴露nginx。另外,我尝试使用kubernetes ingress来处理这种情况,使用相同的路由,但是ingress服务会返回default backend - 404
消息。
1条答案
按热度按时间7uzetpgm1#
正如问题中提到的,URI中的尾随斜杠很重要。我在位置中修复了这个问题,但是,我没有将它添加到使用
proxy_pass
传递的URI中。至于nginx代理,我使用以下配置让它工作:
字符串
关于入口解决方案,我无法通过将缺少的尾随斜杠添加到路径来使其工作。服务是由于其名称而指定的,因此不能添加尾随斜杠(即,它会导致错误)。