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

Azure Web App部署至临时槽后Nginx服务消失问题求助

Azure Web App Linux部署后Nginx服务消失导致站点失效的解决方法

问题场景

我需要将一个简单PHP应用部署到Azure Web App的临时槽(staging),生产环境Web App已由他人创建。使用Azure DevOps的AzureWebApp@1任务部署,配置如下:

- task: AzureWebApp@1
  inputs:
    azureSubscription: $(subName)
    appType: 'webAppLinux'
    appName: $(appName)
    package: '$(Build.ArtifactStagingDirectory)/project.zip'
    runtimeStack: 'PHP|8.2'
    startUpCommand: 'service nginx restart'
    slotName: 'staging'
    deployToSlotOrASE: true

部署完成后应用成功上传到临时槽,但Nginx服务消失,站点无法正常运行。问题可通过以下步骤重现:

  • 通过FTP下载生产槽所有代码并提交到代码仓库;
  • 创建staging临时槽并复制生产槽配置,此时站点正常运行,Nginx服务处于活跃状态;
  • 执行上述流水线部署;
  • 部署后站点失效,检查发现Nginx服务不存在。

问题原因

Azure Web App Linux基于容器化运行环境,service nginx restart启动命令违背了其运行机制:

  1. 单进程模型限制:Web App Linux容器采用单进程运行模式,启动命令必须是保持前台运行的进程。service nginx restart是后台执行命令,执行完成后进程直接退出,触发容器重启,导致Nginx服务无法持续运行。
  2. 原生容器流程冲突:指定runtimeStack: 'PHP|8.2'时,Azure会使用官方PHP容器,该容器默认通过Nginx-FPM或Apache运行应用。手动执行service nginx restart会破坏容器原生的启动初始化流程,导致服务异常。

解决方案

1. 移除错误的启动命令

删除startUpCommand: 'service nginx restart'配置,让容器使用默认启动流程运行PHP应用。修改后的任务配置:

- task: AzureWebApp@1
  inputs:
    azureSubscription: $(subName)
    appType: 'webAppLinux'
    appName: $(appName)
    package: '$(Build.ArtifactStagingDirectory)/project.zip'
    runtimeStack: 'PHP|8.2'
    slotName: 'staging'
    deployToSlotOrASE: true

2. 自定义Nginx配置(按需操作)

如果需要自定义Nginx规则,不要通过启动命令修改,可采用以下标准方式:

  • 在项目根目录创建.nginx文件夹,放入自定义的nginx.conf或default.conf文件;
  • 部署时Azure会自动将这些配置文件应用到容器的Nginx环境中,无需手动重启服务。

3. 验证部署结果

重新运行流水线后,通过Azure门户的日志流查看容器启动日志,确认Nginx服务正常初始化;同时访问临时槽的站点URL,验证应用是否正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:35:11