Nginx
是什么?
Nginx 是一个高性能的 HTTP 和反向代理服务器
为什么用?
- 占用内存少,并发能力强。
- Nginx 专为性能优化而开发,性能是其最重要的要求,十分注重效率
- 安全
怎么用
常用命令
-
启动 Nginx
- /usr/sbin/nginx
- nginx
-
停止 Nginx
- nginx -s stop
-
查看 Nginx 进程
- ps -ef|grep nginx
-
平滑启动 nginx
- nginx -s reload
- kill -HUP
cat /var/run/nginx.pid
-
强制停止 nginx
- pkill -9 nginx
-
检查对 nginx.conf 文件的修改是否正确
- nginx -t -c /etc/nginx/nginx.conf
- nginx -t
-
查看 nginx 的版本信息
- nginx -v
配置文件(nginx.conf)
-
main 配置段:全局配置段。其中 main 配置段中可能包含 event 配置段;
- 用于调试、定位问题的配置参数:
- daemon {on|off}; //是否已守护进程运行进程 nginx,调试时应设置为 off
- master_process {on|off}; //是否以 master/worker 模型来运行 nginx,调试时可以设置为 off
- error_log 位置 1 级别 2; //配置错误日志(位置与级别有以下选项,点击脚注)
- 正常运行必备的配置参数
- worker_processse N; //启动 N 个 worker 进程,这里的 N 为了避免上下文切换,通常设置为 cpu 总核数-1 或等于总 t 核数
- worker_cpu_affinity CPUMASK3 [CPUMASK…]; //将进程绑定到某个 CPU 中,避免频繁刷新缓存
- time_resolution INTERVAL; //计时器解析度。降低此值,可减少 gettimeofday()系统调用的次数
- worker_priority NUMBER; //指明 worker 进程的 NICE 值(优先级)
- 事件相关配置
- 用于调试、定位问题的配置参数:
-
event{}:定义 event 模型工作特性;
- use epoll; //多路复用 I/O 中的一种方式,仅用于 linux2.6 以上内核,大大提升 nginx 性能
- accept_mutex {on|off}; //master 调度用户请求至各 worker 进程时使用的负载均衡锁,“on”表示能让多 个 worker 轮流地、序列化地去响应新请求
- lock_file FILE; //accept_nutex 用到的互斥锁锁文件路径
- use [epoll | rtsig | select | poll]; //指明使用的事件模型,建议让 nginx 自行选择
- worker_connections #; //每个进程能够接受的最大连接数
- multi_accept on; //尽可能多的接受请求
-
http{}:定义 http 协议相关配置。
- server{}:定义一个虚拟主机
- location 区段,通过指定模式来与客户端请求的 URI 相匹配
- 功能:允许根据用户请求的 URI 来匹配定义的各 location,匹配到时,此请求将被响应的 location 配置快中的配置所处理,例如做访问控制等功能
- location [修饰符] =abc {…}
- 修饰符
- = 精确匹配
- ~ 正则表达式模式匹配,区分大小写
- ~* 正则表达式模式匹配,不区分大小写
- ^~ 前缀匹配,类似于无修饰符的行为,也是以指定模块开始,不同的是,如果模式匹配,那么就停止搜索其他模式了,不支持正则表达式
- @ 定义命名 location 区段,这些区段客户端不能访问,只可以有内部产生的请求访问,如 try_files 或 error_page 等
- asd/asdas
- rewrite 适用于文件存放路径或者名字被修改后进行重写(rewrite REGEX REPLACEMENT FLAG;)
- REPLACEMENT 可以是某个路径
- FLAG
- last -- 基本上都用这个 FLAG,表示当前的匹配结束,继续下一个匹配,最多匹配 10 到 20 个,一旦此 rewrite 规则重写完成后,就不会再被后面的其他 rewrite 规则进行处理,而是由 UserAgent 重新对重写后的 URL 再一次发起请求,并从头开始执行类似的过程
- break -- 中止 Rewrite,不在继续匹配,一旦此 rewrite 规则重写完成后,有 useragent 对新的 URL 重新发起请求,且不会再被当前 location 内的任何 rewrite 规则所检查
- redirect -- 已临时重定向的 http 状态 302 返回新的 URL
- permanent -- 以永久从定向的 http 状态 301 返回新的 URl
- 标识符 REGEX
- ^ 必须以^后的实体开头
- 前的实体开头
- . 匹配任意字符
- [] 匹配指定字符集内的任意字符
- [^] 匹配任何不包括在指定字符集内的任意字符串
- | 匹配 | 之前或之后的实体
- () 分组,组成一组用于匹配的实体,通常会有 | 来协助
- 修饰符
http { ## 协议级别 include mime.types; default_type application/octet-stream; keepalive_timeout 65; gzip on; sendfile on; ##指定nginx是否调用sendfile函数(zero copy)来输出文件,对于普通应用必须设为on; ##如果用来进行下载等应用磁盘I/O重负载应用,可设置为OFF,以平衡磁盘与网络I/O处理速度,降低系统的uptime autoindex on; ##开启目录列表访问,适合下载服务器,默认关闭 upstream { ##负载均衡配置 ... } server { ##服务器级别,每一个server类似于httpd中的一个<VirtualHost,通俗来说就是一个网站> listen 8080; server_name localhost; ##后面可以跟多个主机,名称可以用正则表达式或通配符 ##多个server时,匹配顺序如下: ##1.先做精确匹配检查; ##2.左侧通配符匹配检查,如*.idfsoft.com ##3.右侧通配符匹配检查,如mail.* ##4.正则表达式匹配检查,如~ ^.*\.idfsoft\.com$ ##5.default_server location / { ##请求级别,类似与httpd中的<Location>,用于定义URL与本地文件系统的映射关系 root html; index index.html index.htm; allow 192.168.91.129/32; ##设定允许那台或那些主机访问,多个参数间用空格隔开 deny all; ##设定禁止那台或那些主机访问,多个参数间用空格隔开 } } }
负载均衡、动静分离、反向代理、正向代理
负载均衡: 增加服务器的数量,构建集群,将请求分发到各个服务器上,将原来请求集中到单个服务器的情况改为请求分发到多个服务器
反向代理:客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端。
正向代理:局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务就被称为正向代理。
动静分离:为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析的速度,降低由单个服务器的压力。