zoukankan      html  css  js  c++  java
  • nginx+uwsgi+flask 服务器配置

    注:每个机器,软件版本可能不一样,虽然网上有很多类似的帖子,但是我在搭建的时候遇到了不少的坑,此文仅供参考。

    请求流程:

    1、安装uwsgi

    uwsgi是一个应用服务器,非静态文件的网络请求就必须通过他完成,他也可以充当静态文件服务器,但不是他的强项。uwsgi是使用python编写的,因此通过`pip install uwsgi`就可以了。(uwsgi必须安装在系统级别的Python环境中,不要安装到虚拟环境中)。

    pip install uwsgi

    测试uwsgi是否安装正确:创建一个test.py的测试文件

    # test.py
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"] # python3
        #return ["Hello World"] # python2

    启动uwsgi服务:

    uwsgi --http :8000 --wsgi-file test.py

    访问页面可以看到 Hello World ,标识uwsgi安装成功。

    2、安装nginx

    nginx是一个web服务器。用来加载静态文件和接收http请求的。

    yum install nginx

    默认安装完nginx是不会自动启动的:常用命令:

    * 启动nginx:service nginx start
    * 关闭nginx:service nginx stop
    * 重启nginx:service nginx restart

    nginx默认端口为80端口,浏览器访问地址看到如下显示则标识nginx安装成功了。

    ——修改nginx默认的80端口。

    找到default.conf配置文件

    直接修改对于端口就行了,修改完毕之后记得重启nginx生效。

    3、配置uwsgi

    在项目根目录创建***_uwsgi.ini 文件,基础配置信息如下

    [uwsgi]
    chdir=/srv/cms           # 项目根目录
    module=manage         # 项目启动脚本名字
    wsgi-file=/srv/cms/manage.py      # flask启动脚本的具体文件
    callable=app        # 程序内的application变量名
    home=/root/.virtualenvs/cms-env-py3      # 虚拟环境的具体路径
    socket=127.0.0.1:5001        # socket 协议,用于和nginx通讯
    deamonize=/srv/cms/logs/cms-uwsgi.log        # 日志文件
    
    master=true       # 主进程
    processes=2       # 最大工作进程
    threads=1        # 线程数量

    关于socket和http的差别。从概念上来说,socket本身不是协议而是一种具体的TCP/IP实现方式,而HTTP是一种协议且基于TCP/IP。具体到这个配置这里来,如果我只配了socket = 127.0.0.1:5001的话,通过浏览器或者其他HTTP手段是无法成功访问的。而在uwsgi这边的日志里会提示请求包的长度超过了最大固定长度。另一方面,如果配置的是http = 127.0.0.1:5001的话,那么就可以直接通过一般的http手段来访问到目标。但这会引起nginx无法正常工作。

    正确的做法应该是:

    如果有nginx在uwsgi之前作为代理的话应该配socket   如:  socket=127.0.0.1:5001

    而如果想让请求直接甩给uwsgi的话那么就要配http。  如:  http=127.0.0.1:5001

    4、配置nginx

    进入nginx的conf.d路径新建一个**.conf的配置文件。

    配置信息如下:

    server {
        # 监听端口
        listen      5000;
        # 允许访问的域名或IP,本机IP
        server_name 10.0.36.112;
        charset     utf-8;
        access_log /srv/cms/logs/access.log;     # 日志文件
        error_log /srv/cms/logs/error.log;      #  错误日志文件
    
        # 最大上传文件大小
        client_max_body_size 75M;
    
        # 静态文件URL
        location /static {
            # 文件路径
            alias /srv/cms/static;
        }
    
        # 非静态文件服务器
        location / {
        include uwsgi_params;  # 引入uwsgi配置
            uwsgi_pass 127.0.0.1:5001;    # uwsgi的配置文件里的socket对应
    
            uwsgi_param UWSGI_CHDIR /srv/cms;      # 项目根路径
            uwsgi_param UWSGI_SCRIPT manage:app;    # 启动的主程序
        }
    }

    检查配置文件是否正常

    # ervice nginx configtest 

    5、启动nginx服务

    # service nginx start

    6、启动uwsgi服务

    # uwsgi --ini cms_uwsgi.ini

     

    到这里,服务器搭建完成。

    备注:

    uwsgi 常用命令:

    uwsgi --ini cms_uwsgi.ini    //启动
      
    uwsgi  cms_uwsgi.ini   --deamonize //后台运行启动  
      
    uwsgi --stop uwsgi.pid  //停止服务  
      
    uwsgi --reload uwsgi.pid  //可以无缝重启服务 

     nginx+uwsgi+flask成功运行了。

  • 相关阅读:
    HTML学习笔记4----更多元素
    USB协议分析
    USB总线介绍
    SPI驱动程序设计
    SPI子系统
    SPI总线介绍和裸机编程分析
    I2C自编设备驱动设计
    I2C用户态驱动设计
    I2C学习
    MTD系统架构和yaffs2使用、Nandflash驱动设计
  • 原文地址:https://www.cnblogs.com/liluping860122/p/9089807.html
Copyright © 2011-2022 走看看