nginx和uwsgi配置

本文详细介绍了nginx和uwsgi的关系以及配置过程。nginx作为服务器接收请求,通过uwsgi协议转发给应用程序。uwsgi的安装与使用,包括配置文件编写和调试。接着讲解nginx的安装与代理配置,通过修改nginx.conf文件实现请求转发。最后,提供了重启nginx和uwsgi的命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.nginx和uwsgi的关系

nginx相当于是服务器,负责接收请求

uwsgi是服务器和服务端应用程序的通信协议,规定了怎么把请求转发给应用程序和返回

2个基本概念:
服务器(接收请求),应用程序(处理请求并返回)

通信过程:
客户端发送一个http请求,被nginx服务器接收,nginx服务器将请求转发给uwsgi,uwsgi将请求转发给实现uwsgi协议的应用程序(flask,gunicorn等等)

2.uwsgi
1.安装

直接下载uwsgi的安装包并进行本地编译

注意:uwsgi目前只支持python2.7

2.使用

uwsgi自带服务器程序,可以实现nginx很少一部分功能(主要用于调试,并发量跟nginx相比却差很多),因此在服务端应用程序开发阶段,可以先用uwsgi进行应用程序的调试
(当然,像flask自带调试服务器,可以在main函数中直接启动服务器,进行逻辑调试)

这里,我们以flask为例,讲述如何将应用程序托管到uwsgi上(为什么要托管?因为服务器要上线,需要接受大规模的并发请求,用uwsgi托管是nginx转发的第一步)

1.使用支持uwsgi的网络框架写好应用程序

#coding=utf-8
from flask import Flask


app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(host="10.210.178.27", port=5000,debug=True)

2.写完应用程序后,直接运行main函数,调试应用程序是否有逻辑错误(在这里我们的应用程序很简单,就不用调试了)

3.写应用程序的uwsgi配置文件

[uwsgi]
socket = 127.0.0.1:5000  
processes = 4   
threads = 2 
master = true
pythonpath = /home/admin/test
module = test
callable = app
memory-report = true

应用程序要托管,需要告诉uwsgi应用程序的位置,用pythonpath = /home/admin/test指明当前应用程序的项目路径,module指明uwsgi需要托管的主程序文件名,callable就是在应用程序中指明的uwsgi需要调用的应用程序,在程序中是
app = Flask(__name__),因此callable指定为app. socket是uwsgi 进行socket通信的端口.

4.uwsgi调试

写好配置文件后,就可以开始用uwsgi命令启动服务器进行调试,为了便于在浏览器端访问调试,调试中使用http协议(socket协议用于nginx代理, 否则会出现:invalid request block size错误

使用http协议启动uwsgi的命令为:

uwsgi --http :5800  --ini uwsgi_conf.ini -d ./uwsgi.log --pidfile=uwsgi.pid

–http指定用5800端口启动http协议

–ini 指定上述的启动配置文件

-d指定uwsgi的log,方便我们调试

–pidfile将启动的进程号写到uwsgi.pid文件中,方便我们在需要停止服务器时kill掉

启动后查看uwsgi.log,如果一切正常,就在浏览器内访问:
http://10.210.178.27:5800
会输出hello world,表明此时uwsgi工作正常。

再以socket形式(默认),启动uwsgi:

uwsgi --ini uwsgi_conf.ini -d ./uwsgi.log

socket端口为配置文件中的端口:5000.

接下来配置nginx转发请求到uwsgi。

3.nginx
1.安装nginx

nginx的安装直接用pip install nginx即可

2.nginx代理配置

nginx的启动仅仅需要指定nginx的根目录以及nginx的配置文件,安装完nginx后,nginx conf目录下会有很多启动nginx所需要的文件,这些文件在启动nginx时是必不可少的。因此,我们通常为了项目的完整性,将nginx下的conf文件拷贝到我们的项目目录中,然后修改nginx的配置文件。

在我们的项目中,nginx配置文件修改如下:

server {
        listen       8888;
        server_name  localhost;
        location / {
            include uwsgi_params;
            uwsgi_pass  127.0.0.1:5000;
            }
        }

++特别注意:uwsgi_params在nginxconf文件夹下自带,uwsgi_pass一定要跟uwsgi_conf.ini中写的地址完全一致。++

然后启动nginx:

bash
/usr/local/nginx/sbin/nginx -p /home/admin/test -g "pid nginx.pid;"

/usr/local/nginx/sbin/nginx:nginx执行文件的路径

-p:执行的目录(nginx在此目录下找conf文件夹,并加载nginx.conf文件)

-g:nginx指令,pid创建pid为nginx.pid号的进程(方便我们kill)

至此,我们已经可以通过nginx8888端口转发uwsgi,进行访问应用程序。

需要重启时:

nginx:
kill -9 nginx.pid

uwsgi:
uwsgi --stop uwsgi.pid

参考文档:http://juxuan.fu.blog.163.com/blog/static/112129259201411188132562/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值