此nginx实例的目的是使GitLab和OpenWRT Luci通过反向代理进行重定向。它已经在其他几个网站上运行,所有这些网站都有一个基本URL,似乎可以解决此问题。
- 本示例中的GitLab位于本地服务器的端口9000上。
- Nginx网站位于端口8080上。
- OpenWRT具有完全相同的问题,但带有/ cgi-bin / luci /
示例位置的相关nginx配置为:
location /gitlab/ {
proxy_pass http://127.0.0.1:9000/;
proxy_redirect default;
}
- 请注意,使用斜杠和不使用斜杠的结果都是相同的。
有一些标头代理配置选项应用于此位置。
# Timeout if the real server is dead
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
# Basic Proxy Config
proxy_set_header Host $host:$server_port;
proxy_set_header Origin $scheme://$host:$server_port;
proxy_set_header Connection $http_connection;
proxy_set_header Cookie $http_cookie;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Frame-Options SAMEORIGIN;
# Advanced Proxy Config
send_timeout 5m;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_connect_timeout 300;
proxy_buffers 32 4k;
proxy_buffer_size 4k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_http_version 1.1;
proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;]
- 注释掉#proxy_set_header主机,而是将浏览器重定向到
https://127.0.0.1:9000/users/sign_in
浏览时https://website.com:8080/gitlab/
;
GET /gitlab/ HTTP/1.1
Host: website.com:8080
响应错误地返回/users/sign_in
而不是/gitlab/users/sign_in
HTTP/1.1 302 Found
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Location: https://website.com:8080/users/sign_in
手动浏览到https:// website:8080 / gitlab / users / sign_in会加载该页面,但是没有资产落下,直到出现与上述相同的问题为止。
阅读nginx docs,它表明默认代理行为应该可以应对这种情况,尽管它似乎会失败。
日志似乎显示不多。
应该采取哪些其他步骤来帮助诊断为什么会发生这种情况?