更新至第三章-读实战Nginx取代Apache的高性能Web服务器之笔记-_nginx

 

 

 读实战Nginx取代Apache的高性能Web服务器之笔记

 

 


 

原书作者:张宴

 

原书博客:

 

http://blog.s135.com

书中示例代码:

 

http://blog.s135.com/book/nginx/code

原书作者邮箱:

net@135.com

Nginx官方:

http://nginx.org/ (英文) 


 

第一章:基础篇

 

LInux下主要web平台有Apache、Nginx、Lighttpd、Tomcat、IBMWebSphere。以及windows下的IIS

国内使用Nginx平台的有,新浪博客,新浪播客、网易新闻、六间房、56..com、Discuz官方论坛、水木社区、豆瓣、YUPOO相册、海内SNS、迅雷在线等

 

 

 

两图对比

更新至第三章-读实战Nginx取代Apache的高性能Web服务器之笔记-_休闲_02 使用理由: 更新至第三章-读实战Nginx取代Apache的高性能Web服务器之笔记-_实战Nginx取代Apache的高性能W_03

 


更新至第三章-读实战Nginx取代Apache的高性能Web服务器之笔记-_休闲_04

官方测试:Nginx支持5万并连接、实际生产可支撑2~4万并发连接数。Nginx使用Epoll(Linux2.6内核)和Kqueue(Freebsd)网络I/O  Apache则使用select模型,其实比较稳定的Prefork模式为多进程模式,所以需派生子进程,所以占用资源比Nginx高。

 

Nginx与PHp(FastCGI)内存占用算法:

 

 

单个Nignx进程消耗内存:15MB

 

单个Php-cgi进程消耗:20MB

3万并发则会开启10个Nginx进程以及64个php-cgi进程

 


更新至第三章-读实战Nginx取代Apache的高性能Web服务器之笔记-_服务器_05

成本低廉:

同等产品F5、BIG-IP、NetScale等硬件负载均衡交换机需十多万甚至几十万,而Nginx采用2-clause BSD-like协议,可以免费使用,并且可以用于商业用途。

 

配置文件非常简单(通俗易懂)、支持Rewrite重写规则(根据域名、URL的不同,将HTTP分发到后端服务器群组上)。内置的健康检查功能(某台web挂了,不会影响前段访问)、节省带宽(支持Gzip压缩)、稳定性高、(用于反向代理,基本上不会挂)支持热部署。

 

 

第二章Nginx的安装

官方下载地址:http://nginx.org/en/download.html  下载最稳定的版本

依赖包: gcc  zlib zlib-devel openssl openssl-devel pcre pcre-devel 

CenTosyum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel

Tar zxvf nginx-x.xx.tar.gz   //解压包

Cd nginx-x.xx //进入包

./configure  //预配置 明确请 ./configure --help配置设置

Make //预编译

Make //编译安装 

Nginx的启动

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

可执行文件路径 参数(指定配置目录) 配置文件路径

Nginx的停止

PS -ef  | grep nginx 查找Nginx的主进程号

Master process 为主进程号, worker procexx为从进程号

Kill -信号类型

1从容停止nginx

Kill -QUIT Nginx主进程号

快速停止 Nginx

Kill - TERM Nginx主进程号   kill -INT nginx主进程号

强制停止Nginx进程 

Pkill -9 nginx

Nginx的平滑重启

过程:Nginx接收到HUb信叫,它先解析配置文件,成功应用新的配置文件,如果失败还是用卓越的配置文件

Pd Nginx配置文件是否正确

/usr./local/webserver/nginx/sbin/nginx -t -c  /usr/local/webserver/nginx/conf/nginx.conf

Kill -HUP 主进程号

------------------------------------------------------------------------------------------------------------------------

[root@nginx1 nginx-1.0.12]# /usr/local/fzserver/sbin/nginx -t -c /usr/local/fzserver/conf/nginx.conf

nginx: the configuration file /usr/local/fzserver/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/fzserver/conf/nginx.conf test is successful

[root@nginx1 nginx-1.0.12]# 

[root@nginx1 nginx-1.0.12]# 

[root@nginx1 nginx-1.0.12]# 

[root@nginx1 nginx-1.0.12]# ps -ef |grep nginx

root      9395     1  0 06:26 ?        00:00:00 nginx: master process /usr/local/fzserver/sbin/nginx -c /usr/local/fzserver/conf/nginx.conf

nobody    9396  9395  0 06:26 ?        00:00:00 nginx: worker process                                                

root      9400  6881  0 06:29 pts/0    00:00:00 grep nginx

[root@nginx1 nginx-1.0.12]# 

[root@nginx1 nginx-1.0.12]# 

[root@nginx1 nginx-1.0.12]# kill -HUP 9395

------------------------------------------------------------------------------------------------------------------

信号控制:

TERM,INT 快速关闭;

QUIT 从容关闭

HUP 平滑重启

USR 重新打开日志文件,在切割日志时用途较大

USR2 平滑升级可执行程序

WINCH 从容关闭工作进程

NGinx的平滑升级

过程:使用新的可执行程序,或编译包代替到旧的目录当中,然后关闭旧的主进程号(kill -USR2),再然后启动新的主进程和子进程,然后再关闭旧的子进程。就完成一次平滑升级

--------------------------------------------------------------

先安装或替换

Ps -ef |grep nginx 查看旧版本的主进程号

Kill -USR2 旧版本的主进程号(会重命名可执行文件为 path/logs/nginx.pid.oldbin)

Kill -WINCH 旧版本的主进程号

Kill -HUB 旧版本的主进程号

Kill -QUIT 旧版本的主进程号

-------------------------------------------------------------

 第三章Nginx的基本配置与优化

配置文件组成:

.....

Events

{

.....

}

http

{

....}

Server

{

.......

}

Server  

{

//多个server组成

}

......

}

虚拟主机:

添加两个虚拟IP

[root@nginx1 nginx-1.0.12]# ifconfig eth0:1 192.168.100.82 broadcast 192.168.100.1 netmask 255.255.255.128 up

[root@nginx1 nginx-1.0.12]# route add -host 192.168.100.82 dev eth0:1

[root@nginx1 nginx-1.0.12]# ifconfig eth0:1 192.168.100.83 broadcast 192.168.100.1 netmask 255.255.255.128 up

[root@nginx1 nginx-1.0.12]# route add -host 192.168.100.83 dev eth0:1

重启后会消失,所以建议写在 etc/rc.local

虚拟主机基于主机

虚拟主机则在nginx.conf中配置就成

...

http{

server{

虚拟主机1

}

server{

虚拟主机2

}

}

....

基于域名:

...

http{

server{

虚拟主机1

Server_name xxxx.xxx.com;

}

server{

虚拟主机2

Server_name xxxx.xxx.com;

}

}

....

日志切割过程:

设定的时间段把文件移动到日志目录,然后由nginx平滑重启,过程中会创建一个默认的日志记录。

脚本如下。

#! /bin/bash

#日志路径

Log_path="/date1/logs"

Mkdir -p $(logs_path)$(date -d "yesterday"+"%Y")/$(date -d "yesterday" + "%m")/mv $(logs_path)access.log $(logs_path)$(date -d "yesterday" + "%Y")/$(date -d "yesterday" + "&m")/access_$(date -d "yesterday" + "%Y%m%d").log

Kill -usr1 'cat /usr/local/fzserver/nginx.pid'  

创建0000执行脚本

Crontab -e

00 00 8 * * * /bin/bash /usr/local/fzserver/sbin/cut_nginx_log.sh  

Nginx压缩过程

Web服务器压缩可以变为原来的30%大小,然后交后客户端浏览器去解析。

代码放与http{}

开启gzip压缩

------------------------------------------------------------------------------------------

  gzip on;

  gzip_min_length  1k;

  gzip_buffers     4 16k;

  gzip_http_version 1.1;

  gzip_comp_level 2;

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

  gzip_vary on;

------------------------------------------------------------------------------------------

Nginx列目录

Location /{

Autoindex on;

}

Nginx浏览器本地缓存

过程:为了加快速度,浏览器(用户本地)保存了用户刚才访问的页面,下次访问时直接读取,

Expires [time|epoch|max|off]

默认值:expires off

作用域:http server location

--------------------------------

Localtion - .*\.(gif|jpg|jpeg|png|bmp|swf)$

{

Expires 30d;

}

Location ~ .*\.(js|css)?$

{

Expires lh;

}