问一个 nginx 反向代理的问题

353 天前
 gezimonkey

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

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

2705 次点击
所在节点    NGINX
17 条回复
panxi
353 天前
你现在是一个 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
353 天前
然...卵...
luckjoe680
353 天前
nginx 添加 proxy_set_header host $host;
dode
353 天前
不要动 Nginx ,修改内部应用配置 joplin 用相同的端口和协议
jackyzy823
353 天前
gezimonkey
352 天前
@luckjoe680 尝试添加过,没作用啊
luckjoe680
352 天前
@gezimonkey 不太可能吧…你添加错了吧估计
gezimonkey
352 天前
gezimonkey
352 天前
gezimonkey
352 天前
gezimonkey
352 天前
loxlblade
352 天前
弱弱地问一句,这里的 joplin 是我写稿的那个软件吗。。。。
gezimonkey
352 天前
@loxlblade Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device.

Joplin 是一个开源的笔记应用程序。捕捉你的想法,并从任何设备安全地访问它们
写稿的是啥??
loxlblade
352 天前
@gezimonkey 那就是对的,我就用的这个。
luckjoe680
352 天前
@gezimonkey 还是 invalid origin 吗 你看看请求的 origin 改了吗
gezimonkey
352 天前
@luckjoe680 谢谢你哈,就是用你说的办法,但不能 NPM 里用,可能是我不会用吧,只能新弄了一个 nginx,勉强能用了...很勉强...
BBBOND
122 天前
我也遇到了一样的问题,不过我在 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 的统一入口端口

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/938837

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX