首页 > 解决方案 > 如何在自定义域上使用 gunicorn 通过 nginx 提供烧瓶应用程序?

问题描述

我尝试使用以下说明通过 gunicorn 在 nginx 上运行烧瓶应用程序:https ://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu -18-04

根据该教程,我有两条 A 记录——一条空白一条,一条用于我的域上的 www,指向我的 IP 地址。

我有一个烧瓶应用程序,例如当我运行它时gunicorn --bind 0.0.0.0:5000 wsgi:app,我可以在 :5000 上看到它。

现在,当我尝试在我自己的自定义域上使用 gunicorn 作为服务进行设置时,问题就来了。

这是我的 /etc/systemd/system/myproject.service:

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=/srv/myproject
Environment="PATH=/myproject/myprojectenv/bin"
ExecStart=/srv/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

我开始sudo systemctl start myproject

然后在/etc/nginx/sites-available/myproject

server {
    listen 80;
    server_name sweatt.app www.sweatt.app;

    location / {
        include proxy_params;
        proxy_pass http://unix:/srv/myproject/myproject.sock;
    }
}

现在这个对我来说是一个棘手的问题,因为当我将汗水.app 切换到我的 ip 时,该 ip 成功地为烧瓶应用程序提供服务。但是,当我使用实际的域——sweatt.app 和 www.sweatt.app 时,它的作用是:

在此处输入图像描述

当我尝试旧 ip 时,它实际上给出了“欢迎使用 nginx”登录页面,就好像该 ip 是允许的,但它只是不通过 gunicorn 为烧瓶应用程序提供服务。

所以我有几个问题。

  1. 为什么这不起作用
  2. 我如何让它工作
  3. 那些A记录是怎么回事?为什么该教程会告诉我制作 A 记录而不是像我通常那样制作 CNAME 和别名记录?这是现在为自定义域提供服务的首选方式吗?
  4. 我的 nginx 站点可用 conf 文件中的第 3 行应该是什么样的?这是我最终服务的域吗?还是 DNS 重定向到的 ip?

标签: nginxdns

解决方案


在 /etc/nginx/conf.d/ 创建一个 .conf 文件,内容如下。

server {
    listen 80;
    server_name www.yourdomain.com;

    access_log /..../access.log;
    error_log /..../error.log;

    location / {
        proxy_pass         http://127.0.0.1:5000/;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

推荐阅读