全文: Nginx是这款轻量的Web 伺服器/逆向代理伺服器及邮件(IMAP/POP3)代理伺服器,并在两个BSD-like 协定下发行。其特点是占据缓存少,mammalian潜能强,实际上nginx的mammalian能力确实在同类型的页面伺服器中表现良好,中国内地采用nginx中文网站使用者有:腾讯、天猫、新浪、网易、腾讯、淘宝网等。
作者:驻云科技
书名:http://click.aliyun.com/m/42002/
为什么要用Nginx?
目前 Nginx 的主力竞争者要数 Apache ,在这里小贴士对二者做两个简单的对照,帮助大家更快的认知 Nginx 的优势。
1、做为 Web 伺服器:
相比 Apache,Nginx 采用更慢的资源,全力支持更多的mammalian相连,充分体现更高的工作效率,这两点使 Nginx 尤其受到应用应用软件服务商的热烈欢迎。在高相连mammalian的情况下,Nginx是Apache伺服器极好的代替品: Nginx在美国是做虚拟主机营生的老板娘们经常优先选择的应用应用软件之一,能全力支持高达 50000 个mammalian相连数的积极响应, 非常感谢Nginx 为我们优先选择了 epoll and kqueue 做为开发数学模型。
Nginx做为阻抗平衡伺服器: Nginx 既能在内部直接全力支持 Rails 和 PHP 流程对内展开服务项目, 也能全力支持做为 HTTP代理 伺服器对内展开服务项目。Nginx采用C展开撰写, 无论是计算资源开支还是CPU采用工作效率都比 Perlbal 要好很多。
2、Nginx 实用性简约, Apache 复杂:
Nginx 开启特别容易, 并且几乎能努力做到7*24无间断运转,即使运转多个月也不须要再开启. 你还能无间断服务项目的情况下展开应用软件版的升级换代。
Nginx 动态处理稳定度 Apache 高 3倍以上,Apache 对 PHP 全力支持非常简单,Nginx 须要相互配合其他前端来采用 ,Apache 的模块比 Nginx 多。
3、最核心的区别在于:
apache是并行多民主化数学模型,两个相连相关联两个民主化;nginx是触发器的,多个相连(万级别)能相关联两个民主化 。
4、二者的擅长领域分别是:
nginx的优势是处理动态请求,cpu缓存采用率低,apache适合处理动态请求,所以现在一般前端用nginx做为逆向代理抗住压力,apache做为前端处理动态请求。
Nginx 基本采用方法
系统平台:CentOS release 6.6 (Final) 64位。
一、安装编译工具及库文件
二、首先要安装 PCRE
1、PCRE 作用是让 Nginx 全力支持 Rewrite 功能。下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
2、解压安装包:
3、进入安装包目录
4、编译安装
5、查看pcre版
三、安装 Nginx
1、下载 Nginx,下载地址:http://nginx.org/download/nginx-1.6.2.tar.gz
2、解压安装包
3、进入安装包目录
4、编译安装
5、查看nginx版
到此,nginx安装完成。
四、Nginx 实用性
创建 Nginx 运转采用的使用者 www:
实用性nginx.conf ,将/usr/local/webserver/nginx/conf/nginx.conf替换为以下内容
检查实用性文件ngnix.conf的正确性命令:
五、开启 Nginx
Nginx 开启命令如下:
六、访问站点
从浏览器访问我们实用性的站点ip:
Nginx 常用指令说明
1. main 全局实用性
nginx在运转时与具体业务功能(比如http服务项目或者email服务项目代理)无关的一些参数,比如工作民主化数,运转的身份等。
woker_processes 2
在实用性文件的顶级main部分,worker角色的工作民主化的个数,master进程是接收并分配请求给worker处理。这个数值简单一点能设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l,也是 auto 值,如果开启了ssl和gzip更应该设置成与逻辑CPU数量一样甚至为2倍,能减少I/O操作。如果nginx伺服器还有其它服务项目,能考虑适当减少。worker_cpu_affinity
也是写在main部分。在高mammalian情况下,通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。worker_connections 2048
写在events部分。每两个worker民主化能mammalian处理(发起)的最大相连数(包含与客户端或前端被代理伺服器间等所有相连数)。nginx做为逆向代理伺服器,计算公式 最大相连数 = worker_processes * worker_connections/4,所以这里客户端最大相连数是1024,这个能增到到8192都没关系,看情况而定,但不能超过后面的worker_rlimit_nofile。当nginx做为http伺服器时,计算公式里面是除以2。worker_rlimit_nofile 10240
写在main部分。默认是没有设置,能限制为操作系统最大的限制65535。use epoll
写在events部分。在Linux操作系统下,nginx默认采用epoll事件数学模型,得益于此,nginx在Linux操作系统下工作效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于epoll的高效事件数学模型kqueue。在操作系统不全力支持这些高效数学模型时才采用select。2. http伺服器
与提供http服务项目相关的一些实用性参数。例如:是否采用keepalive啊,是否使用gzip展开压缩等。
sendfile on
开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少使用者空间到内核空间的上下文切换。对于普通应用设为 on,如果用来展开下载等应用磁盘IO重阻抗应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的阻抗。keepalive_timeout 65 : 长相连超时时间,单位是秒,这个参数很敏感,涉及浏览器的种类、前端伺服器的超时设置、操作系统的设置,能另外起一片文章了。长相连请求大量小文件的时候,能减少重建相连的开支,但假如有大文件上传,65s内没上传完成会导致失败。如果设置时间过长,使用者又多,长时间保持相连会占用大量资源。send_timeout : 用于指定积极响应客户端的超时时间。这个超时仅限于两个相连活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭相连。client_max_body_size 10m
允许客户端请求的最大单文件字节数。如果有上传较大文件,请设置它的限制值client_body_buffer_size 128k
缓冲区代理缓冲使用者端请求的最大字节数模块http_proxy:
这个模块实现的是nginx做为逆向代理伺服器的功能,包括缓存功能(另见文章)
proxy_connect_timeout 60
nginx跟前端伺服器相连超时时间(代理相连超时)proxy_read_timeout 60
相连成功后,与前端伺服器两个成功的积极响应操作之间超时时间(代理接收超时)proxy_buffer_size 4k
设置代理伺服器(nginx)从前端realserver读取并保存使用者头信息的缓冲区大小,默认与proxy_buffers大小相同,其实能将这个指令值设的小一点proxy_buffers 4 32k
proxy_buffers缓冲区,nginx针对单个相连缓存来自前端realserver的积极响应,页面平均在32k以下的话,这样设置proxy_busy_buffers_size 64k
高负荷下缓冲大小(proxy_buffers*2)proxy_max_temp_file_size
当proxy_buffers放不下前端伺服器的积极响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与proxy_cache没有关系。大于这个值,将从upstream伺服器传回。设置为0禁用。proxy_temp_file_write_size 64k
当缓存被代理的伺服器积极响应到临时文件时,这个选项限制每次写临时文件的大小。proxy_temp_path(能在编译的时候)指定写到哪那个目录。proxy_pass,proxy_redirect见 location 部分。
模块http_gzip:
gzip on : 开启gz倍申请缓存。gzip_http_version 1.0 : 用于识别 http 协定的版,早期的浏览器不全力支持 Gzip 压缩,使用者就会看到乱码,所以为了全力支持前期版加上了这个选项,如果你用了 Nginx 的逆向代理并期望也启用 Gzip 压缩的话,由于末端通信是 http/1.0,故请设置为 1.0。gzip_comp_level 6 : gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)gzip_types :匹配mime类型展开压缩,无论是否指定,”text/html”类型总是会被压缩的。gzip_proxied any : Nginx做为逆向代理的时候启用,决定开启或者关闭前端伺服器返回的结果是否压缩,匹配的前提是前端伺服器必须要返回包含”Via”的 header头。gzip_vary on : 和http头有关系,会在积极响应头加个 Vary: Accept-Encoding ,能让前端的缓存伺服器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。。3. server应用应用软件
http服务项目上全力支持若干应用应用软件。每个应用应用软件两个相关联的server实用性项,实用性项里面包含该应用应用软件相关的实用性。在提供mail服务项目的代理时,也能建立若干server。每个server通过监听地址或端口来区分。
listen
监听端口,默认80,小于1024的要以root开启。能为listen *:80、listen 127.0.0.1:80等形式。server_name
伺服器名,如localhost、http://www.example.com,能通过正则匹配。模块http_stream
这个模块通过两个简单的调度算法来实现客户端IP到前端伺服器的阻抗平衡,upstream后接阻抗平衡器的名字,前端realserver以 host:port options; 方式组织在 {} 中。如果前端被代理的只有一台,也能直接写在 proxy_pass 。
4. location
http服务项目中,某些特定的URL相关联的一系列实用性项。
root /var/www/html
定义伺服器的默认中文网站根目录位置。如果locationURL匹配的是子目录或文件,root没什么作用,一般放在server指令里面或/下。index index.jsp index.html index.htm
定义路径下默认访问的文件名,一般跟着root放proxy_pass http:/backend
请求转向backend定义的伺服器列表,即逆向代理,相关联upstream阻抗平衡器。也能proxy_passhttp://ip:port。proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
这四个暂且这样设,如果深究的话,每两个都涉及到很复杂的内容,也将通过另一篇文章来解读。关于location匹配规则的写法,能说尤为关键且基础的,参考文章 nginx实用性location总结及rewrite规则写法;
5. 其它
5.1 访问控制 allow/deny
Nginx 的访问控制模块默认就会安装,而且写法也非常简单,能分别有多个allow,deny,允许或禁止某个ip或ip段访问,依次满足任何两个规则就停止往下匹配。如:
我们也常用 httpd-devel 工具的 htpasswd 来为访问的路径设置登录密码:
这样就生成了默认采用CRYPT加密的密码文件。打开上面nginx-status的两行注释,重启nginx生效。
5.2 列出目录 autoindex
Nginx默认是不允许列出整个目录的。如需此功能,打开nginx.conf文件,在location,server 或 http段中加入autoindex on;,另外两个参数最好也加上去:
autoindex_exact_size off; 默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GBautoindex_localtime on;
默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的伺服器时间