nginx uwsgi 配置启动停止

 

1.nginx 的配置

1.1 全局变量

#配置工作进程的用户和组

user nobady nobady

#指定worker进程启动的数量 一般与cpu的核心数相同                         

worker_processes  4              

#错误日志文件位置(默认所有类型错误) 第二个参数可选择输出错误日志类型

#[debug | info | notice | warn | error | crit | alert | emerg],级别越

#高记录的信息越少,I/O消耗越低

error_log   /data/nginx/logs/error.log

#pid文件存放nginx主进程的ID 会覆盖默认配置

pid  /var/run/nginx.pid

1.2 事件配置

events{

#use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] 选择网络I/O模型

#linus 下默认使用epoll

use epoll

#每个进程可以处理的最大连接数

worker_connetctions 1024;

}

1.3 http参数

http{

#文件扩展名与文件类型映射表

include mime.types;#默认文件类型

default_type application/octet-stream;

#关闭请求头显示nginx版本信息

server_tokens off;  

#开启高效传输模式。

sendfile        on;#防止网络阻塞

tcp_nopush on;

tcp_nodelay on;    #客户端连接超时时间,单位是秒

keepalive_timeout 60;#客户端请求头读取超时时间

client_header_timeout 10;#设置客户端请求主体读取超时时间

client_body_timeout 10;#响应客户端超时时间

send_timeout 10

}

1.4 虚拟主机基本配置

server{

#监听端

listen       80;
#访问域名

server_name  localhost;
#编码格式,若网页格式与此不同,将被自动转码

charset koi8-r;
#虚拟主机访问日志定义

access_log  logs/host.access.log  main;

}

1.5 配置上游服务器

#上游服务器

upstream mytomcatl {

#负载均衡调度算法 默认的是轮询(round-robin)、ip_hash(通过IP地址的哈希值确保客户端均匀的连接到所有的服务器)、least_conn(将请求发送到活跃连接数最少的服务器上)

ip_hash;

#上游服务器地址

server 127.0.0.1:5000;         # server IP port

server 127.0.0.1:5010;         # server IP port

#worker进程缓存到上游服务器的连接数

keepalive 32

}

1.6 反向代理

#Location指令通过指定模式来与客户端请求的URI相匹配

location = /uri  =开头表示精确匹配,只有完全匹配上才能生效。

location ^~ /uri  ^~ 开头对URL路径进行前缀匹配,并且在正则之前。

location ~ pattern  ~开头表示区分大小写的正则匹配。

location ~* pattern  ~*开头表示不区分大小写的正则匹配。

location /uri     不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。

location /      通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default

 

 

示例:

location ^~ /views/ {

           root /virus/export_report/report/;

        }

# 动态路由代理规则

location /v1 {

proxy_set_header  Host            $host;  # 转发主机请求

proxy_set_header  X-Real-IP        $remote_addr;  # 转发源IP

proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for; # 转发目的IP

proxy_pass http://mytomcat;

}

1.7 完整的nginx.conf配置示例

user  nobody nobody;

worker_processes  1;

error_log  /data/nginx/logs/error.log;

pid        /var/run/nginx.pid;

events {

    worker_connections  1024;

}

http {

    include       /virus/party/nginx/conf/mime.types;

    default_type  /virus/party/nginx/conf/application/octet-stream;

    server_tokens off;  # 关闭请求头显示nginx版本信息

    keepalive_timeout  65;

    sendfile    on;

    #   服务器代理转发信息

    upstream mytomcat {                 

         ip_hash;

         server 30.30.30.3:5010;         # server IP port

    }

    server{

        listen 80;                    # 侦听8080端口

        server_name 30.30.30.2;       # 服务器IP地址,或者域名地址

# 静态静态文件代理规则

client_max_body_size 11M;

root /virus/soc_webui_static/webui/;

    location ^~ /scl/ {

                proxy_pass  http://200.200.116.175:80;   # 转发负载配置

                proxy_set_header  Host            $host;  # 转发主机请求

                proxy_set_header  X-Real-IP        $remote_addr;  # 转发源IP

                proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

                }

location ^~ /js {

         root /virus/soc_webui_static/webui/;

         }

location ^~ /static {

                root /virus/soc_webui_static/webui/;

                }

location ^~ /imgs {

                root /virus/soc_webui_static/webui/;

                }

location ^~ /fonts {

                root /virus/soc_webui_static/webui/;

                }

location ^~ /css {

                root /virus/soc_webui_static/webui/;

                }

location ^~ / {

                proxy_pass http://mytomcat;

                proxy_set_header  Host            $host;  # 转发主机请求

                proxy_set_header  X-Real-IP        $remote_addr;  # 转发源IP

                proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for; # 转发目的IP

                }

        }

}

 

  1. nginx的启动    

 

    1. nginx的启动命令

nginx -c nginx.conf

 

    1. nginx启动流程
  1. 执行ngx_time_ini,初始化时间,避免每次取当前时间都调用gettimeofday(系统调用,成本较大),,nginx是事件驱动机制,当一批事件发生时,也就是epoll_wait返回时,会取一次gettimeofday来更新自己的时间。
  2. 初始化核心数据结构ngx_cycle,nginx通过配置文件来初始化ngx_cycle
  3. nginx开始监听端口(fork子进程的时候,监听的句柄,会被所有nginx worker共享使用)
  4. 初始化信号量,进程间的同步是通过信号量控制的,然后创建pid文件,存放主进程的

PID,之后对这个文件也是通过信号量来控制。

  1. fork子进程,处理客户端请求,主进程还会监控子进程的运行状态,如果子进程非正常结束,会重新拉起

 

  1. nginx的结束
    1. nginx结束的四种方式

nginx -s stop|quit|reopen|reload

1.stop 快速停止服务:类似kill -SIGTERM pid

1) master进程收到 stop 信号后,把 ngx_terminate 设置为1

2) master看到ngx_terminate 为1 ,通过channel向子进程发送 NGX_CMD_TERMINATE 命令

3) 子进程收到命令后,把  ngx_terminate = 1

4) 子进程看到ngx_terminate 为1 , 直接调用ngx_worker_process_exit 结束进程

5) 子进程结束的时候,会向master进程发送一个 SIGCHLD 信号

6) master进程收sigchild信号后,把ngx_reap =1 并调用 ngx_process_get_status得到退出的进程并设置进程的状态。

7) master看到ngx_reap就调用ngx_reap_children回收子进程

8) 所有的子进程都回收完毕,master就调用 ngx_master_process_exit 退出。

2.quit 优雅的停止服务:quit信号其实和前面介绍的stop 基本一样,唯一的不同之处就是quit是一种优雅的停止,也就是进程如果还在服务中,那么就不会关闭该进程,直到进程完成服务为止。当然这个过程中不能再接受新的任务了。

1) master接收到quit信号后, 关闭监听socker,然后向子进程发送quit信号(这里master本来就不接收请求,关闭监听可能是因为如果此时子进程挂了,父进程会重启一个子进程,fork的时候会使用master的监听句柄,与nginx的启动对应)

2) 子进程收到quit信号,首先关闭监听socker, 然后把ngx_exiting设置为1 ,表示进程当前是处于退出的过程中,看是否有未完成的请求,有就处理完,最后结束子进程

3) 后面同stop的第五步

3.reopen 重启:nginx服务会暂时中断,然后通过配置文件启动,如果配置文件有错 会一直中断服务

4.reload 重新加载:reload会重新加载配置文件,nginx服务不会中断,而且reload时会测试conf语法等,如果出错会rollback用上一次正确配置文件保持正常运行;如果配置正确,master进程重新初始化系统的资源,启动新的子进程(会使用一个标识表示它为新进程),启动新的cache管理进程,向子进程发出quit信号退出,旧的子进程退出。

 

3.uWSGI

3.1 uwsgi的配置文件

示例:

[uwsgi]

[uwsgi]

uid = nobody

gid = nobody

master = true

chmod-socket = 666

pidfile = /var/run/uwsgi.pid

processes = 8

threads = 32

chdir = /virus/soc_webui_dynamic

daemonize = /data/uwsgi/logs/soc_webui_dynamic.log

callable = application

pythonpath = /virus/soc_webui_dynamic

module = soc_webui_dynamic_start

listen = 12888

http = 0.0.0.0:5010

3.2Uwsgi的启动

/virus/party/uwsgi/uwsgi /virus/etc/uwsgi/conf/uwsgi.ini

3.uwsgi的停止

1.stop 命令

发送一个SIGINT信号给文件中的pid标识的uWSGI

--stop

SIGINT 不仅当前进程会收到这个信号,它的子进程也会收到该信号

kill 命令

你可能感兴趣的:(nginx uwsgi 配置启动停止)