› NGINX
› NGINX Trac
› 3rd Party Modules
› Security Advisories
› CHANGES
› OpenResty
› ngx_lua
› Tengine
在线学习资源
› NGINX 开发从入门到精通
NGINX Modules
› ngx_echo
gezimonkey
1.83D
V2EX  ›  NGINX

问一个 nginx 反向代理的问题

  •  1
     
  •   gezimonkey · May 10, 2023 · 4934 views
    This topic created in 1279 days ago, the information mentioned may be changed or developed.

    目前在 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(注意,报错没有端口号)

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

    Supplement 1  ·  May 10, 2023
    再补充说明一下
    因为家宽无 80,443 端口,所以想着把所有 nas 上的服务都归到一个端口上(7788),然后用不同的二级域名访问,毕竟 joplin.xxx.top:7788,alist.xxx.top:7788 比 xxx.top:1234,xxx.top:2234 这种要好记的多,但目前是 7788 端口直接解析到了 nginx 的 443,然后再反代 joplin.xxx.top,这样,joplin 的 APP_BASE_URL 就对不上了,访问 7788 时老是跳转到不带端口的,但如果我把 APP_BASE_URL 也写上 7788,nginx 里反代的结果又是不带端口的,也对不上,直接报非法地址,属于里外不是人了
    也尝试过改端口,用 NAS 自带的反代,但又发现证书有问题,还是回来解决 nginx 靠谱点....
    Supplement 2  ·  May 11, 2023
    目前已经解决,虽然不完美吧,记录一下,留给有用的人
    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 replies  •  2023-12-27 14:56:40 +08:00
    panxi
    panxi
    May 10, 2023❤️2
    1
    你现在是一个 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
    gezimonkey
    OP
    May 10, 2023
    2
    然...卵...
    luckjoe680
    luckjoe680
    May 10, 2023❤️2
    3
    nginx 添加 proxy_set_header host $host;
    dode
    dode
    May 10, 2023❤️1
    4
    不要动 Nginx ,修改内部应用配置 joplin 用相同的端口和协议
    gezimonkey
    gezimonkey
    OP
    May 11, 2023 via iPhone
    6
    @luckjoe680 尝试添加过,没作用啊
    luckjoe680
    luckjoe680
    May 11, 2023
    7
    @gezimonkey 不太可能吧…你添加错了吧估计
    gezimonkey
    gezimonkey
    OP
    May 11, 2023
    8
    gezimonkey
    gezimonkey
    OP
    May 11, 2023
    11
    loxlblade
    loxlblade
    May 11, 2023 via Android
    12
    弱弱地问一句,这里的 joplin 是我写稿的那个软件吗。。。。
    gezimonkey
    gezimonkey
    OP
    May 11, 2023
    13
    @loxlblade Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device.

    Joplin 是一个开源的笔记应用程序。捕捉你的想法,并从任何设备安全地访问它们
    写稿的是啥??
    loxlblade
    loxlblade
    May 11, 2023 via Android
    14
    @gezimonkey 那就是对的,我就用的这个。
    luckjoe680
    luckjoe680
    May 11, 2023❤️1
    15
    @gezimonkey 还是 invalid origin 吗 你看看请求的 origin 改了吗
    gezimonkey
    gezimonkey
    OP
    May 11, 2023
    16
    @luckjoe680 谢谢你哈,就是用你说的办法,但不能 NPM 里用,可能是我不会用吧,只能新弄了一个 nginx,勉强能用了...很勉强...
    BBBOND
    BBBOND
    Dec 27, 2023
    17
    我也遇到了一样的问题,不过我在 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 的统一入口端口
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4264 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 01:10 · PVG 09:10 · LAX 17:10 · JFK 20:10
    ♥ Do have faith in what you're doing.