为了得到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证书并正确部署。