百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux 上利用Nginx代理uWSGI处理Flask web应用

ahcoder 2025-06-10 12:24 4 浏览

一、介绍

最近开发要用一个测试环境,是这样的Nginx+uwsgi+flask 的一个结构。下面是一些记录,在Centos 系统上使用Flask 架构部署一个简单的Python应用。然后使用Nginx作为前端反向代理,设置uWSGI应用网关处理web应用程序。

二、条件

1) 环境要求

  • Server OS:最小化安装 Centos 6.8
  • Nginx :反向代理
  • Python2.6~2.7:开发语言
  • Flask/uWSGI:框架
  • Pip:python包管理工具
  • iptables&selinux:开放用到的端口,关闭selinux。

2) 安装必备的开发工具以及环境

更新系统:

[root@hcloud ~]# yum update -y
[root@hcloud ~]# yum groupinstall "Development tools" -y

更新完成后,记得重启系统,然后安装工具:

[root@hcloud ~]# yum install wget vim telnet python-devel zlib-devel openssl-devel bzip-devel -y

[root@hcloud ~]# yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel python-devel libxml2  libxml2-devel  python-setuptools  zlib-devel wget openssl-devel pcre pcre-devel sudo gcc make autoconf automake
 -y

3) 安装python 包管理工具-pip

[root@hcloud ~]# wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py

或者参考此网站

4) 安装uWSGI与Flask

下载软件

[root@hcloud ~]# mkdir soft
[root@hcloud ~]# cd soft
[root@hcloud soft]# wget https://pypi.python.org/packages/0c/1c/44849e293e367a157f1ad863cee02b4b865840543254d8fae3ecdebdbdb9/uwsgi-2.0.12.tar.gz
[root@hcloud soft]# wget https://pypi.python.org/packages/db/9c/149ba60c47d107f85fe52564133348458f093dd5e6b57a5b60ab9ac517bb/Flask-0.10.1.tar.gz

如果下载该软件比较慢,可以在/etc/reslov.conf dns中添加一个8.8.8.8 ,很快的哦。

安装软件(开发要求固定版本,如果不介意版本的话,可以直接使用pip install packge 即可安装,相当于linux中的yum)

[root@hcloud soft]# tar -xf Flask-0.10.1.tar.gz
[root@hcloud ~]# cd Flask-0.10.1
[root@hcloud Flask-0.10.1]# python setup.py install

[root@hcloud soft]# tar -xf uwsgi-2.0.12.tar.gz
[root@hcloud soft]# cd uwsgi-2.0.12
[root@hcloud uwsgi-2.0.12]# python setup.py install

5) 创建一个测试应用

创建一个Web应用程序存放的文件夹

[root@hcloud ~]# mkdir -pv /usr/local/webtest
[root@hcloud ~]# cd /usr/local/webtest

创建一个python 脚本,内容如下:

[root@hcloud webtest]# cat myproject.py
from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello:
    return "<h1 style='color:blue'>Hello Flask!</h1>"

if __name__ == "__main__":
    application.run(host='0.0.0.0')

创建WSGI入口点文件,名字为:wsgi.py,内容如下

[root@hcloud webtest]# cat wsgi.py
from myproject import application

if __name__ == "__main__":
    application.run

6) 配置uWSGI服务器网关服务运行方式,运行端口等。

上述两个python脚本文件创建完成后,uwsgi命令启动,运行在8000端口上,指定协议http,运行时会出现一些警告,暂时可以忽略,是因为当前是root账户运行的uwsgi,后面从配置文件启动时会配置普通用户nginx即可。

[root@hcloud webtest]# uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi
验证下,看下监听端口
[root@hcloud webtest]# netstat -aultnp | grep 8000
tcp        0      0 0.0.0.0:8000 0.0.0.0:* LISTEN      7181/uwsgi 
tcp        0      0 192.168.30.58:8000 192.168.30.65:48164         TIME_WAIT   - 

可以打开浏览器访问测试一下:http://192.168.30.58:8000

7) 创建uWSGI配置文件

以.ini格式为uwsgi启动配置文件(还有xml,json,等多种格式),这样就不用在命令行输入一大堆命令了,用uwsgi命令启动,后面可以创建uwsgi启动脚本,加入到系统服务

在项目的目录中,创建uwsgi.ini:

[root@hcloud webtest]# cat uwsgi.ini 
[uwsgi]
uid = nginx
gid = nginx
socket = 127.0.0.1:8000  
master = true
vhost = true
workers = 8
reload-mercy = 10
vacuum = true
max-requests = 10000
limit-as = 1024
buffer-sizi = 3000
pidfile = /var/run/uwsgi.pid
daemonize = /var/log/uwsgi/uwsgi.log  
chdir = /usr/local/webtest
module = wsgi
chmod-socket = 660
enable-threads = true

保存并退出。配置文件参考:
http://heipark.iteye.com/blog/1847421

大致的解释下:

uid 、gid :以哪个用户、组启动服务

socket:监听的ip及端口

master: 启动主进程

workes:服务器启动的进程数

reload-mercy:平滑的重启

pidfile :启动时的pid 文件。

daemonize :启动日志

module :web应用的入口模块名称

enable-threads : 启用线程模式

8) 创建开机系统启动脚本文件,名字为uwsgid。

[root@hcloud webtest]# cat /etc/init.d/uwsgid
#! /bin/sh
# chkconfig: 2345 55 25
# Description: Startup script for uwsgi webserver on Debian. Place in /etc/init.d and
# run 'update-rc.d -f uwsgi defaults', or use the appropriate command on your
# distro. For CentOS/Redhat run: 'chkconfig --add uwsgi'

### BEGIN INIT INFO
# Provides: uwsgid
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the uwsgi web server
# Description:       starts uwsgi using start-stop-daemon
### END INIT INFO

# Author:   licess
# website:  http://lnmp.org

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="uwsgi daemon"
NAME=uwsgi
DAEMON=/usr/bin/uwsgi
CONFIGFILE=/usr/local/webtest/$NAME.ini
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/uwsgid

set -e
[ -x "$DAEMON" ] || exit 0

do_start {
    $DAEMON $CONFIGFILE || echo -n "uwsgi already running"
}

do_stop {
    $DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
    rm -f $PIDFILE
    echo "$DAEMON STOPED."
}

do_reload {
    $DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"
}

do_status {
    ps aux|grep $DAEMON
}

case "$1" in
 status)
    echo -en "Status $NAME: \n"
    do_status
 ;;
 start)
    echo -en "Starting $NAME: \n"
    do_start
 ;;
 stop)
    echo -en "Stopping $NAME: \n"
    do_stop
 ;;
 reload|graceful)
    echo -en "Reloading $NAME: \n"
    do_reload
 ;;
 *)
    echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
    exit 3
 ;;
esac

exit 0

View Code

创建完成后,赋予执行权限,加入开机启动

[root@hcloud ~]# chmod +x /etc/init.d/uwsgid 
[root@hcloud ~]# chkconfig --add uwsgid
[root@hcloud ~]# chkconfig --level 2345 uwsgid on

检查下

[root@hcloud ~]# chkconfig --list uwsgid
uwsgid 0:off    1:off    2:on    3:on    4:on    5:on    6:off

启动uwsgid

[root@hcloud ~]# service uwsgid start
Starting uwsgi: 
[uWSGI] getting INI configuration from /usr/local/webtest/uwsgi.ini

验证下监听端口(注:这里我们使用127.0.0.1 作监听,是为了后期在使用时,对外只有nginx可以访问web应用):

[root@hcloud ~]# netstat -aultnp | grep :8000
tcp        0      0 127.0.0.1:8000 0.0.0.0:* LISTEN      8945/uwsgi

9) 安装Nginx配置代理

先下载安装6.6的epel源

[root@hcloud ~]# wget https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@hcloud ~]# rpm -ivh epel-release-6-8.noarch.rpm

安装nginx

[root@hcloud ~]# yum install nginx -y

安装完成后,修改nginx默认配置文件default.conf,修改之前可以先备份下源文件噢。完整内容如下:

[root@hcloud ~]# cat /etc/nginx/conf.d/default.conf
server {
        listen       80;
        server_name  192.168.30.58;
 
        location / {
 include  uwsgi_params;
 uwsgi_pass  127.0.0.1:8000;
 uwsgi_param UWSGI_SCRIPT wsgi;
 uwsgi_param UWSGI_CHDIR /usr/local/webtest;
 index  index.html index.htm;
 client_max_body_size 35m;
        }
} 

以上内容代理了uwsgi的端口,客户端通过访问nginx的80端口,然后nginx在将请求转发到后台flask应用的8000端口上。

启动nginx

[root@hcloud ~]# service nginx start
Starting nginx: [  OK  ]

在浏览器内测试访问一下nginx:http://192.168.30.58

相关推荐

Linux 5.17网络子系统方面的变化相当令人兴奋

正在开发的5.17内核的Linux网络子系统的更新是相当令人兴奋的,因为Linux在云中的大型服务器和企业网络设备上的运行以及小型物联网硬件上的Linux都是如此多产。新版不仅像往常一样有大量的硬件驱...

12 个流行的 Linux 网络命令及其使用方法

在Linux系统中,网络管理是系统管理员和开发者的核心技能之一。无论是排查网络问题、监控流量,还是配置网络接口,Linux提供了众多强大的命令行工具。这些工具功能强大且灵活,能够帮助用户高效地完成网络...

Linux集群自动化监控系统Zabbix集群搭建到实战

自动化监控系统Cacti特点:将监控到的数据,绘制成各种图形基于SNMP协议(网络管理协议)的监控软件,强大的绘图能力Nagios特点:状态检查和报警机制(例如:内存不足或CPU负载高时,及时的...

Linux超简单入门开箱篇(linux怎么入门)

此篇文章主要会带你介绍Linux操作系统,包括Linux本身、Linux如何使用、以及系统调用和Linux是如何工作的。Linux简介UNIX是一个交互式系统,用于同时处理多进程和多...

新手教程,Linux系统下MySQL的安装

看了两三个教程。终于在哔哩哔哩找到一个简单高效的教程,成功安装,up主名叫bili逍遥bili,感兴趣可以去看看。下面这个是我总结的安装方法环境:CentOS764位1.下载安装包,个人觉得在...

Windows 11 + WSL2 打造轻量级 Linux 本地开发环境实战教程

一、前言在2025年,越来越多开发者希望在不安装双系统的前提下体验Linux开发的强大能力,而微软的WSL2(WindowsSubsystemforLinux2)正好提供了这一可能。...

linux系统奔溃之vmcore:kdump 的亲密战友 crash

转自https://blog.csdn.net/yuanfang_way/article/details/77987399crash是目前广泛使用的linux内核崩溃转储文件的分析工具,掌握c...

音视频开发为什么要学SRS流媒体服务器

1SRS是什么官方定义:SRS是一个流媒体集群,支持RTMP/HLS/HTTP-FLV/RTSP/DASH/WebRTC/SRT/GB28181,高效、稳定、易用,简单而快乐。2SRS能够解决什么...

77% 的 Linux 运维都不懂的内核问题,这篇全告诉你了

前言之前在实习时,听了OOM的分享之后,就对Linux内核内存管理充满兴趣,但是这块知识非常庞大,没有一定积累,不敢写下,担心误人子弟,所以经过一个一段时间的积累,对内核内存有一定了解之后,今...

Linux 上利用Nginx代理uWSGI处理Flask web应用

一、介绍最近开发要用一个测试环境,是这样的Nginx+uwsgi+flask的一个结构。下面是一些记录,在Centos系统上使用Flask架构部署一个简单的Python应用。然后使用Nginx作...

C++ TinyWebserver 部署到Linux下,并运行

C++TinyWebserver部署到Linux下,并运行(使用的是Vmware的虚拟机运行Ubuntu20.04)环境:Vmware+Ubuntu20.041.Tinywebserver项目...

SUSE Linux方案已在Amazon Web Services发布

近日,SUSE宣布已在亚马逊云服务(AWS)上发布SUSELinuxEnterpriseServerforSAPApplications。通过SUSE的“bring-your-own-s...

遨游于Linux的“老鸟想要一份学习pdf:鸟哥的Linux私房菜学习篇

您是准备学习Linux的“小菜鸟”,却不知道该如何下手?您是遨游于Linux的“老鸟想要一本案头必备的工具书?《鸟哥的Linux私房菜基础学习篇(第四版)》是您绝佳的选择!全新改版,提供您更新的技术...

Mdserver-web|一款简单Linux面板服务

可以说是宝塔面板的精简版,界面很相似,只是更加简洁些,没有那么臃肿官网:https://www.midoks.icu/项目开源地址:https://github.com/midoks/mdserver...

国内外比较知名常见的6个可视化WEB管理面板

Linux服务器的管理对于新手用户来说是一个挺头疼的问题,由于用作服务器的Linux主机通常都没有图形化界面(节省资源),与日常使用的Windows有着很大的差别,一些必备组件的安装或更新就...