一、nginx是什么
Nginx (engine x) 是一个高性能的HTTP和反向代理服
务器,也是一个IMAP/POP3/SMTP服务器。Nginx是
由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站
点(俄文:Рамблер)开发的,第一个公开版本0.1.0
发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性
、丰富的功能集、示例配置文件和低系统资源的消耗而
闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及
电子邮件(IMAP/POP3)代理服务器。其特点是占有
内存少,并发能力强,事实上nginx的并发能力确实在
同类型的网页服务器中表现较好,中国大陆使用nginx
网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
二、nginx特性
跨平台: Nginx 可以在大多数 Unix like OS编译运行, 而且也有Windows
的移植版本。 配置异常简单, 非常容易上手。 配置风格简单, 神一般的配
置易读性
高并发连接: 数据复制时, 官方测试能够支撑5万并发连接, 在实际生产环
境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型)通信
机制采用epoll模型, 支持更大的并发连接。
master/worker结构: 一个master进程, 生成一个或多个worker进程
功能模块化: nginx的内部结构是由核心部分和一系列的功能模块所组成
。 这样划分是为了使得每个模块的功能相对简单, 便于开发, 同时也便于
对系统进行功能扩展。
成本低廉: Nginx可实现负载均衡功能, 可以免费使用。 而购买F5 BIG-IP
、 NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
内置的健康检查功能: 如果 Nginx Proxy 后端的某台 Web 服务器宕机了,
不会影响前端访问。
节省带宽: 有缓存模块, 支持 GZIP 压缩, 可实现浏览器本地缓存的
Header 头。
稳定性高: 用于反向代理(负载均衡) , 宕机的概率微乎其微
Nginx的特性Nginx的架构Nginx的模块流程图
Nginx模块主要有4种角色:
(1) core(核心模块):构建
nginx基础服务、管理其他模块。
(2) handlers(处理模块): 用于
处理HTTP请求,然后产生输出。
(3) load-balancers(负载均衡
模块):当有多于一台的后端备选
服务器时,选择一台转发HTTP请
求。
(4) filters(过滤模块): 过滤
handler产生的输出。21
Nginx安装方式
nginx安装常用两种方式,yum安装和源码包安装
yum 安装:通常是在线安装,好处是安装方式简单,不易出错;常
用的安装yum源为epel
源码包安装:是先将 nginx 的×××下来,在自己的系统里编译
生成可执行文件,然后执行,好处是因为是在自己的系统上编译的,
更符合自己系统的性能,也就是说在自己的系统上执行 nginx 服务
性能效率更好。(推荐,需要安装开发环境)
区别:路径和启动方式不同,支持的模块也不同
三、nginx的模块
Nginx模块主要有4种角色:
(1) core(核心模块):构建
nginx基础服务、管理其他模块。
(2) handlers(处理模块): 用于
处理HTTP请求,然后产生输出。
(3) load-balancers(负载均衡
模块):当有多于一台的后端备选
服务器时,选择一台转发HTTP请
求。
(4) filters(过滤模块): 过滤
handler产生的输出。
四、Nginx安装方式
nginx安装常用两种方式,yum安装和源码包安装
yum 安装:通常是在线安装,好处是安装方式简单,不易出错;常
用的安装yum源为epel
源码包安装:是先将 nginx 的×××下来,在自己的系统里编译
生成可执行文件,然后执行,好处是因为是在自己的系统上编译的,
更符合自己系统的性能,也就是说在自己的系统上执行 nginx 服务
性能效率更好。(推荐,需要安装开发环境)
区别:路径和启动方式不同,支持的模块也不同。
五、nginx的配置
主配置文件: nginx.conf
扩展相关配置文件: include conf.d/*.conf
协议配置: fastcgi, uwsgi, scgi等协议相关的配置文件
类型配置: mime.types: 支持的mime类型
六、主配置文件结构
main : #主配置段, 也即全局配置段; 正常运行必备配置
优化性能配置, 用于调试和定位的配置。
event {
...
}; 事件驱动相关的配置;
http {
...
}; http/https 协议相关的配置段;
七、Nginx配置文件讲解
nginx的主配置文件路径一般在
/etc/nginx/nginx.conf下(yum安装
) 或
者源码安装指定位置的conf目录
下, 如
/usr/local/nginx/conf/nginx.conf
配置文件主要配置设置:
main(全区设置)
http(协议配置)
upstream(负载均衡服务器设置)
和server、 location(URL匹配特定
位置设置)
1) 全局配置
#Nginx的worker进程运行用户以及用户组
user nobody nobody;
#Nginx开启的进程数
worker_processes 2;
worker_processes auto;
#也可以下参数指定了哪个cpu分配给哪个进程,
#worker_processes 4 #4核CPU
#worker_cpu_affinity 0001 0010 0100 1000
#定义全局错误日志定义类型, [debug|info|notice|warn|crit]
error_log logs/error.log info;
#指定进程ID存储文件位置
pid logs/nginx.pid;
2) 服务配置
非虚拟主机的配置或公共配置, 需要定义在server之外, http之内;
http {
directive value;
...
server {
}s
erver {
}
...
}}必
须使用虚拟主机来配置站点; 每个虚拟主机使用一个server {}段配置;
server {
}
3)http段参数介绍
1. #文件扩展名与文件类型映射表
2. include mime.types;
3. #默认文件类型
4. default_type application/octet-stream;
6.#日志相关定义
7. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
8. # '$status $body_bytes_sent "$http_referer" '
9. # '"$http_user_agent" "$http_x_forwarded_for"';
10. #定义日志的格式。 后面定义要输出的内容。
11. #1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
12. #2.$remote_user : 用来记录客户端用户名称;
13. #3.$time_local : 用来记录访问时间与时区;
14. #4.$request : 用来记录请求的url与http协议;
15. #5.$status : 用来记录请求状态;
16. #6.$body_bytes_sent : 记录发送给客户端文件主体内容大小;
17. #7.$http_referer : 用来记录从那个页面链接访问过来的;
18. #8.$http_user_agent : 记录客户端浏览器的相关信息
19. #连接日志的路径, 指定的日志格式放在最后。
20. #access_log logs/access.log main;
21. #只记录更为严重的错误日志, 减少IO压力
22. error_log logs/error.log crit;
http段参数介绍30
26. #默认编码
27. #charset utf-8;
28. #服务器名字的hash表大小
29. server_names_hash_bucket_size 128;
30. #客户端请求单个文件的最大字节数
31. client_max_body_size 8m;
32. #指定来自客户端请求头的hearerbuffer大小
33. client_header_buffer_size 32k;
34. #指定客户端请求中较大的消息头的缓存最大数量和大小。
35. large_client_header_buffers 4 64k;
36. #开启高效传输模式。
37. sendfile on;
38. #防止网络阻塞
39. tcp_nopush on;
40. tcp_nodelay on;
41. #客户端连接超时时间, 单位是秒
42. keepalive_timeout 60;
43. #客户端请求头读取超时时间
44. client_header_timeout 10;
45. #设置客户端请求主体读取超时时间
46. client_body_timeout 10;
47. #响应客户端超时时间
48. send_timeout 10;
50.#FastCGI相关参数是为了改善网站的性能: 减少资源占用, 提高访问速度。
51. fastcgi_connect_timeout 300;
52. fastcgi_send_timeout 300;
53. fastcgi_read_timeout 300;
54. fastcgi_buffer_size 64k;
55. fastcgi_buffers 4 64k;
56. fastcgi_busy_buffers_size 128k;
57. fastcgi_temp_file_write_size 128k;
59.#gzip模块设置
60. #开启gzip压缩输出
61. gzip on;
62. #最小压缩文件大小
63. gzip_min_length 1k;
64. #压缩缓冲区
65. gzip_buffers 4 16k;
66. #压缩版本(默认1.1, 前端如果是squid2.5请使用1.0)
67. gzip_http_version 1.0;
68. #压缩等级 1-9 等级越高, 压缩效果越好, 节约宽带, 但CPU消耗大
69. gzip_comp_level 2;
70. #压缩类型, 默认就已经包含text/html, 所以下面就不用再写了, 写上去也不会有问题, 但是会有一个warn。
71. gzip_types text/plain application/x-javascript text/css application/xml;
72. #前端缓存服务器缓存经过压缩的页面
73. gzip_vary on;
4)虚拟主机相关介绍
虚拟主机相关的配置:
1、 server {}
定义一个虚拟主机; nginx支持使用基于主机名或IP的虚拟主机;
2、 listen
listen address[:port];
listen port
default_server: 定义此server为http中默认的server; 如果所有的server中没有任何一个
listen使用此参数, 那么第一个server即为默认server;
3、 server_name [...];
server_name可以跟多个主机名, 名称中可以使用通配符和正则表达式(通常以~开头); 当
nginx收到一个请求时, 会取出其首部的server的值, 而后跟众server_name进行比较;
比较优先次序方式:
(1) 先做精确匹配; www.magedu.com
(2) 左侧通配符匹配; *.magedu.com
(3) 右侧通配符匹配; www.abc.com, www.*
(4) 正则表达式匹配: ~^.*\.magedu\.com$
test.test.magedu.com
test.magedu.com/text
www.taobao.com
5)文件路径定义相关介绍
server段内
1、 root path
设置web资源路径; 用于指定请求的根文档目录;
location / {
root /www/htdocs;(本机的文件路径)
}lo
cation ^~ /p_w_picpaths/ {
root /web;
} 2
、 alias path
只能用于location中, 用于路径别名;
location / {
root /www/htdocs;
}lo
cation ^~ /p_w_picpaths/ {
alias /web/;
}
6)虚拟主机相关介绍
(1)location [ = | ~ | ~* | ^~ ] uri { ... }
(2)location @name { ... }
功能: 允许根据用户请求的URI来匹配指定的各location以进行访
问配置; 匹配到时, 将被location块中的配置所处理
=: 精确匹配;
~: 正则表达式模式匹配, 匹配时区分字符大小写
~*: 正则表达式模式匹配, 匹配时忽略字符大小写
^~: URI前半部分匹配, 匹配时忽略字符大小写。 不检查正则表达
式 匹
配优先级:
= (大于) ^~ (大于) ~ (大于) 不带符号
7)文件路径定义相关介绍
(1) index file ...;
定义默认页面, 可参跟多个值;
(2) error_page code ... [=[response]] uri;
错误页重定向: 当对于某个请求返回错误时, 如果匹配上了
error_page指令中设定的code, 则重定向到新的URI中。
错误页面重定向;
例: error_page 404 /404.html;当用户请求一个不存在的资源
是, 会自动跳转到自定义的404.html页面。
注意跳转的状态码还是原来的状态码, 即使是跳转成功!