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

问一个 nginx 反向代理的问题

  •  1
     
  •   gezimonkey · 2023-05-10 11:41:02 +08:00 · 3197 次点击
    这是一个创建于 592 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前在 NAS 上用 joplin+Nginx Proxy Manager(NPM),路由 OPENWRT

    joplin APP_BASE_URL https://joplin.XXXX.top
    openwrt 上将 7788 端口映射到 npm,npm 反代到局域网 ip:80 端口

    目前客户端使用 https://joplin.XXXX.top:7788 正常
    但网页想进 joplin 后台会发现所有 css,js,跳转全部指向了 joplin.XXXX.top,默认端口 80,导致无法登录(以前没用 npm 时是 openwrt+nas 自带的反代,那时候可以正常进)

    尝试将 APP_BASE_URL 改为 https://joplin.XXXX.top:7788 或者 7520,客户端也无法访问,网页报 invalid origin https://joplin.XXXX.top(注意,报错没有端口号)

    请大神搭救一下,不胜感激

    第 1 条附言  ·  2023-05-10 17:38:28 +08:00
    再补充说明一下
    因为家宽无 80,443 端口,所以想着把所有 nas 上的服务都归到一个端口上(7788),然后用不同的二级域名访问,毕竟 joplin.xxx.top:7788,alist.xxx.top:7788xxx.top:1234,xxx.top:2234 这种要好记的多,但目前是 7788 端口直接解析到了 nginx 的 443,然后再反代 joplin.xxx.top,这样,joplin 的 APP_BASE_URL 就对不上了,访问 7788 时老是跳转到不带端口的,但如果我把 APP_BASE_URL 也写上 7788,nginx 里反代的结果又是不带端口的,也对不上,直接报非法地址,属于里外不是人了
    也尝试过改端口,用 NAS 自带的反代,但又发现证书有问题,还是回来解决 nginx 靠谱点....
    第 2 条附言  ·  2023-05-11 16:38:32 +08:00
    目前已经解决,虽然不完美吧,记录一下,留给有用的人
    nginx proxy manager 的自定义功能看起来无法满足我的需求(proxy_set_header 无效)或者是我不会用,只好在虚拟机上又 docker 了一个不带图形界面的纯 nginx,在这个 nginx 里使用 proxy_set_header host joplin.xxx.top:xxxx 起作用
    但又带来一个小问题,为什么一操作进行跳转的时候老会多个空格,导致不能正常跳转,非得手动复制....
    例如

    https://joplin.xxx.top:7799/%20https://joplin.xxx.top:7799/login
    17 条回复    2023-12-27 14:56:40 +08:00
    panxi
        1
    panxi  
       2023-05-10 14:02:46 +08:00   ❤️ 2
    你现在是一个 NAS 使用专家, 请帮我解决如下问题

    目前在 NAS 上用 joplin+Nginx Proxy Manager(NPM),路由 OPENWRT

    joplin APP_BASE_URL https://joplin.XXXX.top
    openwrt 上将 7788 端口映射到 npm,npm 反代到局域网 ip:80 端口

    目前客户端使用 https://joplin.XXXX.top:7788 正常
    但网页想进 joplin 后台会发现所有 css,js,跳转全部指向了 joplin.XXXX.top,默认端口 80,导致无法登录(以前没用 npm 时是 openwrt+nas 自带的反代,那时候可以正常进)

    尝试将 APP_BASE_URL 改为 https://joplin.XXXX.top:7788 或者 7520,客户端也无法访问,网页报 invalid origin https://joplin.XXXX.top(注意,报错没有端口号)



    看起来你需要更改 Joplin 的配置,使其正确地反向代理通过 Nginx Proxy Manager 访问。下面是一些可能的解决方案:

    1. 在 Nginx Proxy Manager 中创建一个新的主机,并将其指向 Joplin 的 IP 地址和端口号( 80 或 7788 或 7520 )。在该主机的设置中,启用 WebSocket 和 SSL ,并配置正确的证书。接下来,在你的 Joplin 客户端中将 APP_BASE_URL 设置为 https://你新创建的主机的域名或 IP 地址(包括协议和端口号)。然后重启 Nginx Proxy Manager 和 Joplin ,看看是否能正常访问。

    2. 在 Nginx Proxy Manager 中创建一个新的位置,指向 Joplin 的 IP 地址和端口号( 80 或 7788 或 7520 ),然后将该位置添加到你现有的主机中。在该位置的设置中,启用 WebSocket 和 SSL ,并配置正确的证书。接下来,在你的 Joplin 客户端中将 APP_BASE_URL 设置为 https://你现有主机的域名或 IP 地址(包括协议和端口号)和新创建位置的路径。然后重启 Nginx Proxy Manager 和 Joplin ,看看是否能正常访问。

    3. 如果上述方法都不起作用,你可以尝试修改 Joplin 的源代码。在 `WebApplication.js` 文件中,找到以下代码行:

    ```
    this.app.use((req, res, next) => {
    if (!this.api.config().clientWeb.packaged) {
    res.header("Content-Security-Policy", "default-src 'self'");
    }
    next();
    });
    ```

    将其替换为以下代码:

    ```
    this.app.use((req, res, next) => {
    res.setHeader('Content-Security-Policy', "default-src 'self' 'unsafe-inline' 'unsafe-eval'");
    next();
    });
    ```

    然后重启 Joplin ,看看是否能正常访问。

    希望这些方法能够帮助你解决问题。如果你有任何疑问或需要更多帮助,请随时问我。
    gezimonkey
        2
    gezimonkey  
    OP
       2023-05-10 15:49:05 +08:00
    然...卵...
    luckjoe680
        3
    luckjoe680  
       2023-05-10 19:09:40 +08:00   ❤️ 2
    nginx 添加 proxy_set_header host $host;
    dode
        4
    dode  
       2023-05-10 19:22:54 +08:00   ❤️ 1
    不要动 Nginx ,修改内部应用配置 joplin 用相同的端口和协议
    jackyzy823
        5
    jackyzy823  
       2023-05-10 19:34:20 +08:00   ❤️ 1
    gezimonkey
        6
    gezimonkey  
    OP
       2023-05-11 08:06:12 +08:00 via iPhone
    @luckjoe680 尝试添加过,没作用啊
    luckjoe680
        7
    luckjoe680  
       2023-05-11 08:43:12 +08:00
    @gezimonkey 不太可能吧…你添加错了吧估计
    gezimonkey
        8
    gezimonkey  
    OP
       2023-05-11 10:06:37 +08:00
    gezimonkey
        9
    gezimonkey  
    OP
       2023-05-11 10:07:27 +08:00
    gezimonkey
        10
    gezimonkey  
    OP
       2023-05-11 10:07:35 +08:00
    gezimonkey
        11
    gezimonkey  
    OP
       2023-05-11 10:14:38 +08:00
    loxlblade
        12
    loxlblade  
       2023-05-11 10:24:54 +08:00 via Android
    弱弱地问一句,这里的 joplin 是我写稿的那个软件吗。。。。
    gezimonkey
        13
    gezimonkey  
    OP
       2023-05-11 10:30:44 +08:00
    @loxlblade Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device.

    Joplin 是一个开源的笔记应用程序。捕捉你的想法,并从任何设备安全地访问它们
    写稿的是啥??
    loxlblade
        14
    loxlblade  
       2023-05-11 10:40:43 +08:00 via Android
    @gezimonkey 那就是对的,我就用的这个。
    luckjoe680
        15
    luckjoe680  
       2023-05-11 10:53:52 +08:00   ❤️ 1
    @gezimonkey 还是 invalid origin 吗 你看看请求的 origin 改了吗
    gezimonkey
        16
    gezimonkey  
    OP
       2023-05-11 16:39:45 +08:00
    @luckjoe680 谢谢你哈,就是用你说的办法,但不能 NPM 里用,可能是我不会用吧,只能新弄了一个 nginx,勉强能用了...很勉强...
    BBBOND
        17
    BBBOND  
       360 天前
    我也遇到了一样的问题,不过我在 https://blog.vvvv.day/?p=92 这篇文章里找到了灵感
    我在 NPM 的 advanced 中添加了下面的配置
    location / {
    proxy_pass http://xxx:xx;
    proxy_set_header Host $host:8443;
    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_max_temp_file_size 30000m;
    }

    8443 是我路由器 NAT 的统一入口端口
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2583 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:48 · PVG 13:48 · LAX 21:48 · JFK 00:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.