You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Laravel Forge在Nginx后自托管Plausible时出现ERR_TOO_MANY_REDIRECTS错误

问题:自托管Plausible社区版遇到重定向循环与证书验证文件读取错误

环境与操作背景

  • 拥有.app域名,通过Laravel Forge+Hetzner托管主PHP应用
  • 自托管Plausible社区版(plausible-ce),已完成以下操作:
    • 克隆仓库并更新.env文件:添加密钥、设置BASE_URL=sub.domain.app、指定HTTP_PORT=8000、HTTPS_PORT=443
    • 添加compose.override.yml配置:
      services:
        plausible:
          ports:
            - 8000:${HTTP_PORT}
      
    • 安装certbot配置SSL证书,创建Nginx配置文件并建立符号链接,重启Nginx后运行docker compose up -d,容器状态正常

错误现象

  • 访问sub.domain.app出现ERR_TOO_MANY_REDIRECTS错误
  • 容器日志显示证书有效期正常,但存在文件读取错误:
    Request: GET /.well-known/acme-challenge/
    ** (exit) an exception was raised:
        ** (File.Error) could not read file "/var/lib/plausible/site_encrypt/certbot/acme-v02.api.letsencrypt.org/webroot/.well-known/acme-challenge": no such file or directory
            (elixir 1.18.3) lib/file.ex:385: File.read!/1
            (site_encrypt 0.6.0) lib/site_encrypt/acme_challenge.ex:12: SiteEncrypt.AcmeChallenge.call/2
            (plausible 0.0.1) lib/plausible_web/endpoint.ex:1: PlausibleWeb.Endpoint.plug_builder_call/2
            (plausible 0.0.1) lib/plausible_web/endpoint.ex:1: PlausibleWeb.Endpoint."call (overridable 3)"/2
            (plausible 0.0.1) lib/plausible_web/endpoint.ex:1: PlausibleWeb.Endpoint.call/2
            (plug_cowboy 2.7.3) lib/plug/cowboy/handler.ex:11: Plug.Cowboy.Handler.init/2
            (cowboy 2.13.0) /app/deps/cowboy/src/cowboy_handler.erl:37: :cowboy_handler.execute/2
            (cowboy 2.13.0) /app/deps/cowboy/src/cowboy_stream_h.erl:310: :cowboy_stream_h.execute/3
    

现有Nginx配置(/etc/nginx/sites-enabled/plausible)

server {
    listen 80;
    listen [::]:80;
    server_name sub.domain.app;
location /.well-known/acme-challenge/ {
    root /var/lib/plausible/site_encrypt/certbot/acme-v02.api.letsencrypt.org/webroot/;
    try_files $uri =404;
}

    # Redirect all HTTP traffic to HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl ipv6only=on;
    server_name sub.domain.app;

    # SSL configuration (handled by Certbot)
    ssl_certificate /etc/letsencrypt/live/sub.domain.app/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/sub.domain.app/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Main proxy pass for Plausible
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # Websocket support
    location /live/websocket {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

疑问

是否是容器卷无法访问SSL证书及验证文件?或是Plausible容器网络与Forge创建的网络冲突?


解决方案

1. 解决重定向循环问题

重定向循环的核心原因是Plausible自身HTTPS配置与Nginx代理冲突:

  • 你已在Nginx层处理SSL,而Plausible的.env中设置HTTPS_PORT=443会导致内部强制跳转HTTPS,与Nginx代理的HTTP端口形成循环。
  • 修改.env文件:
    # 禁用Plausible内部HTTPS配置,交由Nginx处理
    HTTPS_PORT=
    ENABLE_HTTPS=false
    

2. 解决证书验证文件读取错误

日志错误是因为Plausible的site_encrypt模块尝试自行处理ACME验证,但你已通过主机Certbot配置证书:

  • 禁用Plausible自动证书功能,在.env中添加:
    DISABLE_SITE_ENCRYPT=true
    
  • 修正Nginx的ACME验证路径:当前指向容器内路径,主机无法访问,改为Certbot默认webroot路径(如/var/www/html),并重新生成证书:
    sudo certbot certonly --webroot -w /var/www/html -d sub.domain.app
    
  • 更新Nginx HTTP server块的ACME配置:
    location /.well-known/acme-challenge/ {
        root /var/www/html;
        try_files $uri =404;
    }
    

3. 检查容器权限与网络

  • 确认主机上/var/lib/plausible目录权限,确保容器能正常读写;
  • Laravel Forge默认网络与Plausible的docker bridge网络无冲突,Nginx通过127.0.0.1访问容器端口无需额外配置。

4. 重启服务生效

# 验证并重新加载Nginx配置
sudo nginx -t && sudo systemctl reload nginx

# 重启Plausible容器
docker compose down && docker compose up -d

内容的提问来源于stack exchange,提问作者Stelios Papamichail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:54:51