我有一个gitea服务器监听公网IP 111.222.333.444
,端口3000,如果我http://111.222.333.444:3000
在浏览器上打开,是可以正常访问的。
我有一个在 上运行的 nginx 服务器999.888.777.666
。我已注册域名,DNS 指定mysubdomain.example.com
指向999.888.777.666
。
在 nginx 服务器配置中,我包含了以下入口:
server {
listen 80;
server_name mysubdomain.example.com;
location / {
proxy_pass http://111.222.333.444:3000;
proxy_set_header Host $host;
proxy_redirect off;
}
}
如果我http://mysubdomain.example.com
通过浏览器访问,我无法访问我的 gitea 服务器。但是,如果我访问http://mysubdomain.example.com:3000
,我可以成功访问服务器。
实际上,我可以从 nginx 配置中删除端口并保持原样,而我的浏览器体验保持不变:
server {
listen 80;
server_name mysubdomain.example.com;
location / {
proxy_pass http://111.222.333.444;
proxy_set_header Host $host;
proxy_redirect off;
}
}
为什么会发生这种情况?
补充说明:我在同一个 nginx 服务器中以相同的方式设置了其他反向代理,它们工作正常,无需在子域名上指定端口。
我做错了什么?我应该做哪些更改才能访问我的 gitea 服务器而http://mysubdomain.example.com
无需指定端口?
答案1
很抱歉这么晚回复,但希望这对你或其他人将来有用:
假设您的目录权限正确,我相信您需要gitea
通过添加到代理的上游连接nginx
。
假设给定一个配置文件/etc/nginx/conf.d/mysubdomain.example.com.conf
:
# Default gitea port on localhost address (127.0.0.1)
upstream gitea {
server 127.0.0.1:3000;
}
# Server "root" location should be where gitea is installed
server {
listen 80;
server_name mysubdomain.example.com;
root /var/lib/gitea/public;
# Give gitea some handling options
location / {
try_files maintain.html $uri $uri/index.html @node;
}
# And proxy it onward
location @node {
client_max_body_size 0;
proxy_pass http://localhost:3000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_max_temp_file_size 0;
proxy_redirect off;
proxy_read_timeout 120;
}
}
然后检查[server]
中的部分/etc/gitea/app.ini
。您要确保您没有在根 URL 中强制使用端口 3000 两次:
DOMAIN = mysubdomain.example.com
HTTP_PORT = 3000
ROOT_URL = http://mysubdomain.example.com/
如果你添加证书,那么你需要将其更改ROOT_URL
为https://mysubdomain.example.com/
如果这没有任何帮助,则可能是权限问题:运行的用户gitea
需要对gitea
目录具有权限,因此为了提供服务gitea
,您可能需要将其添加nginx
到运行用户的组中gitea
。