• Nginx系列一:信号与配置


    一、Nginx与信号

    Nginx支持平滑重启,相比于Apache,修改了配置文件后可以不需要先停止程序,再重新启动。

    1、启动

    nginx –c nginx.conf

    其中,-c nginx.conf可以省略不写。如果省略,则默认加载安装目录下的conf子目录中的nginx.conf。

    2、停止

    停止的方式有很多种,kill时传入不同的信号来结束或者平滑重启。Nginx的进程号记录在Pid文件中,Pid文件的位置可以在conf/nginx.conf中找到。如下图:

    无标题.png

    当然,也可以根据

    ps –ef | grep nginx

    来查找Nginx的进程号。我们可以通过kill命令来结束Nginx。

           从容停止Nginx:

    kill – QUIT Nginx进程ID

    kill – QUIT /usr/local/nginx/logs/nginx.pid

           快速停止Nginx:

    kill – TERM Nginx进程ID

    kill – TERM /usr/local/nginx/logs/nginx.pid

                  或

    kill – INT Nginx进程ID

    kill – INT /usr/local/nginx/logs/nginx.pid

           强制停止Nginx:

    kill –9 Nginx进程ID

    kill -9 /usr/local/nginx/logs/nginx.pid

    pkill -9 nginx

           3、重启

           如果修改了Nginx的配置文件,想要重启Nginx。同样可以使用kill命令来传递信号。不过,在此之前,我强烈建议先检查并测试配置文件是否正确。

           测试配置文件:

    nginx –t –c conf/nginx.conf

           若提示unknow directive *** in conf/nginx.conf:55.  Configuration file conf/nginx.conf test failed,则证明在第55行的***是非法的,需要修改。

           若提示the configuration file conf/nginx.conf syntax is ok.  Configuration file conf/nginx.conf test is successful,则证明配置文件测试通过,可以重启Nginx了。

    平滑重启Nginx:

    kill –HUP Nginx进程ID

    kill – HUP /usr/local/nginx/logs/nginx.pid

           当Nginx收到HUP信号的时候,首先会尝试解析配置文件,如果成功,则应用新的配置文件并完成重启。

           4、Nginx升级

           Nginx可以平滑升级,在我们重新便利Nginx、添加或删除服务器模块等操作后,通过kill命令并传递USR2信号进行升级。在此之前,请备份旧的可执行文件。

           1)、新的版本仍旧会安装在旧目录当中。

           2)、旧Pid文件被重命名为.oldbin

           3)、执行新版本的Nginx,启动主进程和子进程。

           4)、此时新旧版本同时在运行,需要使用kill命令并发送WINCH信号给旧的进程ID,是它从容关闭。

           5、Nginx的信号

                  1)、TERM、INT 快速关闭

                  2)、QUIT从容关闭

                  3)、HUP平滑重启,重新加载配置文件

                  4)、USR1 重新打开日志文件

                  5)、USR2 平滑升级可执行程序

                  6)、WINCH 从容关闭工作进程

    二、基本配置

           1、主配置文件

    主配置文件默认位于Nginx安装目录下的conf/nginx.conf。下面我们将逐行解读Nginx 的主配置文件。

    #使用的用户和用户组

    user  www www;

    #子进程个数,一般等于CPU的总核心数,如4核CPU则为4

    worker_processes  4 ;

    #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。

    worker_rlimit_nofile 65535;

    #错误日志的路径,可选级别为debuginfo oticewarnerrorcrit

    #error_log  logs/error.log;

    #error_log  logs/error.log  notice;

    error_log  logs/error.log  crit;

    #pid文件的路径,该文件中记录了当前正在运行的Nginx的主进程ID

    pid        logs/nginx.pid;

    #事件相关

    events {

        #使用的网络IO模型,Linux推荐epoll, FreeBSD推荐kqueue. Apache的select是非常低效的

    use epoll;

        #允许的连接数

        worker_connections  10240;

    }

    #http相关

    http {

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

    include       mime.types;

        #默认文件类型

    default_type  application/octet-stream;

        #日志格式 ip - 用户 [时间] 请求 状态 发送的字节

        log_format    main '$remote_addr - $remote_user [$time_iso8601] "$request" '

                            '$status $body_bytes_sent ';

        #接受请求的日志路径

    access_log  logs/$server_name.log main;

        #客户端所发请求的最大值

    client_max_body_size 128m;

        #开启目录列表访问,合适下载服务器,默认关闭

    autoindex off;

        #开启高效文件传输模式,是否调用sendfile函数来输出文件,通常为on,如果用来下载等磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。

    sendfile        on;

        #防止网络阻塞

    tcp_nopush     on;

        #长连接超时时间,单位是秒

    keepalive_timeout  65;

        #是否开启Gzip压缩

    gzip  on;

        #引入其他的配置文件.我配置了多个虚拟主机,每个应用一个配置文件,所以这里需要引入多个配置文件

    include vhost/vhost-*.conf;

        #服务相关

        server {

           #监听80端口,

    listen 80 default backlog=20480;

           #域名,多个用空格隔开

          server_name  localhost;

          location /nginx_status {

                allow all;

                stub_status on;

                access_log off;

          }

        }

    }

    2、配置虚拟主机

          利用虚拟主机技术,可以不用为每个应用单独的提供一组Nginx进程。在同一台服务器,同一组Nginx进程,可以运行多个网站。

    我在Nginx的安装目录下的conf子目录下新建了一个目录为vhost(在这个目录下放置所有的虚拟主机配置文件),在vhost目录中新建了一个文件,名为vhost-blog.conf。在Nginx的主配置文件conf/nginx.conf中的http模块下添加了一行include vhost/vhost-*.conf; 那么在Nginx启动时加载conf/nginx.conf,同时也会加载conf/vhost/目录下的所有配置文件。

    下面,我们来看看blog这个虚拟主机的配置文件vhost-blog.conf吧:

     

    #server模块,每个server都是一个虚拟主机,建议一个配置文件只放一个

    server {

        #监听80端口

         listen       80;

         #域名,多个用空格分割

         server_name  www.lanecn.com;

         #location模块

         location / {

             #代码根目录

                root   /var/www/blog;

                #首页文件

                index  index.html index.php;

                #REWRITE规则

                if (!-e $request_filename) {

                   rewrite  ^(.*)$  /index.php?s=$1  last;

                   break;

                }

         }

        #解析PHP,使用FastCGI的方式.

        location ~ .php

        {

            set $path_info "";

            set $real_script_name $fastcgi_script_name;

        if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {

                        set $real_script_name $1;

                        set $path_info $2;

            }

            fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;

            fastcgi_param SCRIPT_NAME $real_script_name;

            fastcgi_param PATH_INFO $path_info;

            root /var/www/blog;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            #FastCGI的配置文件.默认和nginx同目录(conf/目录下)

            include        fastcgi.conf;

        }

    }

    三、Nginx压缩输出

           Gzip是Nginx压缩输出的模块。Gzip是Gun ZIP,使用压缩技术,经过Gzip的压缩可以使得页面只有原来30%甚至更小。减少传输带宽。在服务器,Nginx调用Gzip模块进行压缩,然后消耗网络资源,将压缩数据发送给客户端的浏览器。客户端的浏览器进行解压,最终显示出来。

           Nginx的Gzip配置在配置文件的http{}中。示例如下:

    http{

    #gzip模块设置

    #开启gzip压缩输出

    gzip on;

    #最小压缩文件大小

    gzip_min_length 1k;

    #压缩缓冲区

    gzip_buffers 4 16k;

    #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)

    gzip_http_version 1.0;

    #压缩等级

    gzip_comp_level 2;

    #压缩类型,默认就已经包含text/html,所以下面就不用再写

    gzip_types text/plain application/x-javascript text/css application/xml;

    gzip_vary on;

    }

    四、Nginx缓存设置

           设置Nginx缓存,可以让Nginx告诉浏览器,本次响应的内容请保存起来,下次直接给用户看,别再来烦我了。

           缓存的方式有效的节省了服务器请求次数、带宽消耗。

           浏览器缓存可以通过expires指令输出Header头来实现。

           语法:expires [time|epoch|max|off]

           默认值:expires off

           在配置文件中,可以卸载http{}、server{}、location{}中。

           示例:

    #图片缓存时间设置,缓存时间为30天

    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$

    {

          expires 30d;

    }

    #JS和CSS缓存时间设置,缓存时间为1小时

    location ~ .*.(js|css)?$

    {

          expires 1h;

    }

  • 相关阅读:
    委托和事件
    Entity Framework应用:导航属性
    Entity Framework应用:根据实体的EntityState状态实现增删改查
    Entity Framework应用:使用EF的DataBase First模式实现数据库的增删改查
    Entity Framework应用:EntityFramework DataBase First模式
    dapper支持操作函数和事物
    单元测试
    IOC容器:Unity
    MVC教程九:异常过滤器
    MVC教程八:缓存过滤器
  • 原文地址:https://www.cnblogs.com/hellohell/p/5946648.html
Copyright © 2020-2023  润新知