首页 > 其他 > 详细

nginx详解

时间:2015-10-10 06:48:53      阅读:332      评论:0      收藏:0      [点我收藏+]

    nginx是当前流行的用作反向代理服务器,作为web服务器,某些地方甚至优于apache

特性:

    1.基于边缘触发的epoll提供IO多路复用,epoll基于事件驱动的IO模型,提高了响应连接请求的性能

    2.目前不支持模块的动态装卸载,模块只会随着程序的启动而启动,但是由阿里做二次改进的版本        tengine支持

    3.高可靠:一个主控进程master创建工作子进程worker,主控进程读取验证配置,创建绑定套接        字,启动终止维护woker进程的个数,无需重启进程让新配置加载,平滑版本升级。worker子进程        可以负责缓存加载,响应用户请求,管理缓存等

    4.低内存消耗

    5.支持热部署,支持不停机更新配置文件或更换日志文件,升级程序版本

    6.事件驱动,异步IO,内存映射(mmap),sendfile和sendfile64(可以发送更大的文件)

    sendfile机制:没有sendfile机制的话:客户请求---->内核加载磁盘数据到内核内存--->从内核内        存复制到进程内存 --->从进程内存返回到内核内存---->通过网卡回应客户请求,有了sendfile             请求---->内核加载磁盘数据到内核内存---->通过网卡响应给客户,省去了中间的多余步骤

基本功能:

    1.静态资源的web服务器,能缓存打开的文件描述符,实现打开同一个文件多次时,打开性能提升

    2.支持http,smtp,pop3三种协议的反向代理服务器,反向代理服务器放置于客户和web服务器之            间,利用缓存加速响应客户端,能处理用户请求从而减缓web服务器压力,加强web服务器安全

    3.缓存加速,负载均衡

    4.支持fastcgi协议(实现LNMP),uwsgi(实现与python交互)

    5.非DSO机制的模块化,过滤机制(对某些内容特殊处理,如压缩),ssi(服务器端包含)图像大        小调整

    6.支持SSL,提供https服务

扩展功能:

    1.基于ip和名称的虚拟主机

    2.支持长连接---keepalive

    3.平滑升级

    4.定制访问日志,支持日志缓存区提高日志存储性能

    5.url重写

    6.路径别名

    7.基于ip和用户的访问控制,用户访问控制需要借助httpd提供的htpasswd

    8.支持速率限制,并发访问数量限制

工作模式:非阻塞,事件驱动,一个主进程生成多个woker子进程,每个woker可以响应多个请求

模块类型:

    核心模块

    标准http模块

    可选的http模块

    邮件相关模块

    第三方模块

编译安装nginx:

1、解决依赖关系
编译安装nginx需要事先需要安装开发包组"Development Tools"和 "Development Libraries"。同时,还需要专门安装pcre-devel包:
# yum -y install pcre-devel(基于perl的正则表达式以支持url重写匹配)

2、安装
首先添加用户nginx,实现以之运行nginx服务进程:
# groupadd -r nginx
# useradd -r -g nginx nginx
接着开始编译和安装:
# ./configure \
  --prefix=/usr/local/nginx \
  --sbin-path=/usr/local/nginx/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --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 \
  --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=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre
# make && make install

创建上面指定的没有的路径:

mkdir -pv /var/tmp/nginx/{client,fastcgi,proxy,uwsgi}

启动nginx:

/usr/local/nginx/sbin/nginx

技术分享


配置文件/etc/nginx/nginx.conf

配置文件的http://nginx.org/en/docs/ngx_core_module.html  官方文档说明

main配置段:全局配置

http{}配置段:http协议相关配置

event{}配置段:定义event模型工作特性


主配置段指令:

1.正常运行的必备配置:

user nginx nginx  指以nginx用户和nginx组运行nginx程序

pid /var/run/nginx/nginx.pid 指定nginx守护进程的pid文件位置

woker_rlimit_nofile:指定所有woker进程能够打开的最大文件句柄数

2.性能优化相关的配置:

woker_processes #:woker进程的个数,通常少于cpu物理核心数

worker_cpu_affinity:将某woker进程绑定到某特定CPU,如果woker进程经常在各个cpu上切换,另外,对于此nginx的进程的缓存不会失效,这里用到了cpumask,0000 0001代表第一颗cpu,0000 0010代表第二颗,00000100代表第三颗,第几颗对应的就是第几位

timer_resolution:计时器解析度,降低可减少gettimeofday()调度,从而提高性能

worker_priority:worker进程优先级,这里使用nice值指明,越小优先级越高

accept_mutex:master调度各woker进程时使用的负载均衡锁,on表示能让多个进程轮流序列化地响应请求

lock_file:锁文件路径

use:使用何种事件驱动模型(select,epoll等)

worker_processes:设定单个woker进程所能处理的最大并发连接数

worker_connections:一个woker进程能处理的并发连接数

3.调试和定位问题相关配置:

只有在编译nginx时打开--with-debug才能指定debug级别,否则就算指定debug级别也无效

root@localhost nginx-1.8.0]# ./configure --help | grep debug
  --with-debug                       enable debug logging

daemon:是否以守护进程运行nginx,off表示运行在前台,这样可以输出调试信息

master_process:调试时设置为off

error_log:日志位置和级别指定

常需要调整的参数worker_processes worker_priority worker_cpu_affinity worker_connections

使用nginx -s reload可以重载nginx

4.nginx作为web服务的配置:由ngx_http_core_module提供

官方文档http://nginx.org/en/docs/http/ngx_http_core_module.html

1.server{

    location URL{

    root 指明location的url是本地文件系统哪个路径

}    #location用于定义url和本地文件系统的映射关系

}#每个server类似于httpd中的<VirtualHost>,一个server中可以有多个location

与http相关的指令只能放置于http,server,location,upstream中,但有些指令只能应用于这五种中的某几种

定义一个基于端口的虚拟主机:

技术分享

创建页面文档:

技术分享

2.listen

    listen ip:[port];

    listen port;

3.server_name 后面可以跟多个主机名,名称还可以使用正则表达式(~)或者通配符匹配

匹配优先级从高到低规则:

(1)先做精确匹配检查

(2)左侧通配符匹配检查 *.lee.com

(3)右侧通配符匹配检查 mail.*

(4)正则表达式 ~^.*\.lee\.com$

(5)default_server 以上都匹配不到则匹配此默认法则
4.location根据用户请求的url匹配定义的各location,匹配到时,此请求被相应的location块处理,例如做访问控制等

location=  |  ~  |~* |  ^~  ] uri { ... }
location @name { ... }

=表示精确匹配检查

~正则表达式模式匹配检查,区分字符大小写

~*正则表达式模式匹配检查,不区分字符大小写

^~uri的前半部分匹配,且不检查正则表达式

不带等于号的相当于起始于这个路径的都可以被匹配

匹配优先级 第一是 =  第二是 ^~ 第三是 ~ 第四是 ~*  最后是不带任何符号的

官方范例:

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

The “/” request will match configuration A, the “/index.html” request will match configuration B, the “/documents/document.html” request will match configuration C, the “/images/1.gif” request will match configuration D, and the “/documents/1.jpg” request will match configuration E.

The “@” prefix defines a named location. Such a location is not used for a regular request processing, but instead used for request redirection. They cannot be nested, and cannot contain nested locations

实验测试:

技术分享

创建各自目录下标识性页面:

技术分享

根据优先级这个匹配到了第三个location,而第三个location的root其实是指向的根,下面没有image目录,所以报错

技术分享

5.alias 用于location配置段,定义别名

       location /images/ {
                root "/vhosts/web1";
        }

http://www.lee.com/image/a.jpg<-------/vhosts/web1/images/a.jpg

       location /images/ {
                alias "/www/pictures/";
        }
http://www.lee.com/image/a.jpg<-------/www/pictures/a.jpg

本文出自 “明天过后” 博客,请务必保留此出处http://leeyan.blog.51cto.com/8379003/1701381

nginx详解

原文:http://leeyan.blog.51cto.com/8379003/1701381

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!