如何通过EC2 Windows实例PowerShell用户数据安装运行最新Apache与PHP服务器
在EC2 Windows实例的UserData中安装最新版Apache和PHP的PowerShell脚本
以下是补充到你现有UserData中的PowerShell代码,实现自动安装最新版Apache和PHP并完成基础配置:
# 下载并安装最新版Apache(请替换为Apache官方推荐的Windows构建包下载地址) Invoke-WebRequest -URI "【替换为Apache Windows版最新压缩包下载地址】" -OutFile "c:\Apache24.zip" Expand-Archive -Path "c:\Apache24.zip" -DestinationPath "c:\" -Force # 安装Apache服务 & "C:\Apache24\bin\httpd.exe" -k install # 下载并安装最新版PHP(请替换为PHP官方最新非线程安全版(NTS)压缩包下载地址) Invoke-WebRequest -URI "【替换为PHP Windows NTS版最新压缩包下载地址】" -OutFile "c:\PHP.zip" Expand-Archive -Path "c:\PHP.zip" -DestinationPath "c:\PHP" -Force # 复制并配置php.ini Copy-Item "c:\PHP\php.ini-development" "c:\PHP\php.ini" -Force # 启用必要扩展,比如mysqli、curl等(按需调整) (Get-Content "c:\PHP\php.ini") -replace ';extension=mysqli', 'extension=mysqli' -replace ';extension=curl', 'extension=curl' | Set-Content "c:\PHP\php.ini" # 配置Apache支持PHP Add-Content "c:\Apache24\conf\httpd.conf" @" LoadModule fcgid_module modules/mod_fcgid.so FcgidInitialEnv PHPRC "c:/PHP" AddHandler fcgid-script .php FcgidWrapper "c:/PHP/php-cgi.exe" .php DirectoryIndex index.php index.html "@ # 添加环境变量,让系统识别Apache和PHP命令 $envPath = [Environment]::GetEnvironmentVariable("Path", "Machine") if (-not $envPath.Contains("C:\Apache24\bin")) { [Environment]::SetEnvironmentVariable("Path", "$envPath;C:\Apache24\bin;C:\PHP", "Machine") } # 启动Apache服务并设置开机自启 Start-Service Apache2.4 Set-Service Apache2.4 -StartupType Automatic
整合后的完整UserData示例
将上述代码插入到你原有<powershell>标签内的New-Item -Path "c:\" -Name "Apache24" -Type "directory"之后:
UserData: !Base64 'Fn::Join': - |+ <powershell> Install-WindowsFeature -name Web-Server -IncludeManagementTools Install-WindowsFeature Web-Asp-Net45 Add-WindowsFeature Web-Http-Redirect Add-WindowsFeature Web-Windows-Auth Import-Module AWSPowerShell New-Item -Path "c:\codedeploy" -ItemType "directory" -Force Invoke-WebRequest -URI https://aws-codedeploy-eu-central-1.s3.amazonaws.com/latest/codedeploy-agent.msi -OutFile c:\codedeploy\codedeploy-agent.msi c:\codedeploy\codedeploy-agent.msi /quiet /l c:\codedeploy\host-agent-install-log.txt New-Item -Path "c:\" -Name "Apache24" -Type "directory" # 新增的Apache和PHP安装配置脚本 Invoke-WebRequest -URI "【替换为Apache Windows版最新压缩包下载地址】" -OutFile "c:\Apache24.zip" Expand-Archive -Path "c:\Apache24.zip" -DestinationPath "c:\" -Force & "C:\Apache24\bin\httpd.exe" -k install Invoke-WebRequest -URI "【替换为PHP Windows NTS版最新压缩包下载地址】" -OutFile "c:\PHP.zip" Expand-Archive -Path "c:\PHP.zip" -DestinationPath "c:\PHP" -Force Copy-Item "c:\PHP\php.ini-development" "c:\PHP\php.ini" -Force (Get-Content "c:\PHP\php.ini") -replace ';extension=mysqli', 'extension=mysqli' -replace ';extension=curl', 'extension=curl' | Set-Content "c:\PHP\php.ini" Add-Content "c:\Apache24\conf\httpd.conf" @" LoadModule fcgid_module modules/mod_fcgid.so FcgidInitialEnv PHPRC "c:/PHP" AddHandler fcgid-script .php FcgidWrapper "c:/PHP/php-cgi.exe" .php DirectoryIndex index.php index.html "@ $envPath = [Environment]::GetEnvironmentVariable("Path", "Machine") if (-not $envPath.Contains("C:\Apache24\bin")) { [Environment]::SetEnvironmentVariable("Path", "$envPath;C:\Apache24\bin;C:\PHP", "Machine") } Start-Service Apache2.4 Set-Service Apache2.4 -StartupType Automatic </powershell>
关键说明
- Apache选择Windows专用构建包,确保包含
mod_fcgid模块以支持PHP - PHP需选用非线程安全版(NTS),配合
mod_fcgid实现稳定运行 - 可根据业务需求修改
php.ini中的扩展启用项,或调整Apache的站点配置 - 确保EC2实例具备访问外部下载源的网络权限(安全组、NACL规则放行)
内容的提问来源于stack exchange,提问作者Sujal
相关产品推荐
相关产品推荐

