【发布时间】:2020-10-02 21:47:24
【问题描述】:
我正在尝试使用 Gunicorn 和 nginx 在 Amazon EC2 实例上提供 Flask 应用程序。因为我不在 Ubuntu 机器上,所以我一直在关注这个 tutorial 并稍作修改。 EC2 实例正在运行 RHEL Fedora。我不确定为什么 nginx 没有将 80 上的流量路由到 Gunicorn。
当我激活我的虚拟环境并启动 Gunicorn 时:
gunicorn --bind 0.0.0.0:5000 --user ec2-user --workers 2 wsgi:app
我可以通过访问http://[mydomain].co:5000 成功访问我的应用程序。但是,当我更改 bind 以收听 sock 文件时:
gunicorn --bind unix:/home/ec2-user/run/myApp.sock --user ec2-user --group ec2-user --workers 2 wsgi:app
并在我的/etc/nginx/sites-available 中添加以下文件:
server {
listen 80;
server_name [mydomain].co www.[mydomain].co;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/home/ec2-user/run/myApp.sock;
}
}
我无法访问我的网站。我最初有一种感觉,问题是显然没有创建 sock 文件,因为当我 ls /home/ec2-user/run/ 时,目录是空的。我尝试让 gunicorn 在 127.0.0.1:5000 上收听并将我的站点 nginx conf 文件更改为 proxy_pass http://127.0.0.1:5000 只是为了看看这是否可行但也没有运气。
我读到this answer 提到更改放置 sock 文件的文件夹的权限,但我认为这不是我的问题。该文件夹的权限是:
drwxrwxr-x 2 ec2-user ec2-user 4096 Jun 13 02:44 /home/ec2-user/run/
FWIW,当我开始将 gunicorn 绑定到 sock 文件时,它启动时没有错误,并说它正在侦听该 sock 文件位置,唯一的问题是那里似乎没有任何文件,所以我很丢失。我感谢任何和所有的帮助或澄清。
编辑 1
我的 EC2 实例的 Linux 发行版是 RHEL Fedora,所以我没有 systemd 或链接教程中包含的任何相关命令。然而,我创建了一个服务文件,但它位于 \etc\init.d\ 下,当我运行它时 \etc\init.d\myservice start\ 输出是:
[2020-06-13 13:31:46 +0000] [24177] [INFO] Starting gunicorn 20.0.4
[2020-06-13 13:31:46 +0000] [24177] [INFO] Listening at: unix:/home/ec2-user/run/reformapp.sock (24177)
[2020-06-13 13:31:46 +0000] [24177] [INFO] Using worker: sync
[2020-06-13 13:31:46 +0000] [24180] [INFO] Booting worker with pid: 24180
[2020-06-13 13:31:46 +0000] [24181] [INFO] Booting worker with pid: 24181
然而,当我退出并运行 ls /home/ec2-user/run/ 时,那里没有文件。
【问题讨论】:
标签: nginx flask amazon-ec2 gunicorn