目录结构
安装好的目录页
- conf:用来存放配置文件相关
- html:用来存放静态文件的默认目录 html、css等
- sbin:nginx的主程序
基本运行原理
配置语法
nginx的配置文件conf/nginx.conf,默认监听端口80
修改nginx.conf,不需要重启nginx,只需要执行 nginx -s reload
停止:nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)
main # 全局配置,对全局生效
├── events # 配置影响 Nginx 服务器或与用户的网络连接
├── http # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
│ ├── upstream # 配置后端服务器具体地址,负载均衡配置不可或缺的部分
│ ├── server # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
│ ├── server
│ │ ├── location # server 块可以包含多个 location 块,location 指令用于匹配 uri
│ │ ├── location
│ │ └── ...
│ └── ...
└── ...
- 配置文件由指令与指令块构成;
- 指令以 ; 分号结尾
- 指令块以 {} 大括号将多条指令组织在一起;
- include 语句允许组合多个配置文件以提升可维护性;
- 使用 $ 符号使用变量
- 部分指令的参数支持正则
server 块可以包含多个 location 块,location 指令用于匹配 uri,语法:
location [ = | ~ | ~* | ^~] uri {
...
}
=精确匹配路径,用于不含正则表达式的 uri 前,匹配成功不再进行后续的查找;^~用于不含正则表达式的 uri 前,表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找;~表示用该符号后面的正则去匹配路径,区分大小写;~*表示用该符号后面的正则去匹配路径,不区分大小写。如有多个location的正则能匹配的话,则使用正则表达式最长的那个;
实例:
location ~* /(css | img | js){
root /usr/local/nginx/static;
index index.html index.htm;
}
alias
在接受请求的时候在路径上不会加上location
location /css{
alias /usr/local/nginx/static/css;
index index.html index.htm;
}
- alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的
- root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的
- 使用alias标签的目录块中不能使用rewrite的break;alias指定的目录后面必须要加上"/"符号
- alias虚拟目录配置中,location匹配的path目录如果后面不带"/",那么访问的url地址中这个path目录后 面加不加"/"不影响访问,访问时它会自动加上"/"; 但是如果location匹配的path目录后面加上"/",那么访问的url地址中这个path目录必须要加上"/",访问时它不会自动加上"/"。如果不加上"/",访问就会失败!
- root目录配置中,location匹配的path目录后面带不带"/",都不会影响访问。
UrlRewrite
Nginx配置与应用场景
nginx.conf
worker_processes :worker进程数量,默认为1
worker_connections :单个worker进程可接受连接数,默认为1024
include mime.types 引入http mime类型
default_type application/octet-stream 如果mime类型没匹配上,默认使用二进制流的方式传输。
sendfile on 使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝。
未开启sendfile:
开启sendfile:
虚拟主机
原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务
servername匹配规则
我们需要注意的是servername匹配分先后顺序,写在前面的匹配上就不会继续往下匹配了。
- 完整匹配
server_name vod.mmban.com www1.mmban.com;
- 通配符匹配
server_name *.mmban.com
# 或
server_name vod.*;
正则匹配
server_name ~^[0-9]+\.mmban\.com$;
反向代理
反向代理
location / {
proxy_pass http://www.baidu.com; # 访问主机时跳到baidu
}
负载均衡
将压力分摊到多台服务器
- 轮询(默认) 请求按时间顺序分配到不同的服务器,适合服务器配置相当
- 加权轮询 指定服务器权重,权重和访问比例成正比。用于服务器性能不均
- ip_hash 上述方式存在问题:用户在某台服务器登录,第二次请求定位到另一个服务器,登录信息丢失。通过ip_hash解决:客户再次访问时,将请求通过hash算法,自动定位到之前的服务器。 基于反向代理的负载均衡
反向代理的负载均衡
在proxy_pass的http://后随便写个名称
在server的上面(同一层级)添加一个,自己可以多开几台虚拟机跑nginx
upstream 你刚刚写的名称{
server 192.168.230.121:80;
server 192.168.230.111:80;
}
加权
upstream 你刚刚写的名称{
server 192.168.230.121:80 weight=10 down;
server 192.168.230.111:80 weight=1;
server 192.168.230.101:80 weight=1 backup;
}
- down:当前server不参与负载均衡
- backup:其他所有非backup机器down或无法服务时,请求打到backup机器