特性
- 高并发连接: 官方称单节点支持5万并发连接数,实际生产环境能够承受2-3万并发
- 内存消耗少: 在3万并发连接下,开启10个nginx进程仅消耗150M内存 (15M*10=150M)
nginx原理(Unix I/O模型简介)
基本模块
# 使用的用户和组user nobody nobody;# 指定工作进程数# 与CPU数目一致worker_processes 2;# 错误日志# 可以使用 [ debug | info | notice | warn | error | crit ] 参数error_log /var/log/nginx/nginx_error.log crit;# 指定 pid 存放的路径 pid /usr/local/nginx/nginx.pid
user
语法: user user [group] 缺省值: nobody nobody 指定Nginx Worker进程运行用户,默认是nobody帐号。worker_processes
语法: worker_processes number 缺省值: 1 指定工作进程数。nginx可以使用多个worker进程。error_log
语法: error_log file [ debug | info | notice | warn | error | crit ] 缺省值: /logs/error.log 制定错误日志的存放位置和级别。pid
语法: pid file 进程id存储文件。可以使用 kill -HUP cat /var/log/nginx.pid/ 对Nginx进行配置文件重新加载。include
语法: include file | * 缺省值: none include 指令还支持像下面配置一样的全局包含的方法,例如包含一个目录下所有以".conf"结尾的文件: include vhosts/*.conf;worker_cpu_affinity
可以减少进程间的切换事件模块
events { # 使用epoll模型 use epoll; # 每个worker的最大连接数 worker_connections 1024;}
use
语法:use [ kqueue | rtsig | epoll | /dev/poll | select | poll | eventport ] 如果在./configure的时候指定了不止一种事件模型,那么可以设置其中一个,以便告诉nginx使用哪种事件模型。默认情况下nginx会在./configure时找出最适合系统的事件模型。 事件模型是指Nginx处理连接的方法。worker_connections
语法:worker_connections number 通过worker_connections和worker_proceses可以计算出maxclients: max_clients = worker_processes * worker_connections 作为反向代理,max_clients为: max_clients = worker_processes * worker_connections/4 ,因为浏览器访问时会通过连接池建立多个连接。HTTP模块
http { #配置一台虚拟机 server { listen 80; server_name www.linuxidc.com; access_log logs/linuxidc.access.log main; location / { index index.html; root /var/www/linuxidc.com/htdocs; } }}
三个作用域:http, server, location
server
语法:server {...} 作用域: http 配置一台虚拟机。listen
语法: listen address:port [ default [ backlog=num | rcvbuf=size | sndbuf=size | accept_filter=filter | deferred | bind | ssl ] 默认值: listen 80 作用域: server 指定当前虚拟机的监听端口。location
语法: location [=|~|~*|^~] /uri/ { ... } 作用域: server 配置访问路径的处理方法。root
语法: root path 默认值:root html 作用域:http, server, location alias指定的目录是准确的,root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录。alias
语法: alias file-path|directory-path; 作用域: location 该指令设置指定location使用的路径.注意它跟 root 相似,但是不改变文件的根路径,仅仅是使用文件系统路径区别:
location /abc/ { alias /home/html/abc/; }
在这段配置下,www.xxx/abc/a.html就指定的是/home/html/abc/a.html。这段配置亦可改成
location /abc/ { root /home/html/; }
这样,nginx就会去找/home/html/目录下的abc目录了,得到的结果是相同的。
示列配置
反向代理
http { # 负载均衡配置,可以配置多个 upstream WB { # 设置负载均衡策略为ip_hash,会根据请求来源ip做hash,同一个C类地址网段hash值相同 ip_hash; # 反向代理到后台应用服务器节点上 server 192.168.4.1:8080; server 192.168.4.2:8080; } server { location / { proxy_connect_timeout 3; proxy_send_timeout 30; proxy_read_timeout 30; # 配置所有请求都会分发到 WB 这个负载均衡器上 proxy_pass http://WB/; expires 1d; } }}
https
server { listen 443; ssl on; ssl_certificate /usr/local/nginx/server.crt; ssl_certificate_key /usr/local/nginx/server.key; error_page 497 https://$host$uri?$args;}
缓存静态化文件
server { location ~* \.(gif|jpg|jpeg|png|css|js|ico|html)$ { root /usr/local/nginx/html/; expires 3d; }}