uWSGI 学习日志
  • 首页
  • 关于致胜
  • 网站开发
  • 软件/小程序案例
  • 致胜软件
  • 服务器租用
  • 合作客户
  • 致胜优势
  • 技术博客
  • 视频中心
  • uWSGI 学习日志>
    为什么需要uWSGI?
    在生产环境中部署Python Web项目时,uWSGI负责处理Nginx转发的动态请求,并与我们的Python应用程序沟通,同时将应用程序返回的响应数据传递给Nginx。


    客户端 <-> Nginx <-> uWSGI <-> Python应用程序(Django, Flask)


    uWSGI的安装
    pip install uwsgi


    为了测试uWSGI安装是否成功,可以编写一个test.py的测试文件,添加如下代码:
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"]


    然后使用如下命令启动uWSGI Web服务器, 端口8080
    uwsgi --http :8080 --wsgi-file test.py


    如果你已经有了一个现成的Django项目,你可以使用如下命令启动Web服务。
    # 使用uwsgi命令行启动Django项目,端口8000
    $ uwsgi --http :8000 --module myproject.wsgi






    在生产环境中我们通常不会使用命令行启动Python Web项目,而是通常编辑好uWSGI配置文件uwsgi.ini, 然后使用如下命令启动Python Web项目。


    # 使用uwsgi.ini配置文件启动Django应用程序
    $ uwsgi --ini uwsgi.ini






    uWSGI 常用命令
    # 启动uWSGI服务器
    $ uwsgi --ini uwsgi.ini


    # 重启uWSGI服务器
    $ sudo service uwsgi restart


    # 查看所有uWSGI进程
    $ ps aux | grep uwsgi


    # 停止所有uWSGI进程
    $ sudo pkill -f uwsgi -9




    uWSGI常用配置
    uWSGI常用配置选项如下所示,稍加修改(项目名,项目根目录)即可部署大部分Python Web项目。




    [uwsgi]
    uid=www-data # Ubuntu系统下默认用户名
    gid=www-data # Ubuntu系统下默认用户组
    project=mysite1  # 项目名
    base = /home/user1 # 项目根目录


    home = %(base)/Env/%(project) # 设置项目虚拟环境,Docker部署时不需要
    chdir=%(base)/%(project) # 设置工作目录
    module=%(project).wsgi:application # wsgi文件位置


    master=True # 主进程
    processes=2 # 同时进行的进程数,一般


    # 选项1, 使用unix socket与nginx通信,仅限于uwsgi和nginx在同一主机上情形
    # Nginx配置中uwsgi_pass应指向同一socket文件
    socket=/run/uwsgi/%(project).sock


    # 选项2,使用TCP socket与nginx通信
    # Nginx配置中uwsgi_pass应指向uWSGI服务器IP和端口
    # socket=0.0.0.0:8000 或则 socket=:8000


    # 选项3,使用http协议与nginx通信
    # Nginx配置中proxy_pass应指向uWSGI服务器一IP和端口
    # http=0.0.0.0:8000 


    # socket权限设置
    chown-socket=%(uid):www-data
    chmod-socket=664


    # 进程文件
    pidfile=/tmp/%(project)-master.pid


    # 以后台守护进程运行,并将log日志存于temp文件夹。
    daemonize=/var/log/uwsgi/%(project).log 


    # 服务停止时,自动移除unix socket和pid文件
    vacuum=True


    # 为每个工作进程设置请求数的上限。当处理的请求总数超过这个量,进程回收重启。
    max-requests=5000


    # 当一个请求花费的时间超过这个时间,那么这个请求都会被丢弃。
    harakiri=60


    #当一个请求被harakiri杀掉会,会输出一条日志
    harakiri-verbose=true


    # uWsgi默认的buffersize为4096,如果请求数据超过这个量会报错。这里设置为64k
    buffer-size=65536


    # 如果http请求体的大小超过指定的限制,打开http body缓冲,这里为64k
    post-buffering=65536


    #开启内存使用情况报告
    memory-report=true


    #设置平滑的重启(直到处理完接收到的请求)的长等待时间(秒)
    reload-mercy=10


    #设置工作进程使用虚拟内存超过多少MB就回收重启
    reload-on-as=1024




    uWSGI和Nginx之间的通信方式


    如果你的nginx与uwsgi在同一台服务器上,优先使用本地机器的unix socket进行通信,这样速度更快。此时nginx的配置文件如下所示:
    location / {     
        include /etc/nginx/uwsgi_params;
        uwsgi_pass unix:/run/uwsgi/django_test1.sock;
    }










    uWSGI是一个应用服务器,它实现了WSGI协议并提供了高性能的Web应用程序托管环境。它支持多种协议,包括HTTP、FastCGI、SCGI等,使得Python应用程序可以与不同类型的Web服务器通信。
    uwsgi是一个通信协议,它定义了应用服务器和Web服务器之间的通信方式。uWSGI应用服务器是uwsgi协议的一种实现。




  • 回顶部
技术支持:致胜网络
  • 首页

  • 一键拨号

  • 网站开发

  • 软件开发