爲了得到HTTPS/SSL爲瓶工作,使瓶2個端口上運行,你首先要在這裏遵循的提示:Https with Http in Flask Python
然而,這隻會設置你的瓶代碼運行與SSL。它不會在部署時實際啓動Flask進程。爲此,您需要編輯/etc/httpd/conf.d/wsgi.conf腳本以啓動wsgi守護程序的第二個實例。
您的wsgi.conf的默認腳本應該包含一個端口80的部分。您想複製此部分,添加您的SSL參數,然後編輯wsgi命令以擁有不同的變量名稱,否則Apache會在您投訴時發射。我有以下補充:
<VirtualHost *:443>
ServerName <MY SERVER NAME>
ServerAlias <MY SERVER NAME>
SSLEngine on
SSLCertificateFile <Server PEM file>
SSLCertificateKeyFile <Private Key PEM file>
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
SSLHonorCipherOrder on
Alias /static/ /opt/python/current/app/static/
<Directory /opt/python/current/app/static/>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias//opt/python/current/app/application.py
<Directory /opt/python/current/app/>
Require all granted
</Directory>
WSGIDaemonProcess wsgi2 processes=1 threads=15 display-name=%{GROUP} \
python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python3.4/site-packages:/opt/python/run/venv/lib/python3.4/site-packages user=wsgi group=wsgi \
home=/opt/python/current/app
WSGIProcessGroup wsgi2
</VirtualHost>
請注意,您還可以在這個時候,除去WSGI,而是編輯端口80節有一個重定向到443,因爲這裏說明: Redirect to Https using Elastic Beanstalk ELB和Redirect HTTP to HTTPS Apache2
測試這種配置通過重新使用
sudo service httpd restart
然後Apache服務器啓動您的開發服務器
python application.py
或
sudo /home/ec2-user/anaconda3/bin/python application.py
之後,應看到瓶上的兩個端口上運行的!
但是,請注意,如果您在EC2實例上運行此代碼,則您的代碼可能已經部署並正在運行,因此您的端口可能正在使用中,您將看到「OSError:[Errno 98] Address already in use 「
但是你還沒有完成......哦,不,還有一個問題......
我發現從https://forums.aws.amazon.com/thread.jspa?threadID=163369這實際上如下(見的問題#1 what is difference between commands and container commands in elasticbean talk,Configure apache on elastic beanstalk,wsgi user permissions on elastic beanstalk)...
通過CodeStar和彈性青苗顯然EC2應用並覆蓋你/etc/httpd/conf.d/ wsgi.conf文件。爲了防止/更正此問題,您需要編輯.ebextensions配置腳本以使用您自己的wsgi.conf文件。請注意,這有一個缺點,那就是不跟蹤亞馬遜可能對其默認腳本進行的更新。
首先,我複製了我想保留在.ebextensions目錄下的wsgi.conf文件。
接下來,我修改了.ebextensions/sshd.config文件(唯一一個我有在該目錄中),以添加以下內容:
files:
"/etc/httpd/conf.d/wsgi.conf" :
mode: "000777"
owner: root
group: root
content: |
<IfModule !wsgi_module>
LoadModule wsgi_module modules/mod_wsgi.so
</IfModule>
. . .
<VirtualHost *:443>
. . .
</VirtualHost>
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
然後,在經過「文件:」一節中,我添加以下到配置結束:
container_commands:
02_update_wsgi:
command: >
cp .ebextensions/wsgi.conf ../wsgi.conf
請注意,上述使用CONTAINER_COMMANDS,而不是命令。
關於這項技術的最大好處是,彈性魔豆自動運行的Apache服務器重新啓動命令,所以在部署之後,你不需要手動複製任何東西,或重新運行「命令服務的httpd重新啓動」
繼上述步驟將使您的Flask在HTTPS上運行SSL證書並正確部署。