考虑以下 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;
}
}
Run Code Online (Sandbox Code Playgroud)
443 上的所有传入 TCP 请求都应重定向到我运行的服务器api.default.svc.cluster.local:80(顺便说一句,这是一个 REST-Api 节点)。这工作正常,我可以curl https://<nginx-IP>/nginx 并获得正确的响应,如预期的那样。
现在,我想将位置从 更改为/,/api这样我就可以触发 acurl 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 …