NGINX 代理传递到子域时缺少授权标头

NGINX 代理传递到子域时缺少授权标头

你好,我在 NGINX 服务器上运行 Laravel,我想使用 NGINX 反向代理功能作为 Laravel 和其他节点 API 应用程序的 API 网关。以下是我的配置:

应用程序 URL:staging-app.example.com
应用程序 API 端点:staging-app.example.com/api
API 网关 URL:api.example.com

我想要做的是将所有 API 请求重定向api.example.com/staging-appstaging-app.example.com/api。我已成功重定向 API 请求,但不知何故Authorization header未传递给代理,导致 401 未授权,而其他标头确实传递了。

这是我当前的api.example.comnginx 配置:

server {
        server_name api.example.com;


        location /staging-app {
                rewrite ^/staging-app/(.*)$ /$1 break; 
                proxy_pass http://staging-app.example.com/;
        }

        location /test {
                rewrite ^/test/(.*)$ /$1 break;
                proxy_pass http://127.0.0.1:3333/;
         }

    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = api.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80;
        listen [::]:80;

        server_name api.example.com;
    return 404; # managed by Certbot
}

对于我的 laravel 应用程序,我使用来自Laravel 本身

更新 1:我尝试proxy_set_header Test testingvalue直接添加位置块,但似乎也不起作用

答案1

尝试将以下内容添加到服务器在端口 443 上监听的配置中:

proxy_http_version 1.1;
proxy_set_header   "Connection" "";

这将使主机和代理之间的连接保持持久,这在某些设置中是进行身份验证所必需的

配置文档

nginx 保持活动文档

答案2

你有没有尝试过这个答案

添加到位置阻止此条目

proxy_set_header  Authorization $http_authorization;
proxy_pass_header Authorization;

相关内容