上游关闭uwsgi,Flask和Nginx堆栈的连接 [英] Upstream closing down connections for uwsgi, Flask and Nginx stack

查看:79
本文介绍了上游关闭uwsgi,Flask和Nginx堆栈的连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Ubuntu Server 18.04上使用Nginx 1.14.0运行基本的Flask应用.

该应用程序本身在测试环境中运行良好,但是我现在尝试使用uwsginginx进行部署,并且只是获得默认的nginx登陆页面或502 Bad Gateway.

我从/etc/nginx/sites-available中删除了nginx默认配置,并从/etc/nginx/sites-enabled中删除了符号链接.

我在/etc/nginx/sites-available中为网站设置了替换项.

要使Nginx重定向到我的网站,我在配置方面缺少什么?

server {
            listen 80;
            server_name www.myserver.com myserver.com;
            root /srv/server/myserver/;
            index index.html;

            location /static {
                alias /srv/server/myserver/static;
            }

            location / {
                include uwsgi_params;
                uwsgi_pass unix:/srv/server/myserver/myserver.sock;
                uwsgi_read_timeout 30;
                uwsgi_connect_timeout 30;
            }

        }

我创建了一个符号链接sudo ln -s /etc/nginx/sites-available/myserver/etc/nginx/sites-enabled

/srv/serverwww-data使用sudo shown -R www-data:www-data /srv/server

拥有

这是myserver.ini

[uwsgi]
http = 0.0.0.0:80
harakiri = 30
module = wsgi:app

master = true
processes = 5

binary-path = /srv/server/myserver/venv/bin/uwsgi
virtualenv = /srv/server/myserver/myserverenv
module = myserver:app

uid = www-data
gid = www-data

socket = myserver.sock
chmod-socket = 0775
vacuum = true

die-on-term = true

myserver.service

[Unit]
Description=uWSGI instance for myserver

[Service]
User=www-data
Group=www-data
After=network.target
WorkingDirectory=/srv/server/myserver
Environment="PATH=/srv/server/myserver/myserverenv/bin"
ExecStart=/srv/server/myserver/myserverenv/bin/uwsgi --ini myserver.ini

[Install]
WantedBy=multi-user.target

因为这是在我的本地计算机上,所以我在测试中添加了以下内容到/etc/hosts中,以便在浏览器中通过FQDN进行访问,并且允许使用ufwhttp来使用. >

127.0.0.1 www.myserver.com myserver.com

我已经通过sudo systemctl restart nginx

停止,启动,重新启动等

来自/etc/nginx/error.log

的错误日志

2020/04/17 15:42:24 [error] 26747#26747: *1 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: www.myserver.com, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/srv/server/myserver/myserver.sock:", host: "www.myserver.com"

我尝试重新启动uwsgi并以www-data或通过sudo运行时,出现以下错误:

3therk1ll@3therk1ll:/var/log/nginx$ sudo -u www-data systemctl status uwsgi
● uwsgi.service - uWSGI instance for myserver
   Loaded: loaded (/etc/systemd/system/uwsgi.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2020-04-17 16:30:42 BST; 5s ago
  Process: 27147 ExecStart=/srv/server/myserver/myserverenv/bin/uwsgi --ini myserver.ini (code=exited, status=1/FAILURE)
 Main PID: 27147 (code=exited, status=1/FAILURE)

3therk1ll@3therk1ll:/var/log/nginx$ sudo systemctl status uwsgi
● uwsgi.service - uWSGI instance for myserver
   Loaded: loaded (/etc/systemd/system/uwsgi.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2020-04-17 16:30:42 BST; 1min 10s ago
  Process: 27147 ExecStart=/srv/server/myserver/myserverenv/bin/uwsgi --ini myserver.ini (code=exited, status=1/FAILURE)
 Main PID: 27147 (code=exited, status=1/FAILURE)

Apr 17 16:30:42 3therk1ll uwsgi[27147]: dropping root privileges as early as possible
Apr 17 16:30:42 3therk1ll uwsgi[27147]: your processes number limit is 7645
Apr 17 16:30:42 3therk1ll uwsgi[27147]: your memory page size is 4096 bytes
Apr 17 16:30:42 3therk1ll uwsgi[27147]: detected max file descriptor number: 1024
Apr 17 16:30:42 3therk1ll uwsgi[27147]: lock engine: pthread robust mutexes
Apr 17 16:30:42 3therk1ll uwsgi[27147]: thunder lock: disabled (you can enable it with --thunder-lock)
Apr 17 16:30:42 3therk1ll uwsgi[27147]: error removing unix socket, unlink(): Permission denied [core/socket.c line 198]
Apr 17 16:30:42 3therk1ll uwsgi[27147]: bind(): Address already in use [core/socket.c line 230]
Apr 17 16:30:42 3therk1ll systemd[1]: uwsgi.service: Main process exited, code=exited, status=1/FAILURE
Apr 17 16:30:42 3therk1ll systemd[1]: uwsgi.service: Failed with result 'exit-code'.

解决方案

nginx和uwsgi都试图绑定端口80,因此请尝试将uwsgi的端口更改为其他值,或者只是从uwsgi配置中删除http = 0.0.0.0:80行,因为nginx通过unix套接字与uwsgi对话

I am trying to run a basic Flask app using Nginx 1.14.0 on Ubuntu Server 18.04.

The app itself runs fine in test environment but I am trying to deploy it now with uwsgi and nginx and am just getting either the default nginx landing page or a 502 Bad Gateway.

I removed the nginx default config from /etc/nginx/sites-available and deleted the symlink from /etc/nginx/sites-enabled.

I set replacements for my site as below in /etc/nginx/sites-available.

What am I missing in terms of config to make nginx redirect to my site?

server {
            listen 80;
            server_name www.myserver.com myserver.com;
            root /srv/server/myserver/;
            index index.html;

            location /static {
                alias /srv/server/myserver/static;
            }

            location / {
                include uwsgi_params;
                uwsgi_pass unix:/srv/server/myserver/myserver.sock;
                uwsgi_read_timeout 30;
                uwsgi_connect_timeout 30;
            }

        }

I created a symlink sudo ln -s /etc/nginx/sites-available/myserver/etc/nginx/sites-enabled

/srv/server is owned by www-data using sudo shown -R www-data:www-data /srv/server

and this is is myserver.ini

[uwsgi]
http = 0.0.0.0:80
harakiri = 30
module = wsgi:app

master = true
processes = 5

binary-path = /srv/server/myserver/venv/bin/uwsgi
virtualenv = /srv/server/myserver/myserverenv
module = myserver:app

uid = www-data
gid = www-data

socket = myserver.sock
chmod-socket = 0775
vacuum = true

die-on-term = true

myserver.service

[Unit]
Description=uWSGI instance for myserver

[Service]
User=www-data
Group=www-data
After=network.target
WorkingDirectory=/srv/server/myserver
Environment="PATH=/srv/server/myserver/myserverenv/bin"
ExecStart=/srv/server/myserver/myserverenv/bin/uwsgi --ini myserver.ini

[Install]
WantedBy=multi-user.target

As this is on my local machine I have added the below to /etc/hosts in order to access via FQDN in the browser while I test and I have allowed for http and https with ufw.

127.0.0.1 www.myserver.com myserver.com

I have stopped, started, restarted etc via sudo systemctl restart nginx

Error logs from /etc/nginx/error.log

2020/04/17 15:42:24 [error] 26747#26747: *1 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: www.myserver.com, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/srv/server/myserver/myserver.sock:", host: "www.myserver.com"

EDIT:

I tried restarting uwsgi and got teh below error when running either as www-data and via sudo:

3therk1ll@3therk1ll:/var/log/nginx$ sudo -u www-data systemctl status uwsgi
● uwsgi.service - uWSGI instance for myserver
   Loaded: loaded (/etc/systemd/system/uwsgi.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2020-04-17 16:30:42 BST; 5s ago
  Process: 27147 ExecStart=/srv/server/myserver/myserverenv/bin/uwsgi --ini myserver.ini (code=exited, status=1/FAILURE)
 Main PID: 27147 (code=exited, status=1/FAILURE)

3therk1ll@3therk1ll:/var/log/nginx$ sudo systemctl status uwsgi
● uwsgi.service - uWSGI instance for myserver
   Loaded: loaded (/etc/systemd/system/uwsgi.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2020-04-17 16:30:42 BST; 1min 10s ago
  Process: 27147 ExecStart=/srv/server/myserver/myserverenv/bin/uwsgi --ini myserver.ini (code=exited, status=1/FAILURE)
 Main PID: 27147 (code=exited, status=1/FAILURE)

Apr 17 16:30:42 3therk1ll uwsgi[27147]: dropping root privileges as early as possible
Apr 17 16:30:42 3therk1ll uwsgi[27147]: your processes number limit is 7645
Apr 17 16:30:42 3therk1ll uwsgi[27147]: your memory page size is 4096 bytes
Apr 17 16:30:42 3therk1ll uwsgi[27147]: detected max file descriptor number: 1024
Apr 17 16:30:42 3therk1ll uwsgi[27147]: lock engine: pthread robust mutexes
Apr 17 16:30:42 3therk1ll uwsgi[27147]: thunder lock: disabled (you can enable it with --thunder-lock)
Apr 17 16:30:42 3therk1ll uwsgi[27147]: error removing unix socket, unlink(): Permission denied [core/socket.c line 198]
Apr 17 16:30:42 3therk1ll uwsgi[27147]: bind(): Address already in use [core/socket.c line 230]
Apr 17 16:30:42 3therk1ll systemd[1]: uwsgi.service: Main process exited, code=exited, status=1/FAILURE
Apr 17 16:30:42 3therk1ll systemd[1]: uwsgi.service: Failed with result 'exit-code'.

解决方案

Both nginx and uwsgi try to bind port 80, so try to change uwsgi's port to something different value or just delete the http = 0.0.0.0:80 line from uwsgi config, since nginx talking with uwsgi by unix socket

这篇关于上游关闭uwsgi,Flask和Nginx堆栈的连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆