前言:HTTPS化(使用Django+Gunicorn+Nginx+EC2)〜第一部分:创建负载均衡器
概述
通过将ACM发行的SSL证书应用于ELB,可以将从互联网到ELB的流量转换为HTTPS通信。
HTTPS通信是通过SSL/TLS协议加密的HTTP通信,有助于防止个人信息等敏感信息的窃听和篡改。
以下是变更前和变更后的配置图像。

进行HTTPS化需要相当一些步骤,如果出错了就不知道该如何修复了。
请在进行的过程中,确认已经完成了哪些步骤。
首先,我们将逐步进行负载均衡器的创建。
※ 假设在EC2实例上已经运行了Django应用程序。
在此之后,
·虚拟环境名称:venv_private_diary
·项目名称:private_diary
·EC2用户名称:app_admin
所以,请将与您自己的环境不同的部分进行替换后执行。
创建负载均衡器
在AWS管理控制台上,转到EC2仪表板,并从左侧菜单中选择”负载均衡器”。

点击”创建负载均衡器”。

点击「创建」按钮来创建应用程序负载均衡器。

4. 在基本配置中的”负载均衡器名称”中输入负载均衡器的名称。

在网络映射中选择EC2实例的VPC为Network mapping的VPC。

6. 在网络映射的映射中,从每个可用区选择公共子网。

7. 点击安全组的“创建新安全组”链接。

8. 创建安全组
8-1. 输入基本详细信息,包括安全组名称和描述。

选择EC2实例的VPC时,请在基本详细信息中选择VPC。

在入站规则中,将 HTTP: 80 进行了设置。

点击“创建安全组”。

回到负载均衡器创建页面,并在安全组中选择创建的安全组。

10. 删除Security groups中的Default。只保留已创建的安全组。

11. 点击“Listeners and routing”中的“创建目标组”链接。

12. 创建目标群体
选择Instances。

输入目标群组名称。

选择Protocol为HTTP,并将Port设置为10080。在VPC选项中选择EC2实例的VPC。

12-4. 其他项目保持默认设置,点击“下一步”。

12-5. 在注册目标界面上,选择要操作的EC2实例,然后点击“包含在下面作为待处理”。

12-6. 确保在Targets清单中已经添加了指定的EC2实例,然后点击”创建目标组”。

回到负载均衡器创建界面,选择刚刚创建的目标组后进行更新。

14. 其他选项保持默认状态,点击“创建负载均衡器”。

15. 等待加载平衡器的状态变为活动状态。


16. 在AWS 管理控制台上,切换到 EC2 仪表板后,在列表中选中自己的 EC2 实例的复选框,然后打开安全选项卡,点击安全组链接。

点击编辑「入境规则」。

点击”添加规则”,然后按照以下方式选择端口:10080,源:自定义+创建的ALB的安全组,最后点击”保存规则”。可以删除原有的http和https规则。

更改环境变量的设定
使用Putty连接到EC2实例的SSH。
使用vi编辑器编辑。bash_profile文件并修改环境变量ALLOWED_HOSTS。
# .bash_profileをviエディタで開く
sudo vi ~/.bash_profile
# 変更:ALLOWED_HOSTSに*(アスタリスク)を設定する
export ALLOWED_HOSTS='*'
3. 即时反映更改。
source ~/.bash_profile
请确认环境变量ALLOWED_HOSTS是否已被修改。
env | grep ALLOWED_HOSTS
5. 为了应用修改后的环境变量,请重新启动Gunicorn。
# gunicornプロセスの削除
pkill gunicorn
cd ~/venv_private_diary/private_diary/
# gunicorn起動
gunicorn --bind 127.0.0.1:8000 private_diary.wsgi -D
# gunicornプロセス確認
ps -ef|grep gunicorn
更改Nginx配置文件
创建nginx.conf的备份。
# バックアップの作成
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf_bk
备份将以“nginx.conf_bk”的名称创建。
使用vi编辑器编辑nginx.conf文件,并将listen端口更改为10080。
# nginx.confを修正
sudo vi /etc/nginx/nginx.conf
nginx.conf文件的修改如下:
:(省略)
server {
listen 10080; # 80 -> 10080 に変更
listen [::]:10080; # 80 -> 10080 に変更
:(省略)
3. 检查nginx.conf文件的语法
sudo nginx -t
#下記のように出力されたらOK
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果出现错误,请根据错误内容修改nginx.conf文件。
4. 重新启动Nginx
# nginx再起動
sudo systemctl restart nginx.service
# 状態の確認
sudo systemctl status nginx.service
通过负载均衡器进行连接验证
2. 在AWS管理控制台中,切换到EC2仪表盘,然后从左侧菜单选择”目标组”。

2. 点击您自己创建的目标群体的名称链接。

确认健康状态为健康。如果为不健康,请检查设置是否有问题。在继续之前,请先检查安全组等设置。

2. 移动到EC2仪表板,从左侧菜单中选择“负载均衡器”。

3. 复制自行创建的负载均衡器的DNS名称。

使用Chrome或其他浏览器,将复制的DNS名称输入并访问。如果屏幕可以显示内容,那就没问题。

如果页面无法显示,请使用Putty连接到EC2实例,并查看访问日志。
# アクセスログ確認
sudo tail -f /var/log/nginx/access.log
10.0.17.60 - - [21/Nov/2022:09:52:54 +0900] "GET / HTTP/1.1" 200 3520 "-" "ELB-HealthChecker/2.0" "-"
如果ELB的HealthChecker记录传输到了日志中,就可以确认从负载均衡器连接到Nginx成功。如果连接不成功,请检查安全组等配置。
如果日志返回类似于”GET / HTTP/1.1″ 500的错误代码,表示出现错误,请从以下命令中查看Django日志,并根据错误内容进行修正。
常见的原因包括Gunicorn未启动、环境变量错误等。
# Djangoログ確認
sudo tail -f ~/venv_private_diary/private_diary/logs/django.log