部署--Nginx

9/21/2020 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;
}
1
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 /)

1
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
1
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的名字}/; }
}
1
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;
}
1
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,替换第一个
    }

1
2
3
4
5
6
7
8
9
10
  • 集群--高可用

单点故障,避免nginx的宕机,导致整个程序的崩溃 多台Nginx;安装keepalived--监听nginx健康情况;haproxy,提供一个虚拟的路径,统一接收用户请求

http模块配置keepalive_timeout 65;