![NGINX 代理传递到子域时缺少授权标头](https://linux22.com/image/777558/NGINX%20%E4%BB%A3%E7%90%86%E4%BC%A0%E9%80%92%E5%88%B0%E5%AD%90%E5%9F%9F%E6%97%B6%E7%BC%BA%E5%B0%91%E6%8E%88%E6%9D%83%E6%A0%87%E5%A4%B4.png)
你好,我在 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-app
到staging-app.example.com/api
。我已成功重定向 API 请求,但不知何故Authorization header
未传递给代理,导致 401 未授权,而其他标头确实传递了。
这是我当前的api.example.com
nginx 配置:
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" "";
这将使主机和代理之间的连接保持持久,这在某些设置中是进行身份验证所必需的
答案2
你有没有尝试过这个答案?
添加到位置阻止此条目
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;