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 · 323 天前 · 2619 次点击
    这是一个创建于 323 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前在 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 条附言  ·  323 天前
    再补充说明一下
    因为家宽无 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 条附言  ·  322 天前
    目前已经解决,虽然不完美吧,记录一下,留给有用的人
    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  
       323 天前   ❤️ 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
       323 天前
    然...卵...
    luckjoe680
        3
    luckjoe680  
       323 天前   ❤️ 2
    nginx 添加 proxy_set_header host $host;
    dode
        4
    dode  
       323 天前   ❤️ 1
    不要动 Nginx ,修改内部应用配置 joplin 用相同的端口和协议
    jackyzy823
        5
    jackyzy823  
       323 天前   ❤️ 1
    gezimonkey
        6
    gezimonkey  
    OP
       322 天前 via iPhone
    @luckjoe680 尝试添加过,没作用啊
    luckjoe680
        7
    luckjoe680  
       322 天前
    @gezimonkey 不太可能吧…你添加错了吧估计
    gezimonkey
        8
    gezimonkey  
    OP
       322 天前
    gezimonkey
        10
    gezimonkey  
    OP
       322 天前
    gezimonkey
        11
    gezimonkey  
    OP
       322 天前
    loxlblade
        12
    loxlblade  
       322 天前 via Android
    弱弱地问一句,这里的 joplin 是我写稿的那个软件吗。。。。
    gezimonkey
        13
    gezimonkey  
    OP
       322 天前
    @loxlblade Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device.

    Joplin 是一个开源的笔记应用程序。捕捉你的想法,并从任何设备安全地访问它们
    写稿的是啥??
    loxlblade
        14
    loxlblade  
       322 天前 via Android
    @gezimonkey 那就是对的,我就用的这个。
    luckjoe680
        15
    luckjoe680  
       322 天前   ❤️ 1
    @gezimonkey 还是 invalid origin 吗 你看看请求的 origin 改了吗
    gezimonkey
        16
    gezimonkey  
    OP
       322 天前
    @luckjoe680 谢谢你哈,就是用你说的办法,但不能 NPM 里用,可能是我不会用吧,只能新弄了一个 nginx,勉强能用了...很勉强...
    BBBOND
        17
    BBBOND  
       92 天前
    我也遇到了一样的问题,不过我在 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   ·   我们的愿景   ·   实用小工具   ·   2817 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:25 · PVG 23:25 · LAX 08:25 · JFK 11:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.