nginx响应" 301永久移动"

时间:2017-04-09 17:37:36

标签: node.js nginx kubernetes

考虑以下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/ {

现在发生了变化。我没有像以前那样得到同样的错误,相反,我得到了永久性的&#34; 301&#34;。如何修复我的nginx配置文件?

有关环境的其他信息

我正在使用部署nginx反向代理的kubernetes部署。配置介绍。然后我使用kubernetes服务公开nginx。此外,我尝试使用kubernetes ingress来处理这种情况,使用相同的路由,但是,入口服务将使用default backend - 404消息进行响应。

1 个答案:

答案 0 :(得分:2)

正如问题所述,URI中的尾部斜杠很重要。我已将其修复到该位置,但是,我没有将其添加到使用proxy_pass传递的URI中。

至于nginx代理我使用以下配置工作:

server {
    listen 443;
    ssl    on;
    ssl_certificate     /etc/tls/cert.pem;
    ssl_certificate_key /etc/tls/key.pem;
    location /api/ {
        proxy_pass http://api.default.svc.cluster.local/;
    }
}

关于入口解决方案,我无法通过向路径添加缺少的尾部斜杠来使其工作。该服务由于其名称而被指定,因此不能添加尾部斜杠(即,它将导致错误)。