前言
nginx配置文件由四部分组成:
- main(全局变量)
- server(主机设置)
- upstream(上游服务器设置,主要为反向代理,负载均衡相关配置)
- location(url匹配特定位置后的设置)
1 | note:text/html是以网页形式发送,text/plain是以纯文本格式发送 |
nginx优势
- 低内耗,占用内存少
- 高负载,并发能力强
- 负载均衡,节点健康检查
- 反向代理,数据缓存
1 | note:官方表示保持10000个没有活动的连接只需要2.5M |
特性:
- 事件驱动:通信机制采用epoll模型,支持更大的并发连接
- master/worker结构:一个master进程多个woker进程
- 多进程 + 事件驱动
基础框架
master进程:
- 接收外部信号
- 传递信号给worker进程
- 监控各worker进程,出现异常后重新启动新的worker进程
worker进程:
- 相互独立(意味着无需加锁,一个worker进程异常不会影响其他worker进程)
- 一个请求只会在一个worker中处理
- 每个worker只有一个主线程,采用异步非阻塞方式处理请求,因此可以同时处理成千上万个请求;相对于appache,每一个请求占用一个线程的做法,一旦请求并发量大得到时候,内存占用大,线程上下文切换带来的CPU开销也大,性能就突然下降。
异步、同步(调用是否需要返回结果,发短信,打电话)
阻塞、非阻塞(等待返回结果时的状态,挂起当前线程,不影响当前线程)
nginx配置
nginx.conf
1 | { |
nginx配置文件主要由四部分组成:main, upstream, server(http), location(server)
- main:全局配置
- upstream: 负载均衡
- server: 虚拟主机,要挂载的服务器,可以多个
- loaction: 匹配资源路径
nginx.conf
1 | #定义Nginx运行的用户为appadmin |
- 已=开头表示精确匹配
- 如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
- ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
- ~ 开头表示区分大小写的正则匹配;
- ~* 开头表示不区分大小写的正则匹配
- / 通用匹配, 如果没有其它匹配,任何请求都会匹配到
优先级:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
root和alias:都是指定文件路径,区别是root处理结果是root+loaction路径,alias处理结果是alias替换location路径,并且alias后面要加“/”
nginx命令
(以nginx安装在/Data/目录下为例)
#查看nginx进程
$ps -ef | grep nginx
#启动
$ sudo /Data/nginx/sbin/nginx
#快速停止
$ sudo /Data/nginx/sbin/nginx -s stop
$ kill -term 主进程号
#从容停止
$ sudo /Data/nginx/sbin/nginx -s quit
$ kill -quit 主进程号
#重启
$ sudo /Data/nginx/sbin/nginx -s reload
#查看nginx版本
$ sudo /Data/nginx/sbin/nginx -v
#查看nginx版本,配置
$ sudo /Data/nginx/sbin/nginx -V
注意事项
1)gzip压缩
2)proxy_temp_file_write_size缓存文件大小
3)worker_rlimit_nofile并发数量限制
4)端口号小于1024需要root权限
5)nginx只有一个server时,不会去匹配server_name,只有多个server才会去匹配server_name,倘若多个server都匹配不到,会默认匹配到第一个server中去