Nginx介绍
nginx
www服务软件 俄罗斯人开发 开源 性能很高 web产品 大小780k c语言开发
本身是一款静态www软件,不能解析php jsp .do
最大特点
静态小文件(1m),支持高并发,占用资源少 3w并发,10个进程,内存150M(unix、linux、windows都支持)
crtl -I 域名 返回的http信息可以看到使用的web服务器
其他特点
1、配置简单、灵活、轻量
2、高并发小文件,静态几万并发
3、功能种类多,但是每个功能都不是特别强
4、支持epoll模型,使得nginx支持高并发。apache 使用select模型()
宿舍大妈案例,有朋友来宿舍找你
select即大妈带你逐一挨个去每个房间找(即线性轮回)
epoll即大妈找宿舍人员名单,房间号信息,告诉你房间号(回调callback)
所以大并发连接时select性能就下降
5、nginx可以配合动态服务(fastcgi接口)
6、利用nginx可以对ip限速,可以限制连接数
另外
基于名字端口及ip的多虚拟主机站点
支持rewrite及正则
支持基于客户端ip地址和http基本认证的访问控制
支持http响应速率限制
支持同一ip地址的并发连接或请求数限制
一般网站并发依赖如下
nginx 1-3w并发
php 300-800
db 300-800
nginx服务从大的方面的功能:
a、web服务,邮件服务
b、负载均衡(反向代理)
c、web cache(web缓存),相当于squid(CDN主要使用)
nginx的应用场合
1、静态服务(图片,视频)是另一个lighttpd。并发:几万并发html js css flv jpg gif
2、动态服务 nginx+fastcgi方式运行php,jsp,动态并发500-1500(apache+php lighttpd+fastcgi)
3、反向代理,负载均衡。日pv2000w以下,并发1w以下都可以直接用nginx做代理 (其他代理haproxy软件,F5,A10)
4、缓存服务,类似squid varnish ats
nginx支持虚拟主机,一个server标签就是一个虚拟机
1、基于域名的虚拟主机 通过域名来区分虚拟主机 应用于外部网站
2、基于端口的虚拟主机 通过端口来区分虚拟主机 内部网站 网站后台
3、基于ip的虚拟主机 几乎不用,不支持ifconfig别名,配置文件可以
2017-05-30
nginx-1.13.1 mainlineversion has been released.
2017-04-12
nginx-1.12.0 stableversion
NGINX安装(1.8.1)
1、安装PCRE (Perl Compatible Regular Expressions)
PCRE 中文perl兼容正则表达式,HTTP rewrite module requires the PCRE library
# yum install pcre pcre-devel -y
2、安装OPENSSL SSL modules require the OpenSSL library
# yuminstallopenssl-devel-y
开始安装nginx
a、添加用户
#useradd nginx -s /sbin/nologin -M
b、配置安装
tar -zxvf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure --prefix=/usr/local/nginx-1.8.1--user=nginx --group=nginx \
--with-http_stub_status_module--with-http_ssl_module
make && make install
ln -s /usr/local/nginx-1.8.1//usr/local/nginx
c、启动
# /usr/local/nginx/sbin/nginx
d、查看进程
# ps -ef | grepnginx | grep -v grep
root 1713 1 023:47 ? 00:00:00 nginx: master process/usr/local/nginx/sbin/nginx
nginx 1714 1713 023:47 ? 00:00:00 nginx: worker process
e、查看nginx编译参数及版本
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.8.1
built by gcc4.4.720120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments:--prefix=/usr/local/nginx-1.8.1 --user=nginx--group=nginx --with-http_stub_status_module --with-http_ssl_module
配置3个虚拟主机实践
#mkdir -p /usr/local/nginx/html/{bbs,www,blog} 用于放置虚拟主机网页目录
#echo"www.gtms.org" >/usr/local/nginx/html/www/index.html
#echo"bbs.gtms.org" >/usr/local/nginx/html/bbs/index.html
#echo"blog.gtms.org" >/usr/local/nginx/html/blog/index.html
#mkdir /usr/local/nginx/conf/extra 用于放置虚拟主机配置文件目录
在extra目录先建立站点配置文件 www.conf/bbs.conf/blog.conf,内容如下
root@node83 extra]# cat www.conf bbs.conf blog.conf
#www.conf
server
{
listen 80;
server_name www.gtms.org;
location / {
root html/www;
index index.html;
}
}
#bbs.conf
server
{
listen 80;
server_name bbs.gtms.org;
location / {
root html/bbs;
index index.html;
}
}
#blog.conf
server
{
listen 80;
server_name blog.gtms.org;
location / {
root html/blog;
index index.html;
}
}
#vi /usr/local/nginx/conf/nginx.conf
在http标签段加入以下内容
include extra/www.conf;
include extra/bbs.conf;
include extra/blog.conf;
#/usr/local/nginx/sbin/nginx -t 检查ok后# /usr/local/nginx/sbin/nginx -s reload
从另一台主机配置hosts文件进行测试
[root@node82 nginx]# curl 192.168.0.83 通过ip访问默认走第一个配置的主机
www.gtms.org
[root@node82 nginx]# curl www.gtms.org
www.gtms.org
[root@node82 nginx]# curl bbs.gtms.org
bbs.gtms.org
[root@node82 nginx]# curl blog.gtms.org
blog.gtms.org
配置nginx状态页面(--with-http_stub_status_module)
#vi /usr/local/nginx/conf/nginx.conf
在http标签段加入以下内容
include status/www.conf;
在extra目录先建立站点配置文件 status.conf
#status
server {
listen 80;
server_name status.gtms.org;
location / {
stub_status on;
access_log off;
}
}
#/usr/local/nginx/sbin/nginx -t 检查ok后#/usr/local/nginx/sbin/nginx -s reload
从另一台主机配置hosts文件进行测试
[root@node82 nginx]# curlstatus.gtms.org #对后端发起的活动连接数,即正在处理的活动连接数
Active connections: 1
server accepts handled requests
7711
Reading: 0 Writing: 1 Waiting: 0
nginx状态参数
server nginx启动到现在共处理了 7个连接
accepts nginx启动到现在共成功创建7次握手,和server相同,说明没丢失请求
handled requests 表示共处理了11次请求
Reading: Nginx 读取到客户端的Header信息数.
Writing: Nginx 返回给客户端的Header信息数.
Waiting: 开启keep-alive的情况下,这个值等于 active �C (reading + writing),意思就是Nginx已经处理完成,正在等候下一次请求指令的驻留连接.
所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的.如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中.
NGINX日志
Nginx错误日志
ngx_core_module模块负责http://nginx.org/en/docs/ngx_core_module.html#error_log
Syntax: error_log file [level];
Default: error_log logs/error.logerror;
Context: main, http, mail, stream,server, location
error_log 级别分为 debug, info, notice, warn,error, crit,alert,emerg(不要配置低等级,带来很大磁盘IO,如果日志太多,可以清空再看
Nginx访问日志
ngx_http_log_module模块负责http://nginx.org/en/docs/http/ngx_http_log_module.html
Syntax:
access_log path [format [buffer=size] [gzip[=level]][flush=time] [if=condition]];
access_log off; 表示不记录访问日志
Default:
access_log logs/access.log combined;
Context: (一般配置在vhost中)
http, server, location, if in location, limit_except
Example:
access_log logs/access_www.log main gzip buffer=32k flush=5s;
For gzip compression towork, nginx must be built with the zlib library.
也可以直接发到远程服务器
access_logsyslog:server=address[,parameter=value] [format [if=condition]];
log_format 用来定义记录日志的格式(可以定义多种格式,取不同名字)
access_log 用来指定日志文件的路径及使用的何种日志格式记录
nginx默认注释掉的
#log_format main '$remote_addr -$remote_user [$time_local] "$request" '
# '$status$body_bytes_sent "$http_referer" ' (http_referer从哪过来的)
# '"$http_user_agent""$http_x_forwarded_for"';(反向代理记录客户端ip)
#access_log logs/access.log main;
1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的真实ip地址;
2.$remote_user:用来记录客户端用户名称;
3.$time_local : 用来记录访问时间与时区;
4.$request : 用来记录请求的url与http协议;
5.$status : 用来记录请求状态;成功是200,
6.$body_bytes_sent :记录发送给客户端文件主体内容大小;
7.$http_referer : 用来记录从哪个页面链接访问过来的;
8.$http_user_agent :记录客户端浏览器的相关信息;
日志实例:192.168.0.82 - - [15/Dec/2016:02:04:24 +0800] "GET / HTTP/1.1"20018"-""curl/7.19.7(x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3libidn/1.18 libssh2/1.4.2""-"
Nginx访问日志轮询切割(没有自己的切割工具
简单的日志轮询脚本
vi cut_nginx_log.sh
#!/bin/sh
Dateformat=`date +%Y%m%d`
Basedir="/usr/local/nginx"
Nginxlogdir="$Basedir/logs"
Logname="access_www"
[ -d $Nginxlogdir] && cd$Nginxlogdir || exit 1
[ -f ${Logname}.log ] || exit 1
/bin/mv ${Logname}.log${Dateformat}_${Logname}.log
$Basedir/sbin/nginx -s reload
写入crontab
0000 * * * /bin/sh /home/script/cut_nginx_log.sh >/dev/null2>&1
日志分析相关工具:
syslog,rsyslog,Awstats,flume,logstashscrash scribe kafka,storm。ELK=Elasticsearch+Logstash+Kibana