Nginx proxy_pass 未规范化 URL

Nginx proxy_pass 未规范化 URL

我对 / 上的 angular 前端和 /api/ 上的 node.js 后端进行了以下配置:

服务器 {

    listen 80;

    server_name example.com;

    location / {

    root /home/ubuntu/www/admin;
    index index.html;


    expires -1;
    add_header Pragma "no-cache";
    add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-ch$

    try_files $uri $uri/ /index.html =404;

    }


location /api/ {

proxy_pass  http://127.0.0.1:8080/;
proxy_http_version      1.1;
proxy_set_header        Upgrade $http_upgrade;
proxy_set_header Connection     'upgrade';
proxy_set_header        Host    $host;
proxy_cache_bypass      $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}

这应该将 example.com/api/foo 传递给 127.0.0.1:8080/foo,但却传递了 127.0.0.1:8080//api/foo

我查看了很多示例配置,看来我正确设置了尾随斜杠,有人可以提供一些建议吗?

答案1

它完全按照预期工作。

您忘了将 重写/api/

尝试这个:

location /api/ {
    rewrite ^/api(.*)$ /$1 break;
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

答案2

以防有人遇到同样的问题,我意识到 ubuntu 存储库中的 nginx 不是完整版的 nginx。添加官方 PPA 并重新安装后,我的配置现在可以正常工作了。

相关内容