首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接()失败(111:连接被拒绝)当连接到上游时) NGINX,Gunicorn在运行Flask时

连接()失败(111:连接被拒绝)当连接到上游时) NGINX,Gunicorn在运行Flask时
EN

Stack Overflow用户
提问于 2022-09-13 04:54:53
回答 1查看 840关注 0票数 1

我试图在Amazon-Linux-2上的公共Amazon-Linux-2实例上使用aws-cdk托管一个烧瓶应用程序。

我已经为定制的健康检查端点/healthcheck配置了nginx,我在那里创建了python并安装了gunicorn,并在python中运行了gunicorn --bind 127.0.0.1:5000 wsgi:app,并且能够使用POSTMAN访问端点('/‘for POST方法)。但是,当我试图创建一个myproject.service文件时,问题就出现了。myproject.sock文件是创建的,它拥有所有必要的权限,chmod 755 /home/ec2-user/myprojectsystemctl status myproject也说正在运行,但是现在我无法使用POSTMAN访问POST请求。

我的reverse.proxy文件如下-

配置文件/etc/nginx/sites启用/反向-proxy.conf:

代码语言:javascript
复制
server {
        listen 80;
        listen [::]:80;

        access_log /var/log/nginx/reverse-access.log;
        error_log /var/log/nginx/reverse-error.log;

        location /healthcheck {
                limit_except GET {
                        deny all;
                }
                access_log off;
                return 200 "healthy\n";
        }

        location / {
                    error_page 405 =200 $uri;
                    proxy_pass http://127.0.0.1:5000;
  }
}

其中“/”用于服务来自我的flaskapp.py文件的post请求

这就是myproject.service文件的样子

代码语言:javascript
复制
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=ec2-user
WorkingDirectory=/home/ec2-user/myproject
Environment="PATH=/home/ec2-user/myproject/myprojectenv/bin"
ExecStart=/home/ec2-user/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

sock文件也已创建并成功运行,但无法命中POST。

这就是我的flaskapp.py的样子

代码语言:javascript
复制
from flask import Flask, request


app = Flask(__name__)

@app.route('/', methods=['POST'])
def handler():
    return f''' Hello {request.get_json()['name']}'''

这就是我的wsgi.py的样子

代码语言:javascript
复制
from myproject import app

if __name__ == "__main__":
    app.run(host='127.0.0.1')

当我运行gunicorn --bind 127.0.0.1:5000 wsgi:app时,我可以点击POST请求,但在退出gunicorn并尝试创建一个myproject.service时,我似乎不能点击POST请求,这是无法理解的。/healthcheck工作得很好!

请提供洞察

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-21 15:44:52

您的NGINX配置指向正在侦听本地主机端口5000的服务器,但是您的服务正在侦听unix myproject.sock。因此,在运行服务时,NGINX无法找到服务器。

尝试将NGINX配置设置为如下所示:

代码语言:javascript
复制
server {
   ...
   location / {
      ...
      proxy_pass http://unix:/path/to/myproject.sock;
   }
}

gunicorn正在侦听unix套接字(例如在您的服务中)时,这应该可以工作。

您需要确保NGINX可以读写unix套接字。运行stat /path/to/myproject.sock并确保NGINX的用户(很可能是nginx)拥有足够的权限。

考虑在这里采用对接方式:只为myproject.sock和应该连接到它的客户端创建一个组(即:nginx用户等等)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73697686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档