我已经在Web服务器上设置了一个nginx反向代理服务器,该服务器正在接收SSL流量,并将其反向代理到Web服务器上的端口8080,该端口是运行nextcloud docker映像的公开端口。我可以从桌面Web浏览器登录,但不能从iPhone登录。从应用程序登录时,收到错误消息“禁止访问,无效请求”。 This Github问题将问题识别为从请求中删除了auth标头,尽管它提供的解决方案是针对Apache而非Nginx的。我真的不熟悉授权标头。我将如何修改Nginx服务器指令以解决该问题?
当前设置
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name cloud.foo.com;
ssl_certificate /etc/letsencrypt/live/cloud.foo.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/cloud.foo.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
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
答案 0 :(得分:0)
您可能需要添加一个设置,以在代理服务器的响应中显式传递Authorization
标头。
例如:
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass_header Authorization;
}
根据我在另一项身份验证服务中看到的反向代理设置,默认情况下,Nginx可能不会将Authorization
头从代理服务器的响应传递到客户端。尽管the documentation中未列出,但可能有必要避免干扰authentication modules。