如何在自定义域上使用gunicorn通过Nginx服务Flask应用程序?

时间:2019-06-20 22:55:07

标签: nginx dns

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

根据该教程,我有两个A记录-一个空白记录和一个用于域名的www指向我的IP地址。

我有一个flask应用程序,例如,当我使用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;
    }
}

现在这对我来说是一个棘手的问题,因为当我将sweatt.app切换到我的IP时,该IP成功服务了flask应用。但是,当我使用实际的域名-sweatt.app和www.sweatt.app时,它会提供服务:

enter image description here

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

所以我有几个问题。

  1. 为什么这行不通
  2. 我如何使其工作
  3. 如何处理这些A记录?为什么该教程告诉我要制作A记录,而不是像通常那样记录CNAME和别名记录?这是现在服务自定义域的首选方法吗?
  4. 我的Nginx网站可用的conf文件中的第三行应该是什么样的?这是我最终服务的领域吗?还是DNS重定向到的IP?

1 个答案:

答案 0 :(得分:1)

在/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;
    }
}