优点
- 更快
- 高扩展性
- 高可靠性
- 低内存
- 万级并发量
- 热部署
基本命令
- 启动
- 使用默认配置文件(默认配置文件路径 /usr/local/etc/nginx/nginx.conf)
/usr/local/bin/nginx
- 使用自定义配置文件
/usr/local/bin/nginx -c ~/my-nginx.conf
- 停止
- 可以使用系统kill命令停止
- 立即终止(相当于kill命令结果)
/usr/local/bin/nginx -s stop
- 平缓的停止服务(关闭监听端口,停止接受新的请求;正常的处理完所有已经接受到的请求,再停止服务)
/usr/local/bin/nginx -s quit
- 重读配置并生效(先检查配置文件,如果没有错误,将会平缓的停止再次启动)
/usr/local/bin/nginx -s reload
- 日志文件回滚(将当前文件转移到其他目录进行备份,重新打开日志文件)
/usr/local/bin/nginx -s reopen
运行Nginx进程
master 单进程模式:系统中只有一个进程,该进程既是master角色又是worker角色
master-worker协作模式
- master进程管理多个worker进程,worker进程是繁忙的,真正的进行互联网的服务,mater只负责管理worker进程
- 一般情况下,worker进程的数量和cpu的合数相等
- worker进程通过共享内存,原子操作等进程通信机制来实现负载均衡
-
worker可以同时处理的请求数受限于内存大小,不同的worker进程之间处理并发请求几乎是没有同步锁限制,他们不会进入睡眠状态
配置的通用语法
- 配置项注释 : #
- 配置单位
- 空间相关单位 K/k(表示KB) M/m(表示MB)
- 时间相关单位 ms(毫秒) s(秒) m(分钟) h(小时) d(天) w(周) M(月,包含30天) y(年,包含365天)
配置文件分析
文件主要结构
main
events {
}
http {
server {
location {
}
}
}
- main 只要控制Nginx子进程所属用户和用户组、派生子进程数、错误日志和级别,pid位置,子进程的优先级,进程对应的CPU,进程可以打开文件描述符数目等
- events 控制Nginx连接方式
- http 处理http请求的主要配置块
- server 主机配置块,可以用于配置多个虚拟主机
- location server中对应目录级别的控制块
main 相关配置
- worker进程数
worker_process num
- 设置用户和组
- master进程以root权限运行,worker进程默认情况下以nobody用户运行(原因在于nobody用户是一个不能登录的账号,worker进程用户权限越低,服务器安全系数越高)
- 配置方式
user nuser ngroup
events相关配置
- 每个worker的处理并发最大连接数
worker_connections num
http相关配置
- include 用于引入配置文件
- default_type 设置默认的文件类型
- sendfile 默认值是on,表示开启高效的文件传输模式
server相关配置
- listen 监听端口,默认值是80
- error_page 自定义错误页面
- 基于错误码转到本地页面
error_page 404 /404.html; error_page 500 502 /50.html;
- 基于错误码转到在线资源
error_page 403 http://test.com/forbidden.html;
- 错误码进行转换
error_page 401=200 /404.html
- server_name
- 配置方式
server_name name[ name...]
- 说明
- server_name后面可以配置多个名称
- 处理HTTP请求时,nginx将取出header中host信息,与每一个name进行匹配,其中优先级如下
- 名称完全匹配 如 www.test.com
- 选择通配符在前面的 如*.test.com
- 选择通配符在后面的 如 www.test.*
- 最后选择正则表达式匹配的
- 当全部无法匹配时,将会使用默认server
- 配置方式
location相关配置
- root 这是主机站点的根目录位置
- index 指定默认的索引文件
- 配置匹配地址
- location[=||*|^~|@]/uri/{...}
- location根据用户请求中的uri来进行配置匹配,如果匹配采用location块中配置处理请求
- 匹配规则
- =表示把uri作为字符串,以便与参数进行完全匹配
- ~表示匹配URI是字母是大小写敏感的(可以使用正则表达式)
- ~*表示匹配URI时忽略字母大小写(可以使用正则表达式)
- ^~表示匹配URI时只需要期前半部分与uri匹配即可
- @表示仅仅用于nginx服务内部请求之间的重定向
- 当匹配多个值时,以一个匹配优先
- root/alias 指定本地文件
- 两者区别:root是在uri前面直接加路径(root/uri);alias是匹配部分的替换
当请求/img/1.png => /var/www/image/1.pnglocation /img/ { alias /var/www/image/; } location /img2/ { root /var/www/image/ }
当请求/img2/1.png => /var/www/image/img2/1.png
权限控制
- 默认提供了allow和deny两种控制模式
- 权限指令后面加可以使用ip,ip段和all
- 注意事项
- 单个IP范围最小,all范围最大
- 在同一个块中,同一个IP或IP段存在多个权限指令时,先出现的优先级最高
- 当多个块 中,都出现权限控制指令,内层的权限高于外层权限
- 可以使用的块
- http
- server
- 禁止所有
deny all
- 只允许指定用户访问
allow 192.168.1.1 deny all