nginx+supervisor+uwsgi 配置django项目(Nginx + supervisor + uwsgi configure Django project)

uwsgi(虚拟环境下需要安装uwsgi包)

在django第一级目录下创建uswgi.ini配置文件 touch uswgi.ini

输入以下配置文件

[uwsgi]
# Django-related settings

# the base directory (full path)

# 填写项目的第一层绝对路径

chdir = 填写项目的第一层绝对路径

# Django's wsgi file

# 填写项目第二层的相对路径,找到第二层目录下的wsgi.py

# 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件

module = xx.wsgi

# the virtualenv (full path)

# 填写虚拟环境解释器的第一层工作目录

home = 填写虚拟环境解释器的第一层工作目录

# process-related settings

# master

master = true

# maximum number of worker processes

# 代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1 

# 如果是单进程,十万个请求,都丢给一个进程去处理

# 3个工作进程,十万个请求,就分给了3个进程去分摊处理

processes = 3

# the socket (use the full path to be safe

# socket = 0.0.0.0:8000

# 线上不会用http参数,因为对后端是不安全的,使用socket参数是安全的连接,用nginx反向代理去访问

# 后端程序是运行在防火墙内部,外网是无法直接访问的

# 临时使用http参数,便于我们用浏览器调试访问

http = 0.0.0.0:8000

# ... with appropriate permissions - may be needed

# chmod-socket = 664

# clear environment on exit

vacuum = true

启动uwsgi命令

uwsgi     –ini   /opt/staff/uwsgi.ini

配置supervisor

linux直接安装

yum install  supervisor -y

修改supervisor的配置文件,添加管理xx的任务vim  /etc/supervisord.conf

#再最底行,添加如下内容#[program:xx]是被管理的进程配置参数,xx是进程的名称

[program:xx]command=/root/anaconda3/envs/test/bin/uwsgi –ini /opt/staff/uwsgi.ini ;supervisor其实就是在帮你执行命令而已!autostart=true ; 在supervisord启动的时候也自动启动startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程

supervisor命令如下

#启动supervisord
supervisord -c /etc/supervisord.conf  

#进入supervisor命令行
supervisorctl -c /etc/supervisord.conf

#需要进入supervisor命令行操作

#关闭全部服务    
stop all

#启动某项目
start name

#查看supervisord
status

配置nginx

注意,编译软件之前,还是需要解决系统的开发环境,例如如下yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y

注:这里用的是tb的nginx

1、在linux的opt目录下,下载nginx源代码

wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz

2、解压缩源代码,准备编译三部曲[root@xx opt]# tar -zxvf tengine-2.3.2.tar.gz

3、进入源码目录,指定nginx的安装位置[root@xx tengine-2.3.2]# ./configure –prefix=/opt/tngx232/

4、编译且编译安装,生成nginx的可执行命令目录make && make install

5、安装完毕后,会生成/opt/tngx232/文件夹,nginx可以使用的配置都在这里了

[root@xx tngx232]# lsconf html logs sbin

conf 明显是存放*.conf配置文件的html 存放网页的静态文件的目录logs 日志sbin 存放nginx的可执行命令

6、添加nginx到PATH中,可以快捷执行命令

永久修改PATH,开机就去读vim /etc/profile 写入PATH=”/opt/tngx232/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:”

重新读取环境变量 source /etc/profile

7、首次启动nginx,注意要关闭防火墙

直接输入nginx命令即可启动有关nginx的命令

nginx #首次输入是直接启动,不得再次输入 nginx -s reload #平滑重启,重新读取nginx的配置文件,而不重启进程nginx -s stop #停止nginx进程 nginx -t #检测nginx.conf语法是否正确

nginx的配置文件学习

主要的几个代码块

http{ } #里面定义了多个代码,是nginx的核心功能配置点

server{ } #虚拟主机代码块,定义了网站的目录地址,以及首页文件名字,监听的端口,等等功能

location { } #域名匹配代码块

#user  nobody;
#  定义nginx的工作进程数,以cpu核数 为准
worker_processes  5;
# 想用哪个用能,直接打开注释,或者写进来即可
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#error_log  "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";
# pid文件的作用是,pid是用于启停进程的号码
# ps -ef去获取nginx的进程id
# 把pid写入到 此 nginx.pid文件中,
pid        logs/nginx.pid;


events {
    worker_connections  1024;
}
# 这个http区域,是nginx的核心功能区域
http {
    include       mime.types;
    default_type  application/octet-stream;
    #打开此nginx的访问日志功能,即可查看日志
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    #nginx开启静态资源压缩,比如nginx返回磁盘的html文件特别大,里面包含了诸多的js css,图片引用
    #  一个html文件 达到4m大小
    #  传输图片 等等都是高兴的 1080p图片
    #  打开此功能,能够极大的提升网站访问,以及静态资源压缩
    gzip  on;

    # 提供静态资源缓存功能,第一次访问过网页之后,nginx能够让图片js等静态资源,缓存到浏览器上
    # 浏览器下次访问网站,速度就几乎是秒开了
    # 想要用这些功能,只需要在nginx里打开某些配置即可,作者都已经写好了该功能
    #
    #这里的server区域配置,就是虚拟主机的核心配置
    # nginx支持编写多个server{} 区域块,以达到多虚拟主机,多个站点的功能
    #   server{} 区域块,可以存在多个,且默认是自上而下去加载,去匹配的
    #   目前这里是第一个server {} 区域块,端口是85
    server {
        # 定义该网站的端口
        listen       85;
        #填写域名,没有就默认即可
        server_name  localhost;
        #更改nginx的编码支持
        charset utf-8;
        # 如此添加一行参数,当用户请求出错,出现404的时候,就返回 root定义的目录去寻找40x.html文件
        error_page  404  /40x.html;
        #access_log  logs/host.access.log  main;
        
        
       #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
        # nginx的域名匹配,所有的请求,都会进入到这里
        # 例如  192.168.178.140:85/lubenwei.jpg
        #    192.168.178.140:85/menggededianhua.txt
        location / {
            #这个root参数,是定义该虚拟主机,资料存放路径的,可以自由修改
            #  当用户访问  192.168.178.140:85的时候,就返回该目录的资料
            root   /s25python/;
           # index参数,用于定义nginx的首页文件名字  ,只要在/s25nginx目录下存在index.html文件即可
            index  index.html index.htm;
        }

    }

#这里就是上一个Server{}的标签闭合处了,,可以写入第二个server{}
# 注意 ,注意,server{} 标签快,是平级的关系,不得嵌套,检查好你的花括号
# 这里是第二个虚拟主机的配置了
server  {
listen 89;
server_name  _;
#nginx的域名匹配
# 当用户访问 192.168.178.140:89的时候,返回该目录的内容
location  / {
        root   /s25linux/;
        index  index.html;

}

}
}

nginx 反向代理

    #   第一个虚拟主机的配置,作用是反向代理了
    #
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        error_page  404  /40x.html;
        # 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
        # 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
        location / {
        #当请求发送给  192.168.178.140:80的时候
        #直接通过如下的参数,转发给90端口
        proxy_pass  http://192.168.178.140:90;
        }

    }
#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
server  {
listen 90;
server_name  _;
#当请求来到   192.168.178.140:90的时候,就返回/s25proxy目录下的index.html
location  / {
        root   /s25proxy/;
        index  index.html;
}

}

通过proxy_pass反向代理给某个端口

nginx负载均衡

# 用upstream关键词定义负载均衡池,写入资源服务器的地址 # 负载均衡的算法,默认是轮询机制,一台服务器处理一次

1.默认是轮询机制,每台服务器处理一次2.加权轮询,修改nginx.conf如下,给与机器不同的权重

upstream s25real_server {
server 192.168.178.140:90 weight=4;
server 192.168.178.140:95 weight=1;
}


server {
listen 80;
server_name localhost;
charset utf-8;
error_page 404 /40x.html;
# 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
# 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
location / {
#当请求发送给 192.168.178.140:80的时候
#直接通过如下的参数,s25real_server里面两个端口
proxy_pass http://s25real_server;
}

}

#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的server {listen 90;server_name _;#当请求来到 192.168.178.140:90的时候,就返回/s25proxy目录下的index.htmllocation / { root /s25lol/; index index.html;}

}

#第三个server{}虚拟主机,作用是 提供资源服务器的内容的server {listen 95;server_name _;location / {root /s25dnf/;index index.html;

}}

————————

Uwsgi (uwsgi package needs to be installed in virtual environment)

Create uswgi.com in the first level directory of Django Ini configuration file touch uswgi ini

Enter the following profile

[uwsgi]
# Django-related settings

# the base directory (full path)

# 填写项目的第一层绝对路径

chdir = 填写项目的第一层绝对路径

# Django's wsgi file

# 填写项目第二层的相对路径,找到第二层目录下的wsgi.py

# 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件

module = xx.wsgi

# the virtualenv (full path)

# 填写虚拟环境解释器的第一层工作目录

home = 填写虚拟环境解释器的第一层工作目录

# process-related settings

# master

master = true

# maximum number of worker processes

# 代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1 

# 如果是单进程,十万个请求,都丢给一个进程去处理

# 3个工作进程,十万个请求,就分给了3个进程去分摊处理

processes = 3

# the socket (use the full path to be safe

# socket = 0.0.0.0:8000

# 线上不会用http参数,因为对后端是不安全的,使用socket参数是安全的连接,用nginx反向代理去访问

# 后端程序是运行在防火墙内部,外网是无法直接访问的

# 临时使用http参数,便于我们用浏览器调试访问

http = 0.0.0.0:8000

# ... with appropriate permissions - may be needed

# chmod-socket = 664

# clear environment on exit

vacuum = true

Start uwsgi command

uwsgi     –ini   /opt/staff/uwsgi.ini

配置supervisor

Linux direct installation

yum install  supervisor -y

Modify the configuration file of supervisor and add the task of managing XX VIM / etc / Supervisor conf

#At the bottom line, add the following content #[program: XX] is the configuration parameter of the managed process, and XX is the name of the process

[program:xx]command=/root/anaconda3/envs/test/bin/uwsgi –ini /opt/staff/uwsgi. ini ; Supervisor is actually helping you execute orders! autostart=true ; When supervisor starts, it will also start automatically. Startsecs = 10; If there is no abnormal exit after 10 seconds of startup, it means that the process is started normally. The default is 1 second autorestart = true; The program will restart automatically after exiting. The optional values are: [unexpected, true, false]. The default value is unexpected, which means that the process will restart after being killed accidentally. Stopasgroup = true; The default value is false. When a process is killed, whether to send a stop signal to this process group, including the child process killsgroup = true; The default value is false. It sends a kill signal to the process group, including child processes

The supervisor command is as follows

#启动supervisord
supervisord -c /etc/supervisord.conf  

#进入supervisor命令行
supervisorctl -c /etc/supervisord.conf

#需要进入supervisor命令行操作

#关闭全部服务    
stop all

#启动某项目
start name

#查看supervisord
status

配置nginx

注意,编译软件之前,还是需要解决系统的开发环境,例如如下yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y

Note: nginx of TB is used here

1. In the opt directory of Linux, download the nginx source code

wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz

2. Decompress the source code and prepare to compile the trilogy[ root@xx opt]# tar -zxvf tengine-2.3.2. tar. gz

3. Enter the source directory and specify the installation location of nginx[ root@xx tengine-2.3.2]# ./ configure –prefix=/opt/tngx232/

4. Compile and install, and generate the executable command directory of nginx make & amp& amp; make install

5. After installation, the / opt / tngx232 / folder will be generated. Here are all the configurations that nginx can use

[root@xx tngx232]# lsconf html logs sbin

Conf is obviously storing * The HTML of the conf configuration file stores the directory of the static file of the web page logs SBIN stores the executable command of nginx

6. Add nginx to path to execute commands quickly

永久修改PATH,开机就去读vim /etc/profile 写入PATH=”/opt/tngx232/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:”

Reread the environment variable source / etc / profile

7. When starting the firewall for the first time, pay attention to turn off NGX

Directly enter the nginx command to start the command about nginx

nginx # The first input is to start directly. Do not input nginx – s reload again # for smooth restart. Re read the configuration file of nginx without restarting the process nginx – s stop # Stop nginx process nginx – t # detect nginx Is the conf syntax correct

Nginx configuration file learning

Main code blocks

Http {} # defines multiple codes, which are the core function configuration points of nginx

Server {} # virtual host code block, which defines the directory address of the website, the name of the home page file, the listening port, and other functions

Location {} # domain name matching code block

#user  nobody;
#  定义nginx的工作进程数,以cpu核数 为准
worker_processes  5;
# 想用哪个用能,直接打开注释,或者写进来即可
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#error_log  "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";
# pid文件的作用是,pid是用于启停进程的号码
# ps -ef去获取nginx的进程id
# 把pid写入到 此 nginx.pid文件中,
pid        logs/nginx.pid;


events {
    worker_connections  1024;
}
# 这个http区域,是nginx的核心功能区域
http {
    include       mime.types;
    default_type  application/octet-stream;
    #打开此nginx的访问日志功能,即可查看日志
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    #nginx开启静态资源压缩,比如nginx返回磁盘的html文件特别大,里面包含了诸多的js css,图片引用
    #  一个html文件 达到4m大小
    #  传输图片 等等都是高兴的 1080p图片
    #  打开此功能,能够极大的提升网站访问,以及静态资源压缩
    gzip  on;

    # 提供静态资源缓存功能,第一次访问过网页之后,nginx能够让图片js等静态资源,缓存到浏览器上
    # 浏览器下次访问网站,速度就几乎是秒开了
    # 想要用这些功能,只需要在nginx里打开某些配置即可,作者都已经写好了该功能
    #
    #这里的server区域配置,就是虚拟主机的核心配置
    # nginx支持编写多个server{} 区域块,以达到多虚拟主机,多个站点的功能
    #   server{} 区域块,可以存在多个,且默认是自上而下去加载,去匹配的
    #   目前这里是第一个server {} 区域块,端口是85
    server {
        # 定义该网站的端口
        listen       85;
        #填写域名,没有就默认即可
        server_name  localhost;
        #更改nginx的编码支持
        charset utf-8;
        # 如此添加一行参数,当用户请求出错,出现404的时候,就返回 root定义的目录去寻找40x.html文件
        error_page  404  /40x.html;
        #access_log  logs/host.access.log  main;
        
        
       #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
        # nginx的域名匹配,所有的请求,都会进入到这里
        # 例如  192.168.178.140:85/lubenwei.jpg
        #    192.168.178.140:85/menggededianhua.txt
        location / {
            #这个root参数,是定义该虚拟主机,资料存放路径的,可以自由修改
            #  当用户访问  192.168.178.140:85的时候,就返回该目录的资料
            root   /s25python/;
           # index参数,用于定义nginx的首页文件名字  ,只要在/s25nginx目录下存在index.html文件即可
            index  index.html index.htm;
        }

    }

#这里就是上一个Server{}的标签闭合处了,,可以写入第二个server{}
# 注意 ,注意,server{} 标签快,是平级的关系,不得嵌套,检查好你的花括号
# 这里是第二个虚拟主机的配置了
server  {
listen 89;
server_name  _;
#nginx的域名匹配
# 当用户访问 192.168.178.140:89的时候,返回该目录的内容
location  / {
        root   /s25linux/;
        index  index.html;

}

}
}

nginx 反向代理

    #   第一个虚拟主机的配置,作用是反向代理了
    #
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        error_page  404  /40x.html;
        # 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
        # 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
        location / {
        #当请求发送给  192.168.178.140:80的时候
        #直接通过如下的参数,转发给90端口
        proxy_pass  http://192.168.178.140:90;
        }

    }
#第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
server  {
listen 90;
server_name  _;
#当请求来到   192.168.178.140:90的时候,就返回/s25proxy目录下的index.html
location  / {
        root   /s25proxy/;
        index  index.html;
}

}

Through proxy_ Pass reverse proxy to a port

nginx负载均衡

#Define the load balancing pool with the upstream keyword and write the address # load balancing algorithm of the resource server. The default is the polling mechanism, and one server processes it once

1. The default is polling mechanism, which is processed once by each server. 2 Weighted polling, modify nginx Conf is as follows, giving different weights to the machine

upstream s25real_server {
server 192.168.178.140:90 weight=4;
server 192.168.178.140:95 weight=1;
}


server {
listen 80;
server_name localhost;
charset utf-8;
error_page 404 /40x.html;
# 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
# 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
location / {
#当请求发送给 192.168.178.140:80的时候
#直接通过如下的参数,s25real_server里面两个端口
proxy_pass http://s25real_server;
}

}

#The second virtual host is used as the web site function and resource server. It provides the server {listen 90; server _name _; # when the request comes to 192.168.178.140:90, it returns the index.htmllocation / {root / s25lol /; index.html;} in the / s25proxy directory

}

#The third server {} virtual host is used to provide the server {listen 95; server _name _; location / {root / s25dnf /; index.html of the content of the resource server;

}}