一、Nginx与信号

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

1、启动

nginx –c nginx.conf

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

2、停止

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

当然,也可以根据

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;

#错误日志的路径,可选级别为debug\info\notice\warn\error\crit

#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;

}

Nginx系列一:信号与配置的更多相关文章

  1. Nginx系列4之基础配置

    preface 公司跑得大多数是LNMP平台,所以借此机会多多了解下Nginx.下面主要说说Nginx下面几点: 防盗链 日志切割 负载均衡 虚拟主机 location匹配解释 substatus状态 ...

  2. 【Nginx系列】Nginx虚拟主机的配置核日志管理

    Nginx配置段 #user nobody; worker_processes 1;// 有1个工作的子进程,可以自行修改,但太大无益,因为要争夺CPU,一般设置为 CPU数*核数 #error_lo ...

  3. 死磕nginx系列--配置文档解读

    nginx配置文件主要分为四个部分: main(全局设置) http ( ) upstream(负载均衡服务器设置) server(主机设置) location(URL匹配特点位置的设置) serve ...

  4. Nginx学习笔记二基本配置

    1.Nginx的配置文件默认在Nginx程序安装目录的conf二级目录下,主配置文件为nginx.conf.假设您的Nginx安装 在/usr/local/webserver/nginx/目录下,那么 ...

  5. Nginx 之一:编译安装nginx 1.8.1 及配置

    一:基介绍 官网地址www.nginx.org,nginx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的,开发工作最早从2002年开始,第一次公开发布时间 ...

  6. 快速掌握Nginx(四) —— Nginx日志切片和常用配置总结

    1.Nginx日志管理 1.日志简单介绍 Nginx提供了日志记录的功能,日志文件在对我们管理网站十分有用,通过访问日志(access_log)我们可以获取请求来源.客户端信息.请求的资源等信息:通过 ...

  7. 死磕nginx系列--nginx 目录

    死磕nginx系列--nginx入门 死磕nginx系列--nginx配置文件 死磕nginx系统-nginx日志配置 死磕nginx系列--nginx服务器做web服务器 死磕nginx系列--使用 ...

  8. nginx.conf 集群完整配置

    ###############################nginx.conf 集群完整配置############################### #user nobody; # user ...

  9. LNMP(linux+nginx+mysql+php)服务器环境配置【转载】

    本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/05/17/2507102.h ...

随机推荐

  1. Go语言学习笔记1 变量,类型以及赋值

    1.变量 1.1 声明变量 使用var关键字可以创建一个指定类型的变量: var i int = 0 var i = 0 var i int 以上三个表达式均是合法的,第三个表达式会将i初始化为int ...

  2. 关于redis的主从复制

    redis主从复制需要注意的一个问题 这两天我朋友在使用redis偶尔会遇见一个问题,就是所有的缓存莫名其妙会不见,找了好久都没找到,他一直以为 有人错误执行了什么命令 他跟我说的时候我估计是主从复制 ...

  3. pythonbrew, pythonz, virtualenv

    Python 的虛擬環境及多版本開發利器─Virtualenv 與 Pythonbrewhttp://www.openfoundry.org/tw/tech-column/8516-pythons-v ...

  4. 从click事件理解DOM事件流

    事件流是用来解释页面上的不同元素接受一个事件的顺序,首先要明确两点: 1.一个事件的影响元素可能不止一个(同心圆理论),但目标元素只有一个. 2.如果这些元素都绑定了相同名称的事件函数,我们怎么知道这 ...

  5. python(30) 获取网页返回的状态码,状态码对应问题查询

    获取访问网页返回的状态码 html = requests.get(Url) respon = html.status_code 以下内容来自于维基百科:点击查看网页 1xx消息 这一类型的状态码,代表 ...

  6. Linux系统的压缩技术

    1.常见的压缩文件扩展名 *.Z ---> compress程序压缩的文件. *.gz --->gzip 程序压缩的文件: *.bz2------>bzip2程序压缩的文件: *.t ...

  7. mysql的故事

    所有的条件都分开理解,命令之间没有包含吗?

  8. makefile 函数集

    1 if 函数 语法 $(if CONDITION,THEN-PART[,ELSE-PART]) 功能 第一个参数"CONDITION",在函数执行时忽略其前导和结尾空字符,如果包 ...

  9. C# 报表设计器 (winform 设计端)开发与实现生成网页的HTML报表

    记得2010年之前,公司的项目基本上都要用到报表,以前我们常用的方法就是针对客户的需求来定制化开发(基本上是死写代码)来实现,经常导致项目经常性的延期,因为客户的需求经常会变化,随着用户的使用认知度的 ...

  10. Javascript 实现HTML字符串的储存

    在js中使用HTML字符串时,可以不用理会字符串的单引号和双引号的转义,因为使用的注释,注释当然什么都可以写. PS:这个有点类似于 php中的 <<<语法(heredoc和nowd ...