traceless / alist-encrypt

这个项目主要是对 alist 的服务进行代理,提供 webdav 的加解密功能。支持 alist 网页在线播放加密的视频,查看加密的图片等功能,同时在 webdav 下的操作透明,自动实现文件资源的加解密。
1.22k stars 112 forks source link

[BUG]配置 alist url 为 docker service name 会导致查看非加密数据异常 #47

Open greatbody opened 7 months ago

greatbody commented 7 months ago

导致问题的代码: https://github.com/traceless/alist-encrypt/blob/dfba5606341dd5675a04dbadefba7a53f4188594/node-proxy/app.js#L239-L241

如果 ctx.req.selfHost 我们配置的是 docker service 的名字,如下 ALIST_HOST: alist:5244

version: '3.3'
services:
  alist:
    image: 'xhofe/alist:latest'
    restart: always
    volumes:
      - '/etc/alist:/opt/alist/data'
    ports:
      - '5244:5244'
    environment:
      - PUID=0
      - PGID=0
      - UMASK=022
    container_name: alist
  alist-encrypt:
    image: prophet310/alist-encrypt:beta
    restart: unless-stopped
    container_name: alist-encrypt
    volumes:
      - ./alist-encrypt:/node-proxy/conf
    environment:
      TZ: Asia/Shanghai
      ALIST_HOST: alist:5244        # 建议加个设置项,类似这样
    ports:
      - '5344:5344'

就会导致在预处理非加密文件的展示的时候,网址被替换为

image

很容易注意到我们这浏览器中,用到了仅仅可以在 docker 网络中用的 hostname。这会导致我们的浏览器无法正确显示。

问题出现的原因

作者的目的是在相应非加密数据的时候,尽量不代理,走原 alist。但是意外导致了这个问题。

traceless commented 7 months ago

导致问题的代码:

https://github.com/traceless/alist-encrypt/blob/dfba5606341dd5675a04dbadefba7a53f4188594/node-proxy/app.js#L239-L241

如果 ctx.req.selfHost 我们配置的是 docker service 的名字,如下 ALIST_HOST: alist:5244

version: '3.3'
services:
  alist:
    image: 'xhofe/alist:latest'
    restart: always
    volumes:
      - '/etc/alist:/opt/alist/data'
    ports:
      - '5244:5244'
    environment:
      - PUID=0
      - PGID=0
      - UMASK=022
    container_name: alist
  alist-encrypt:
    image: prophet310/alist-encrypt:beta
    restart: unless-stopped
    container_name: alist-encrypt
    volumes:
      - ./alist-encrypt:/node-proxy/conf
    environment:
      TZ: Asia/Shanghai
      ALIST_HOST: alist:5244        # 建议加个设置项,类似这样
    ports:
      - '5344:5344'

就会导致在预处理非加密文件的展示的时候,网址被替换为

image

很容易注意到我们这浏览器中,用到了仅仅可以在 docker 网络中用的 hostname。这会导致我们的浏览器无法正确显示。

问题出现的原因

作者的目的是在相应非加密数据的时候,尽量不代理,走原 alist。但是意外导致了这个问题。

是的,确实存在这个问题,(⊙o⊙)…,你那边有什么好的建议和办法吗

greatbody commented 6 months ago

导致问题的代码: https://github.com/traceless/alist-encrypt/blob/dfba5606341dd5675a04dbadefba7a53f4188594/node-proxy/app.js#L239-L241

如果 ctx.req.selfHost 我们配置的是 docker service 的名字,如下 ALIST_HOST: alist:5244

version: '3.3'
services:
  alist:
    image: 'xhofe/alist:latest'
    restart: always
    volumes:
      - '/etc/alist:/opt/alist/data'
    ports:
      - '5244:5244'
    environment:
      - PUID=0
      - PGID=0
      - UMASK=022
    container_name: alist
  alist-encrypt:
    image: prophet310/alist-encrypt:beta
    restart: unless-stopped
    container_name: alist-encrypt
    volumes:
      - ./alist-encrypt:/node-proxy/conf
    environment:
      TZ: Asia/Shanghai
      ALIST_HOST: alist:5244        # 建议加个设置项,类似这样
    ports:
      - '5344:5344'

就会导致在预处理非加密文件的展示的时候,网址被替换为

image

很容易注意到我们这浏览器中,用到了仅仅可以在 docker 网络中用的 hostname。这会导致我们的浏览器无法正确显示。

问题出现的原因

作者的目的是在相应非加密数据的时候,尽量不代理,走原 alist。但是意外导致了这个问题。

是的,确实存在这个问题,(⊙o⊙)…,你那边有什么好的建议和办法吗

全部流量都转发就可以了,反正非加密流量就只转发,不用设计 CPU 密集的计算。应该对性能影响有限。

greatbody commented 6 months ago

或者如果想方便,就明确告知用户,不要配 docker 的 service name,直接配可访问的域名或 IP 即可。