nginx:
engine x
Tengine
Registry
libervent:高性能的网络库
nginx:特性:
模块化设计、较好的扩展性:
高可靠
master --》 worker
低内存消耗
10000个keep-alive模式下的连接,仅需要2.5MB的内存
支持热部署
不停机而更新配置文件、日志文件滚动、升级程序版本
支持事件驱动,AIO,MMAP
基本功能;
静态资源的web服务器,能缓存打开的文件描述符;
http、smtp、pop3协议的反向代理服务器。
缓存、负载均衡
支持FastCGI(fpm,lnmp),uWSCI(python)
模块化,过滤器ZIP,ssi及图像大小调整
支持SSL
扩展功能:
基于名称的ip的虚拟主机;
支持keepalive
支持平滑升级
定制访问日志、支持使用日志缓冲区提供日志存储性能
支持url,rewrite
支持路径别名
支持基于ip及用户访问控制
支持速率限制、支持并发限制
nginx的基本架构;
一个master进程,生成一个或者多个worker进程
事件驱动:epoll(边缘触发)、kqueue,/dev/poll
复用器:select,poll,rt signal
支持sendfile,sendfile64
支持AIO
支持mmap
nginx的工作模式:非阻塞、事件驱动、由一个master进程生成多个worker线程,每个worker响应n个请求
连接数:work*n
模块类型:
核心模块
Standard HTTP modules
Optional HTTP modules
mail modules
3rd party modules
安装方法:
源码:编译安装
制作好的程序包:rpm包
yum -y install pcre-devel
yum -y install openssl openssl-devel
groupadd nginx
useradd -g nginx -r nginx
tar xfv nginx-1.6.1.tar.gz
cd nginx-1.6.1
./configure --help
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf --user=nginx --group=nginx
--error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log
--pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module
--with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client
--http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
make && make install
mkdir -pv /var/tmp/nginx/{client,proxy,fastcgi,uwsgi}
配置文件:
main配置段,全局配置段
event:定义event模型工作特性
http{}:定义http协议相关配置
配置指令:要以分号结尾;
支持使用变量:
内置变量:模块自带
自定义变量:set var_naem value
主配置段的指令:
用于调试,定义问题
正常运行必备的配置
优化性能的配置
事件相关的配置
1.user username [groupname]
指定运行worker进程的用户和组
user nginx nginx;
2.pid /path/to/pid_file
指定nginx守护进程的pid文件;
pid /var/run/nginx/nginx.pid;
3.worker_rlimit_nofile #;
指定所有worker进程能打开的最大文件句柄数
性能优化相关配置;
1.worker_process #
worker进程的个数:通常应该略少于cpu物理核心数
2.worker_cpu_affinity
提升缓存的命中率
context switch:会产生cpu不必要的消耗
worker_cpu_affinity
3.time_resolution
计时器解析度:降低此值。可减少gettimeofday()系统调用次数
4.worker_priority number;
指明worker进程的nice值;
-20,19
100,139
事件相关配置:
1.accept_mutex;
master调度用户请求至各worker进程时使用的负载均衡锁,ON表示能
用多个worker轮流的,序列化的响应新请求;
2.lock_file file:accept_mutex用到的锁文件路径
3.use[epoll|rtsig|select|poll]:指明使用的事件模型,nginx自动选择
4.worker_connecttions #:单个worker进程所处理的最大并发连接数量;
worker_connecttions 10240(51200)
用户调试,定位问题;安装时--with-dedug
1.daemo{on|off}
是否以守护进程方式运行nginx,调试时设置为off
2.master_process{ON|OFF}
是否以master/worker模型来运行nginx,调试时可以设置为off
3.error_logfile:定义位置,级别,格式
常需进行调整的参数
worker_process,worker_connecttions,worker_cpu_affinity,worker_priority
新配置生效方式:
nginx -s reload
nginx -s quit ,reopen,stop
nginx作为web服务器时使用的配置;
http{}:由ngx_http_core_module模块所引入
配置框架:
http{
upstream{。。。}
server{
location{...}每个location用于定义URL与本地文件系统的映射关系
}每个server类似virtualhost
server{...
}
}
1.在nginx.conf中加入,实现基于端口的虚拟主机
server {
listen 8080;
server_name centos6;
root "/vhost/web1";
}
mkdir /vhost/web1
nginx -s reload
2.listen
指明地址端口
3.server_name
后可以跟多个主机:名称还可以使用正则表达式~或通配符
4.root path
设置资源路径映射:
5.location
根据用户请求的URI来匹配定义的各location
可以定义多个location,根据请求进行匹配
server {
listen 8080;
server_name centos6;
location / {
root "/vhosts/web1";
}
location /images/ {
root "/vhosts/images";
}
location ~* \.(txt|text)$ {
root "/vhosts/text";
}
}
6.alias
用于location配置段,定义路径别名
注意:root表示指明路径为对应的location “/” URL;alias表示路径映射,即location指明后定义的URL是相对于alias所指明的路径而言
7.index file
默认主页
index index.php index.html
8.error_page code [...][=code]URI| @name
根据http响应状态码来指明特用的错误页面
error_page 404 /404_test.html
9.基于IP的访问控制
allow 172.16.6.49;
deny all;
10.基于用户的访问控制
basic,digest
auth_basic
auth_basic_user_file:账号密码文件建议使用htpasswd来创建;
11.https服务
生成私钥,生成证书签署请求,并获得证书
server {
listen 443 ssl;
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
13.rewrite regex replacement flag;
rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
flag:
last:此rewrite规则被匹配修改后,不会再被后面的rewrite规则处理。重新作为URL再从头匹配
break:匹配之后跳出location
redirect;以302响应码临时重定向,返回新URL
permanent:以301响应码永久重定向,返回新URL