ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# nginx ## **与前端有关** - 配置gzip 开启Nginx gzip,压缩后,静态资源的大小会大大的减少,从而可以节约大量的带宽,提高传输效率 ```js 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; } ``` - 屏蔽nginx的版本---安全性--- `server_token: off;` - 页面缓存 — 代理缓存 ```js # 静态文件过期时间 location ^~ /static/ { root /usr/share/nginx/html/; expires 15d; } ``` 页面缓存主要分为三类:客户端缓存、代理缓存、服务端缓存 利用 proxy_cache_path 和 proxy_cache 来开启内容缓存,前者设置缓存的路径和配置,后者启用缓存 ```js http { proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m max_size=10g inactive=60m; server { proxy_cache mycache; } } ``` /data/nginx/cache 指定了本地缓存的根目录;level 代表缓存目录结构是两层的; `keys_zone` 设置了一个共享内存区,10m 代表内存区的大小 ;max_size 设置了缓存的上限;inactive 设置了缓存在未被访问时能够持续保留的最长时间,也就是失活时间。 - 请求头Head有字段有下划线:`underscores_in_headers on;` - 上传文件太大--503: ```js server { client_max_body_size 40960M; client_body_buffer_size 200M; client_body_timeout 6000s; } ``` - 配置跨域请求 403 ```js 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; } } ``` - 配置Https – SSL 认证 签署第三方可信任的 SSL 配置 HTTPS 要用到私钥 example.key 文件和 example.crt 证书文件,而申请证书文件的时候要用到 example.csr 文件; 要开启 HTTPS 服务,在配置文件信息块(server),必须使用监听命令 **listen 的 ssl 参数**和定义服务器证书文件和私钥文件 ```js 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; #私钥文件---绝对路径 } ``` Nginx 配置文件和目录 /etc/nginx/nginx.conf 核心配置文件 /etc/nginx/conf.d/default.conf 默认http服务器配置文件 ## 正向代理/反向代理 正向代理: > 1.正向代理服务是由客户端设立的 > 2.客户端了解代理服务器和目标服务器都是谁 > 3.帮助咱们实现突破访问权限,提高访问的速度,对目标服务器隐藏客户端的ip地址 反向代理: > 1.反向代理服务器是配置在服务端的 > 2.客户端不知道访问的到底是哪一台服务器 > 3.达到负载均衡,并且可以隐藏服务器真正的ip地址 ## **location路径映射** ```js // 优先级关系 --- 优先级越高 越写在前面 (location = ) > (location /xxx/yyy/zzz) > (location ^~) > (location ~,~*) > (location /起始路径) > (location /) ``` 精准匹配:主机名后面不能带任何字符串; 通用匹配:匹配所有以/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则可有可无 ```js // 如果一个请求的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 ``` ## 负载均衡--upstream - 轮询:将客户端发起的请求,平均分配给每一台服务器 - 权重:将客户端的请求,根据服务器的权重值不同,分配不同的数量 - ip_hash:基于发起请求的客户端的ip地址不同,他始终会将请求发送到指定的服务器上 就是说如果这个客户端的请求的ip地址不变,那么处理请求的服务器将一直是同一个 upstream 声明应该在 server 之前; ```js 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的名字}/; } } ``` - 健康检查 通过定期轮询向集群里的服务器发送健康检查请求,来检查集群中是否有服务器处于异常状态; ```js upstream backserver{ server 192.168.0.1 max_fails=1 fail_timeout=40s; server 192.168.0.2 max_fails=1 fail_timeout=40s; } ``` fail_timeout:设定服务器被认为不可用的时间段以及统计失败尝试次数的时间段,默认为10s max_fails:设定Nginx与服务器通信的尝试失败的次数,默认为:1次 ## 动静分离、Nginx集群 ```js 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,替换第一个 } ``` - 集群--高可用 单点故障,避免nginx的宕机,导致整个程序的崩溃 多台Nginx;安装keepalived--监听nginx健康情况;haproxy,提供一个虚拟的路径,统一接收用户请求 http模块配置`keepalive_timeout 65;`