Nginx 反向代理似乎忽略了指定的端口

Nginx 反向代理似乎忽略了指定的端口

我有一个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_URLhttps://mysubdomain.example.com/

如果这没有任何帮助,则可能是权限问题:运行的用户gitea需要对gitea目录具有权限,因此为了提供服务gitea,您可能需要将其添加nginx到运行用户的组中gitea

相关内容