|
nginx是http服务器和反向代理服务器,又是IMAP/POP3/SMTP 代理服务器
nginx特性:
基本功能:
1、能够实现服务于静态文件,也就是静态资源的web服务器,能自动缓存打开的文件描述符;
2、反向代理服务器,能够实现简单的负载均衡和冗余
3、能够支持FastCGI协议
4、有模块化话功能,但非DSO(动态装卸载)机制,支持多种过滤器gzip,SSI和完成图像大小调整等
5、支持SSL功能
扩展功能:
1、能够基于名称和IP做虚拟主机
2、支持keepalive
3、支持平滑的配置更新或程序版本升级
4、支持定制访问日志,支持使用日志缓存以提高性能
5、支持url rewrite(地址重写)
6、支持路径别名
7、支持基于IP及用户的认证
8、支持速率限制,并发限制等
nginx的基本架构:
是由一个master生成一个或多个worker结合工作,一个worker响应多个用户请求;基于事件驱动工作,有kqueue,epoll,/dev/poll(非事件驱动,是消息通知的有select,poll,rt singals);支持sendfile;支持AIO机制(异步IO);支持mmap
特性总结:nginx有非阻塞、事件驱动,一个master生成多个worker,一个worker响应多个用户请求的特性;master进程多用于平滑升级。
nginx的模块类别:
核心模块
标准http模块
可选的http模块
邮件模块
第三方扩展模块
nginx的使用:
安装方法:
编译安装
rpm安装:yum(epel源中)
安装环境:
1
2
| # yum install Development Tools Server Platform Developmengt
# yum install pcre-devel
|
nginx的配置文件:
main配置段
http配置段
http {
}
注:在配置参数需要以分号结尾,否则会认为是语法错误;#表示注释信息;配置语法格式: 参数名 配置值1[值2......]
配置文件中支持使用变量:有模块内置变量和用户自定义变量(ser var_name value)
nginx基本核心配置的类别:
用于调试,定位问题;正常运行的必备配置;优化性能的配置;优化性能的配置;事件类的配置
在nginx运行worker进程是以普通用户身份运行的,为nginx用户和nginx组;
使用示例:
编译安装示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
| # get nginx-1.4.7.tar.gz \\下载程序包
# tar xf nginx-1.4.7.tar.gz \\解压程序包
# ./configure \
--prefix=/usr/local/nginx \
--error-log-path=/data/applogs/nginx/error.log \
--http-log-path=/data/applogs/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \ 客户端请求的临时目录
--http-client-body-temp-path=/usr/local/nginx/client/
--http-proxy-temp-path=/usr/local/nginx/proxy/ \ 缓存上流目录
--http-fastcgi-temp-path=/usr/local/nginx/fcgi/ \
--http-uwsgi-temp-path=/usr/local/nginx/uwsgi \
--http-scgi-temp-path=/usr/local/nginx/scgi \
--with-pcre
# make && make install
# groupadd -r nginx
\\创建组
# useradd -r -g nginx nginx \\创建用户
# mkdir /var/tmp/nginx \\创建刚才指定模块的目录
nginx的启动路径:/usr/sbin/nginx
nginx的启动选项,使用/usr/sbin/nginx -h 查看;
-t:表示检查配置文件信息
# vim /etc/rc.d/init.d/nginx \\添加脚本启动服务文件
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
# chmod +x /etc/rc.d/init.d/nginx \\添加执行权限,然后就可以启动服务了
# mkdir .vim/syntax -pv \\ 因为在配置文件中没有显示语法高亮, 这里设置一下语法高亮,创建一个目录,用于 存放显示nginx配置文件语法高亮的程序包
# cd .vim/syntax
#get nginx.vim \\下载名为nginx.vim的程序包
#vim filetype.vim \\创建一个filetype的文件
au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/conf/* if &ft == ' ' | setfiletype nginx | endif \\在filetype文件中添加此语句
# cd /etc/nginx
# vim nginx.conf \\进入文件后便可发现语句已经高亮,下面为配置文件的内容;
|
正常运行的必备配置:
1
2
3
4
5
| user nginx;
\\指定运行worker进程的用户和组,格式:user username [groupname]
pid /path/to/pidfile_name; \\指定nginx的pid文件
worker_rlimit_nofile # ; \\表示指定一个worker进程所能够打开的最大文件句柄数
worker_rlimit_sigpending #; \\表示设定每个用户能够发往worker进程的信号数量
|
优化性能相关的配置:
1
2
3
4
5
| worker_processes #; \\指定worker进程的个数,建议通常其数值应为CPU的物理核心数减1;对提高系统性能有很大帮助
worker_cpu_affinity cpumask....; \\指定cpu掩码;cpu掩码是指当系统有几颗cpu的物理核心就会显示几个0,比如:当有四个时则显示为0000,当需要调用1颗cpu时则使用0001来表示,当需要调用2颗时,则使用0010表示;当需要调用3颗时,则使用0100表示;对提高系统性能有很大帮助
ssl_engine device;\\指定存在ssl硬件加速器的服务器上,指定所使用的ssl硬件加速设备;
timer_resolution t; \\每次内核事件调用返回时,都会使用gettimeofday()来更新nginx缓存时钟;t表示时间值,每隔多长时间返回一次;timer_resolution用于定义每隔多久才会由gettimeofday()更新一次缓存时钟;在x86-64系统上,gettimeofday()代价已经很小,可以忽略此配置;但在较老的系统上可按使用情况设定
worker priority nice; \\优先级,nice值为-20到19之间的值;对提高系统性能有很大帮助
|
事件相关的配置:
1
2
3
4
5
6
| accept_mutex [on|off]; \\表示是否打开nginx负载均衡锁;会均衡请求到worker进程上;此锁能够让多个worker进程轮流的、序列化的与新的客户端建立连接;而通常当一个worker进程的负载达到其上限的7/8时,master就尽可能不再将请求调度到此worker上;默认为打开状态
lock_file /path/to/lock_file; \\指定负载均衡锁文件;
accept_mutex_delay #ms; \\使用accept锁模式中,一个worker进程为取得accept锁的等待时长;如果某个worker进程在某次试图取得锁时失败了,至少要等待#ms才能再一次请求锁;默认为500毫秒(ms)
multi_accept on|off; \\是否允许一次性的响应多个用户请求;默认为off
use [epoll|rtsig|select|poll]; \\定义使用的事件模型,建议让nginx自动选择,默认为epoll
worker_connections #; \\每个worker能够并发响应最大请求数;
|
用于调试、定位问题:只调试nginx时使用
1
2
3
| daemon [on|off]; \\是否让nginx运行后台,默认为on,调试时可以设置off,使得所有信息去接输出控制台
master_process on|off; \\是否以master/worker模式运行nginx,默认为on,调试时可设置为off以方便追踪
error_log /path/to/error_log level; \\错误日志文件及其级别,默认为error级别;调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能;
|
在nginx官网http://nginx.org中有更加详细的配置文件解释说明
|
|
|