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