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

Azure App Service中保留Nginx监听端口,覆盖Kirby默认Nginx配置的方法

Kirby在Azure App Service生成错误URL(HTTP/8080)的解决办法

问题概述

将Kirby部署到Azure App Service(PHP 8.2 Linux容器)后,Kirby生成的URL均带有http://<url>:8080前缀,但实际外部访问地址是https://<url>。原因是Kirby读取了容器内Nginx的监听配置(8080端口、HTTP协议),而忽略了Azure前置代理传递的真实请求信息。

有效解决方案

1. 配置Kirby强制使用正确的URL和协议

在Kirby根目录的config/config.php中添加以下配置,直接指定网站的真实访问地址,并信任Azure的代理头:

return [
    // 直接设置网站的完整URL
    'url' => 'https://your-domain.com',
    // 或者从环境变量读取(更灵活,适合不同环境)
    // 'url' => getenv('APP_URL'),
    'kirby' => [
        'options' => [
            // 信任指定域名的代理请求
            'trustedHosts' => ['your-domain.com'],
            // 信任所有Azure代理请求,也可指定具体IP段
            'trustedProxies' => ['*'],
        ]
    ]
];

2. (可选)通过Azure环境变量动态配置

如果需要在测试/生产等不同环境切换URL,可在Azure App Service的配置 > 应用程序设置中添加环境变量APP_URL,值为你的网站完整HTTPS地址(如https://your-domain.com),再在Kirby的config.php中读取该变量即可。

3. 修改Nginx配置传递真实请求头

在你的容器启动脚本中,修改Nginx的站点配置文件(通常路径为/etc/nginx/sites-available/default),确保将Azure代理的真实请求头传递给PHP-FPM:

server {
    listen 8080;
    root /home/site/wwwroot;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        # 关键:传递真实协议和主机信息给Kirby
        fastcgi_param HTTP_X_FORWARDED_PROTO https;
        fastcgi_param HTTP_HOST your-domain.com;
    }
}

修改完成后,在启动脚本中执行service nginx reload使配置生效。

为什么之前的尝试无效?

  • 重定向方案:Kirby会持续基于自身配置生成错误URL,导致重定向循环,无法从根源解决问题。
  • 监听443端口:Azure的SSL终止在前置代理层,容器不允许直接监听443端口,因此配置后会出现502错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:17:53