Halo利用iframe引用实现隐性URL解析

使用Halo的朋友们可能会因为各种原因需要使用Cloudflare等来实现链接的隐性转发,避免记录端口而使用域名直接访问。在用高版本进行部署的时候halo默认不支持外源网站使用Iframe引用你的博客。

这个时候你的隐性链接访问halo会直接显示被转发的链接已拒绝访问。

通过Github社区了解到,这个功能如果一切正常应该会放在2.4版本的halo中去实现,其实早前的halo版本是支持这个功能的,但开发者们基于安全的考虑作了调整。

目前如果我们要实现这个功能的话,可以在halo的配置文件中去增加一段代码,以开启这个功能。

代码如下:

security:
frame-options:
disabled: true
mode: sameorigin

这段代码需要增加到application.yaml文件中,在halo: 这段代码行之后。

如果你使用docker desktop进行安装,以下是增加代码的步骤:

首先,在Windows中按住 图标键 +x 唤出菜单,点击如下选项:

然后依次输入如下代码:

docker ps -a ,查看所有的容器,找到halo的容器名称,默认应该为halo。

docker exec -it halo ls /usr/local/   检查对应的容器文件结构

docker exec -it halo find / -name "application.yaml"  查找 application.yaml 文件

docker cp :/application/BOOT-INF/classes/application.yaml .   复制文件到宿主机

这时,这个yaml文件应该位于你的C盘当前用户文件夹下,例如C:\Users\example

你需要打开文件管理器,找到这个文件,使用笔记本打开并编辑里面的内容,增加上面的代码,然后保存。

这个代码粘贴的位置应该在分割线中间位置(注意不要粘贴这个分割线,仅为示意):

  cache:
    type: caffeine
    caffeine:
      spec: expireAfterAccess=1h, maximumSize=10000
halo:
  work-dir: ${user.home}/.halo2
  attachment:
    resource-mappings:
      - pathPattern: /upload/**
        locations:
          - migrate-from-1.x
————————————————————————————————————————————————————————————————————————————  
security:
    frame-options:
      disabled: true
      mode: sameorigin
————————————————————————————————————————————————————————————————————————————
springdoc:
  api-docs:
    enabled: false
  writer-with-order-by-keys: true
logging:
  file:
    name: ${halo.work-dir}/logs/halo.log
  logback:
    rollingpolicy:
      max-file-size: 10MB
      total-size-cap: 1GB
      max-history: 0

粘贴完成后,依次运行如下代码:

docker cp ./application.yaml halo:/application/BOOT-INF/classes/    将修改后的文件复制回容器
docker restart halo  重启容器

静待容器重启成功,然后通过隐性链接检查,你的博客应该可以直接通过域名访问了,而不是显示域名拒绝了访问。



——————————
2024年12月6日 更新:

如果以上方法增加后无效,需要同步在Nginx配置文件中的halo配置中增加 add_header Content-Security-Policy "frame-ancestors 'self' xxx;"代码,配置如下:

# 为 xxxxx 配置反向代理   halo
    server {
        listen       xxxx;
        server_name  xxxx;

        location / {
            proxy_pass http://localhost:8090;
            proxy_set_header Host $host;
            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;
            add_header Content-Security-Policy "frame-ancestors 'self' https://nowy.cn;";#此处链接为你实际想用来访问的链接。
        }
    }