目录结构
- conf :存放配置文件相关
- html :存放静态文件默认目录html、css等
- sbin :nginx的主程序
基本配置
最小配置
- worker_processes 1;默认开启一个业务进程
- worker_connections 1024;单个业务进程可以接收的链接数
- include mime.types;引入http mime类型
- deflut_type application/octet-stream;mime类型没匹配上会默认使用二进制流方式传输
- sendfile on;开启linux的0拷贝
- keepalive_timeout 65;超时时间
虚拟主机配置
server {
listen 80; 监听端口号
server_name localhost; 主机名
location / { 匹配路径
root html; 文件根目录
index index.html index.htm; 默认页名称
}
error_page 500 502 503 504 /50x.html; 报错编码对应页面
location = /50x.html {
root html;
}
}
- 虚拟主机:原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务
- server_name:servername匹配分先后顺序,写前面的匹配上就不会继续匹配
- 完整匹配:同一个servername中可以匹配多个域名 ,server_name a.xxx.com b.xxx.com;
- 通配符开始匹配:server_name *.xxx.com
- 通配符结束匹配:server_name a.xxx.*
- 正则匹配:server_name ~^ [0-9]+.xxx.com$
反向代理配置
- proxy_pass
location / {
proxy_pass http://atguigu.com/;
}
负载均衡配置
- upstream
upstream proxyPass { //反向代理的路径
server 127.0.0.1:8050 weight=10 down;
server 127.0.0.1:8060 weight=1;
server 127.0.0.1:8060 weight=1 backup;
}
server {
listen 80; 监听端口号
server_name localhost; 主机名
location / { 匹配路径
proxy_pass proxyPass; //配置反向代理upstream路径
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html; 报错编码对应页面
location = /50x.html {
root html;
}
}
负载均衡策略
- down:表示当前的server暂时不参与负载
- backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。
- weight:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况
- ip_hash:根据客户端的ip地址转发同一台服务器,可以保持回话
- least_conn:最少连接访问
- url_hash:根据用户访问的url定向转发请求
- fair:根据后端服务器响应时间转发请求
动静分离
- location配置
location前缀 | 匹配规则 |
---|---|
/ | 通用匹配,任何请求都会匹配到 |
= | 精准匹配 |
~ | 正则匹配,区分大小写 |
~* | 正则匹配,不区分大小写 |
^~ | 非正则匹配,匹配以指定模式开头的location |
- location匹配顺序
- 多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
- 普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
- 当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
- 所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)
Url Rewrite配置
rewrite <regex> <replacement> [flag];
flag标记说明:
last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
{
server {
listen 80;
server_name localhost;
location / {
rewrite ^/([0-9]+).html$ /order.html?pageNum=$1 break;//将x.html转换到index路径,用于隐藏实际请求路径
proxy_pass proxyPass;
}
}
}
防盗链
- none, 检测 Referer 头域不存在的情况。
- blocked,检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以“http://” 或 “https://” 开头。
- server_names ,设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。
配置到location中
valid referers none | blocked | server_names | strings ....;
location / {
valid_referers 192.168.44.101;
if ($invalid_referer) {
return 403;
}
}
高可用配置
- 下载Keepalived
- 配置keepalived
机器1
global_defs {
router_id lb111
}
vrrp_instance atguigu {
state MASTER //状态 master、backup
interface ens33
virtual_router_id 51
priority 100 //优先级,越大主备优先级越高
advert_int 1
authentication { //统一集群认证信息需要一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.44.200
}
}
机器2
global_defs {
router_id lb111
}
vrrp_instance atguigu {
state BACKUP
interface ens33
virtual_router_id 51
priority 99
advert_int 1
authentication { //统一集群认证信息需要一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.44.200
}
}
https证书配置
{
server {
listen 443 ssl; //监听https 443端口
server_name localhost;
ssl_certificate /data/cert/server.crt; //配置证书
ssl_certificate_key /data/cert/server.key; //配置秘钥
}
}
学习地址:尚硅谷Nginx教程