zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/hellohell/p/5946648.html
Copyright © 2011-2022 走看看