Nginx系列一:信号与配置
一、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系列一:信号与配置的更多相关文章
- Nginx系列4之基础配置
preface 公司跑得大多数是LNMP平台,所以借此机会多多了解下Nginx.下面主要说说Nginx下面几点: 防盗链 日志切割 负载均衡 虚拟主机 location匹配解释 substatus状态 ...
- 【Nginx系列】Nginx虚拟主机的配置核日志管理
Nginx配置段 #user nobody; worker_processes 1;// 有1个工作的子进程,可以自行修改,但太大无益,因为要争夺CPU,一般设置为 CPU数*核数 #error_lo ...
- 死磕nginx系列--配置文档解读
nginx配置文件主要分为四个部分: main(全局设置) http ( ) upstream(负载均衡服务器设置) server(主机设置) location(URL匹配特点位置的设置) serve ...
- Nginx学习笔记二基本配置
1.Nginx的配置文件默认在Nginx程序安装目录的conf二级目录下,主配置文件为nginx.conf.假设您的Nginx安装 在/usr/local/webserver/nginx/目录下,那么 ...
- Nginx 之一:编译安装nginx 1.8.1 及配置
一:基介绍 官网地址www.nginx.org,nginx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的,开发工作最早从2002年开始,第一次公开发布时间 ...
- 快速掌握Nginx(四) —— Nginx日志切片和常用配置总结
1.Nginx日志管理 1.日志简单介绍 Nginx提供了日志记录的功能,日志文件在对我们管理网站十分有用,通过访问日志(access_log)我们可以获取请求来源.客户端信息.请求的资源等信息:通过 ...
- 死磕nginx系列--nginx 目录
死磕nginx系列--nginx入门 死磕nginx系列--nginx配置文件 死磕nginx系统-nginx日志配置 死磕nginx系列--nginx服务器做web服务器 死磕nginx系列--使用 ...
- nginx.conf 集群完整配置
###############################nginx.conf 集群完整配置############################### #user nobody; # user ...
- LNMP(linux+nginx+mysql+php)服务器环境配置【转载】
本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/05/17/2507102.h ...
随机推荐
- [Linux] 安装JBoss - CentOS
CentOS安装Jboss 7 AS方法:(安装java跳过) 1.首先下载JBoss 7 AS的zip文件. 2.使用SSH,上传到CentOS中.(如何使用的是wget命令下载,可以跳过些步),这 ...
- 为模版设计师而生的Twig(上)-Twig使用指南
原文地址:http://my.oschina.net/veekit/blog/268828 1. 概要 模板是一个简单的文本文件.它可以生成任何基于文本的格式(HTML.XML.CSV等).它不具有特 ...
- Best Practices for Performance_4.Optimizing Battery Life 获取充电状态、电池信息,"sticky"类型的广播
http://developer.android.com/training/monitoring-device-state/index.htmlhttp://developer.android.com ...
- APS-C画幅与全画幅
本次对比将通过视角.景深.暗角.细节等几个方面来展现APS-C画幅与全画幅的差别.希望这篇帖子中的一些说明,能对一些纠结在APS-C画幅 与全画幅之间的朋友有所帮助与参考. 同等焦距下APS-C画幅与 ...
- Spring Mvc Rest为不支持DELETE/PUT的浏览器添加DELETE/PUT支持
现在都流行RESTFul,但是有一个问题,有些浏览器现在就不支持delete/put方式的请求,这些请求发出去之后都会变成get请求,导致rest接口无法被访问到.为了解决这个问题,spring提出了 ...
- 关于ios使用jquery的on,委托事件失效
$('.parents').on("click",'.child',function(){}); 类似上面这种,在ios上点击"child"元素不会起作用,解决 ...
- 序列最小最优化算法(SMO)-SVM的求解(续)
在前一篇文章中,我们给出了感知器和逻辑回归的求解,还将SVM算法的求解推导到了最后一步,在这篇文章里面,我们将给出最后一步的求解.也就是我们接下来要介绍的序列最小最优化算法. 序列最小最优化算法(SM ...
- 没想到cnblog也有月经贴,其实C#值不值钱不重要。
呵呵,就不倚老卖老了,从basic走过来,一路经历vb,vf,delphi,C#,php,asp,html,js,css,太多太多的开发语言,包括面向对象编程思想,语义化页面结构等等,除了高级的编程技 ...
- Lucene学习之一:使用lucene为数据库表创建索引,并按关键字查询
最近项目中要用到模糊查询,开始研究lucene,期间走了好多弯路,总算实现了一个简单的demo. 使用的lucene jar包是3.6版本. 一:建立数据库表,并加上测试数据.数据库表:UserInf ...
- Spring注解学习
参考链接 http://blog.csdn.net/xyh820/article/details/7303330/