V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
idealhs
V2EX  ›  NGINX

Nginx 为 OMV6 webui 和其他应用配置 sub-path 反向代理的问题

  •  
  •   idealhs · 2022-06-08 18:01:18 +08:00 · 1912 次点击
    这是一个创建于 908 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为对 Nginx 知识不多,所以在为 OMV webui 配置反向代理的时候遇到了一些问题,来问问熟悉的老哥们

    我的需求是将所有 http://server:port 的 web 服务形式通过反代,以 http://server/subpath 的形式来访问。

    比如 OMV webui 是 http://server:81 ,那么可以访问 http://server/omv,jellyfin 是http://server:8096 ,那么可以访问 http://server/jellyfin

    为此我将 OMV webui 的端口从 80 改成了 81 ,并且有了以下 nginx config

        server {
            listen 80;
      
            server_name server server.local;
    
            set $localhost 127.0.0.1;
    
            location /omv {
                return 302 $scheme://$host/omv/;
            }
    
            location /omv/ {
                proxy_pass http://$localhost:81;
            }
        }
    

    这段 config 并没有工作,而我记得在之前的 omv5 中我成功地如此反代了 OMV webui 。

    并且令我疑惑的是,proxy_pass 对不同的应用配置表现不一样,我难以学习并为不同的应用自己编写 proxy_pass config (location 块)。例如 jellyfin 官方网站给出的 nginx config 是这样的 Jellyfin Doc

    PS: 以下代码均包含在上述代码的 server 块中,与其他 location 同级

        # Jellyfin
        location /jellyfin {
            return 302 $scheme://$host/jellyfin/;
        }
    
        location /jellyfin/ {
            proxy_pass http://$jellyfin:8096/jellyfin/;
    
            proxy_pass_request_headers on;
    
            proxy_set_header Host $host;
    
            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;
            proxy_set_header X-Forwarded-Host $http_host;
    
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $http_connection;
    
            proxy_buffering off;
        }
    

    对于这种可以在应用中设置 sub-path 的应用,我使用上述官方 config 反而会失败,如果我其中的
    proxy_pass http://$jellyfin:8096/jellyfin/;
    改为
    proxy_pass http://$jellyfin:8096;
    则可成功将 jellyfin 代理。

    PS : 我使用过另一个需要配置 sub-path 的应用是 NextCloud , 在 config.php 中配置 'overwritewebroot' => 'sub-path' NextCloud Doc

    对于 qBittorrent,同样也有官方给出的 nginx config : NGINX Reverse Proxy for Web UI , 而这个 config 则不需要我任何改动,就可成功代理。

    希望 V2 的 Nginx 大佬不吝赐教,帮助我解开这个疑惑。

    2 条回复    2022-06-09 01:45:08 +08:00
    dcsite
        1
    dcsite  
       2022-06-08 23:39:55 +08:00
    先确认一下

    omv
    http://127.0.0.1:81

    jellyfin
    http://127.0.0.1:8096/jellyfin/

    这两个应用是不是可以正常访问?
    idealhs
        2
    idealhs  
    OP
       2022-06-09 01:45:08 +08:00
    @dcsite 没问题的,带端口号直接访问是正常的。今天重新装回了 OMV5, 可以用 proxy_pass http://127.0.0.1:81/ 的方式去反代成功了。 明天还是在虚拟机上继续尝试 OMV6 Webui 的反代吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1242 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:04 · PVG 02:04 · LAX 10:04 · JFK 13:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.