位于防火墙后Nginx反向代理子目录访问问题


#1

Gogs 版本:0.11.34.1122
系统类型及版本:CentOS 7 / Docker 17.12.0-ce
数据库:MySQL 5.7.20
问题描述: Gogs用户登录后,返回服务器端口错误。

先说下环境吧,服务器位于防火墙后面,防火墙端口2222映射到服务器端口5622,服务器Nginx反向代理5622到Docker Gogs 3000端口。这样在外网就能通过x.x.x.x:2222访问Gogs前端了,其他一切都正常,就是用户登录的地方会出现错误,点一次登录的话,返回地址变成了x.x.x.x:5622(Nginx开放的端口)。登录的时候,连续点两次登录按钮却正常。

Nginx配置文件:
server {
listen 5622;
server_name x.x.x;

location /git/ {
    proxy_pass http://localhost:3000/;
    proxy_redirect off;
    proxy_set_header Host $host;  #这里改成proxy_set_header Host $host:2222;也没有用
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

}


#2

刚才看了下Docker日志和Nginx日志,好像是登录跳转的问题,默认情况下跳转到
http://x.x.x.x:2222/git
退出后再登录的地址也http://220.249.121.11:12722/git/user/login?redirect_to=%2fgit,但是Nginx规则是匹配http://x.x.x.x:2222/git/,少了个反斜框。

有这样子目录访问gogs碰到此问题的不?


#3

好像找到解决办法了
[service]
REQUIRE_SIGNIN_VIEW = true

或者在Nginx里再增加一条配置,让/git再反向代理下
location = /git {
proxy_pass http://localhost:3000/;
}