這對我來說是一個特殊的問題,在我的ASP.NET MVC項目中有各種OAuth提供者。基本上,任何應該使用https的內容在Elastic Beanstalk下都被破壞了。我試圖通過尋找X-Forwarded-Proto HTTP頭來編碼,但它非常討厭。所以我真的希望SSL直通我的EC2實例。
它可能花了我3小時才知道如何做到這一點,而不使用AMI,所以希望這可以幫助某人。
我以前嘗試過定製AMI方法和,雖然它的工作原理,它提出了兩個問題:
- 我需要修補和維護我自己的AMI這是費時。如果我使用標準圖像,則可以在更新的圖像可用時重建環境。
- 我無法源代碼控制我的配置設置 - 它們只是嵌入在雲中某個不透明的AMI中。
我改編了這個從this post。
首先,您需要將一個目錄添加到您的Visual Studio Web項目的根目錄中,名爲:.ebextensions
。
它裏面,創建一個名爲environment.config
的文本文件 - 我們要在這裏使用YAML,所以不要在Visual Studio中的情況下,它認爲它是一個應用程序配置文件,並添加標籤編輯 - YAML是空白敏感。該文件的語法記錄爲on Amazon。
我的文件有一堆的調諧IIS其他設置,但相關有點類似於:
container_commands:
site_add_ssl_binding:
command: PowerShell -ExecutionPolicy Bypass -File "C:\\inetpub\\wwwroot\\.ebextensions\\ssl.ps1"
這將執行名爲ssl.ps1
定製的PowerShell腳本。因此,讓我們創建一個在.ebextensions
目錄內:
# If there is no existing SSL binding
if (-not(Get-WebBinding "Default Web Site" -Port 443)) {
# Import the .pfx file into the certificate store
$securepwd = ConvertTo-SecureString -String "YOUR_PFX_PASSWORD_HERE" -Force -AsPlainText
$cert = Import-PfxCertificate -FilePath C:\inetpub\wwwroot\.ebextensions\my-certificate.pfx cert:\localMachine\my -Password $securepwd
# Create site binding in IIS
New-WebBinding -Name "Default Web Site" -IP "*" -Port 443 -Protocol https
New-Item IIS:SslBindings\0.0.0.0!443 -value $cert
}
執行時,該命令將導入一個.pfx文件導入證書存儲區,然後創建SSL在您的網站的端口443綁定。
隨着我引用的原始代碼,我遇到了各種各樣的問題,包括字符編碼不良的問題。因此,如果您複製/粘貼此示例並且它不起作用,則可以通過遠程登錄到EC2實例,打開命令提示符並直接執行命令來測試它:PowerShell -ExecutionPolicy Bypass -File "C:\inetpub\wwwroot\.ebextensions\ssl.ps1"
您需要添加.pfx文件也到.ebextensions
目錄。在Visual Studio中,確保所有文件都包含在項目中,並且具有內容構建操作(提示在解決方案資源管理器中選擇該文件,然後按F4鍵)。該解決方案資源管理器應該是這樣的:
- 網絡project.csproj
- .ebextensions
- environment.config
- 我-certificate.pfx
- ssl.ps1
- ...
然後使用AWS Toolkit for Visual Studio,右鍵單擊您的項目並選擇Publish to AWS
並按照提示進行操作。這會將您的部署包上傳到您的Elastic Beanstalk環境,並進行安裝。您的定製將在部署期間執行,或者每當調配一個新的EC2實例時執行。
成功執行後,.ebextensions
目錄被刪除。
如果您不想在Visual Studio項目中包含.pfx文件,original example將使用PowerShell從S3實例下載.pfx文件。您還可以通過引用Elastic Beanstalk環境變量來避免將密碼嵌入到.ps1中。
得到這個工作結束到最後,你還需要:
- 配置您的負載平衡器轉發您的EC2實例443通信端口443 - 默認交換機端口80。
- 將安全組從負載均衡器中配置爲允許443個通信。
- 將安全組配置到EC2實例中以允許443個通信。