部署--Nginx
# 与前端有关
- 配置gzip
开启Nginx gzip,压缩后,静态资源的大小会大大的减少,从而可以节约大量的带宽,提高传输效率
server{
gzip on; //启动
gzip_buffers 32 4K;
gzip_comp_level 6; //压缩级别,1-10,数字越大压缩的越好
gzip_min_length 100; //不压缩临界值,大于100的才压缩,一般不用改
gzip_types application/javascript text/css text/xml;
gzip_disable "MSIE [1-6]\."; // IE6对Gzip不友好,对Gzip
gzip_vary on;
}
2
3
4
5
6
7
8
9
屏蔽nginx的版本---安全性---
server_token: off;
页面缓存 — 代理缓存
# 静态文件过期时间 location ^~ /static/ { root /usr/share/nginx/html/; expires 15d; }
1
2
3
4
5页面缓存主要分为三类:客户端缓存、代理缓存、服务端缓存
利用 proxy_cache_path 和 proxy_cache 来开启内容缓存,前者设置缓存的路径和配置,后者启用缓存
http { proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m max_size=10g inactive=60m; server { proxy_cache mycache; } }
1
2
3
4/data/nginx/cache 指定了本地缓存的根目录;level 代表缓存目录结构是两层的;
keys_zone
设置了一个共享内存区,10m 代表内存区的大小 ;max_size 设置了缓存的上限;inactive 设置了缓存在未被访问时能够持续保留的最长时间,也就是失活时间。请求头Head有字段有下划线:
underscores_in_headers on;
上传文件太大--503:
server { client_max_body_size 40960M; client_body_buffer_size 200M; client_body_timeout 6000s; }
1
2
3
4
5配置跨域请求
403
location / { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; if ($request_method = 'OPTIONS') { return 204; } }
1
2
3
4
5
6
7配置Https – SSL 认证
签署第三方可信任的 SSL 配置 HTTPS 要用到私钥 example.key 文件和 example.crt 证书文件,而申请证书文件的时候要用到 example.csr 文件;
要开启 HTTPS 服务,在配置文件信息块(server),必须使用监听命令 listen 的 ssl 参数和定义服务器证书文件和私钥文件
server { listen 443 ssl; # 监听443端口,443是https的默认端口。80为http的默认端口 server_name example.com; ssl_certificate /etc/nginx/ssl_cert/nginx_quick.crt; #证书文件---绝对路径 ssl_certificate_key /etc/nginx/ssl_cert/nginx_quick.key; #私钥文件---绝对路径 }
1
2
3
4
5
6
Nginx 配置文件和目录
/etc/nginx/nginx.conf 核心配置文件 /etc/nginx/conf.d/default.conf 默认http服务器配置文件
# 正向代理/反向代理
正向代理:
1.正向代理服务是由客户端设立的 2.客户端了解代理服务器和目标服务器都是谁 3.帮助咱们实现突破访问权限,提高访问的速度,对目标服务器隐藏客户端的ip地址
反向代理:
1.反向代理服务器是配置在服务端的 2.客户端不知道访问的到底是哪一台服务器 3.达到负载均衡,并且可以隐藏服务器真正的ip地址
# location路径映射
// 优先级关系 --- 优先级越高 越写在前面
(location = ) >
(location /xxx/yyy/zzz) >
(location ^~) >
(location ~,~*) >
(location /起始路径) >
(location /)
2
3
4
5
6
7
8
精准匹配:主机名后面不能带任何字符串;
通用匹配:匹配所有以/xxx开头的路径; location /xxx { }
正则匹配:匹配所有以/xxx开头的路径;location ~ /xxx { }
匹配开头路径----异或:匹配所有以/xxx/xx开头的路径;location ^~ /xxx/xx { }
匹配结尾路径: 匹配以.gif、.jpg或者.png结尾的路径; location ~* .(gif/jpg/png)$ { }
- root与alias的区别
root的处理结果是:root路径+location路径 alias的处理结果是:使用alias路径替换location路径
alias只能位于location块中。(root可以不放在location中)
alias后面必须要用“/”结束,否则会找不到文件的!!而root则可有可无
// 如果一个请求的URI是/t/a.html时
location ^~ /t/ {root /www/root/html/;} // /www/root/html/t/a.html
location ^~ /t/ {alias /www/root/html/new_t/;} // /www/root/html/new_t/a.html
2
3
4
# 负载均衡--upstream
- 轮询:将客户端发起的请求,平均分配给每一台服务器
- 权重:将客户端的请求,根据服务器的权重值不同,分配不同的数量
- ip_hash:基于发起请求的客户端的ip地址不同,他始终会将请求发送到指定的服务器上 就是说如果这个客户端的请求的ip地址不变,那么处理请求的服务器将一直是同一个
upstream 声明应该在 server 之前;
upstream myserver{
# ip_hash;
server {$本机IP}:8080;
server {$本机IP}:8081;
# 权重
# server {$本机IP}:8080 weight=10;
# server {$本机IP}:8081 weight=2;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / { proxy_pass http://{$upstream的名字}/; }
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 健康检查
通过定期轮询向集群里的服务器发送健康检查请求,来检查集群中是否有服务器处于异常状态;
upstream backserver{
server 192.168.0.1 max_fails=1 fail_timeout=40s;
server 192.168.0.2 max_fails=1 fail_timeout=40s;
}
2
3
4
fail_timeout:设定服务器被认为不可用的时间段以及统计失败尝试次数的时间段,默认为10s max_fails:设定Nginx与服务器通信的尝试失败的次数,默认为:1次
# 动静分离、Nginx集群
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
proxy_ssl_verify off;
# 第一个参数是要被替换的,第二个参数是替换后的
sub_filter '</head>' '</head> <style>.el-container > .el-aside, .el-container > .el-header{display: none;}</style>';
sub_filter_once off; #替换所有的,默认是on,替换第一个
}
2
3
4
5
6
7
8
9
10
- 集群--高可用
单点故障,避免nginx的宕机,导致整个程序的崩溃 多台Nginx;安装keepalived--监听nginx健康情况;haproxy,提供一个虚拟的路径,统一接收用户请求
http模块配置keepalive_timeout 65;