编程随笔 编程随笔
  • 前端
  • 后端
  • 嵌入式
  • python
  • 星球项目
  • 开源项目
工具类
  • 项目仓库

    • 部署仓库 (opens new window)
    • 代码仓库 (opens new window)
  • vuepress插件

    • 自动生成导航栏与侧边栏 (opens new window)
    • 评论系统 (opens new window)
    • 全文搜索 (opens new window)
    • 选项卡 (opens new window)
    • 自动生成sitemap (opens new window)
  • 自主开发插件

    • 批量操作frontmatter (opens new window)
    • 链接美化 (opens new window)
    • 折叠代码块 (opens new window)
    • 复制代码块 (opens new window)

liyao52033

走运时,要想到倒霉,不要得意得过了头;倒霉时,要想到走运,不必垂头丧气。心态始终保持平衡,情绪始终保持稳定,此亦长寿之道
  • 前端
  • 后端
  • 嵌入式
  • python
  • 星球项目
  • 开源项目
工具类
  • 项目仓库

    • 部署仓库 (opens new window)
    • 代码仓库 (opens new window)
  • vuepress插件

    • 自动生成导航栏与侧边栏 (opens new window)
    • 评论系统 (opens new window)
    • 全文搜索 (opens new window)
    • 选项卡 (opens new window)
    • 自动生成sitemap (opens new window)
  • 自主开发插件

    • 批量操作frontmatter (opens new window)
    • 链接美化 (opens new window)
    • 折叠代码块 (opens new window)
    • 复制代码块 (opens new window)
  • 知识点

    • npm 和 yarn
    • 登录后重定向到原先路由
    • patch-package使用
    • TortosseGit的ssh配置
    • nginx常用配置
      • 配置HTTPS
      • 开启gzip压缩静态文件
      • HTTP重定向到HTTPS
      • 配置缓存时间及防止用户直接访问目录或文件
      • 精细化 Nginx 缓存策略
    • node后端部署
    • mounted阶段获取不到dom的原因及解决方法
  • 代码调试

  • vue2

  • vue3

  • react

  • typescript

  • 前端
  • 知识点
华总
2023-09-01
0
0
目录

nginx常用配置原创

# 配置HTTPS

server {
        listen       443 ssl;
        server_name  xiaoying.org.cn;
        root         /usr/local/dist; #前端打包文件位置

       #域名证书文件名称
        ssl_certificate /etc/nginx/xiaoying.org.cn_bundle.crt;
       #域名证书私钥文件名称
        ssl_certificate_key /etc/nginx/xiaoying.org.cn.key;
  
        #请按照以下协议配置
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
        #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;

        location ^~ /api/ {   #后端接口前缀
        proxy_set_header Host $host;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_pass http://127.0.0.1:8080;  #后端接口地址
    }

        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# 开启gzip压缩静态文件

# 配置 GZip 压缩

gzip 可以在 http, server, location 中和配置,这里配置到 http 下是全局配置,

events {
    worker_connections 1024;
}

http{
   gzip on;   # 开启 gzip,Default: off
   gzip_min_length 1k; # gzip 压缩文件体积的最小值
   gzip_comp_level 6; # 压缩级别: 1-9,6是推荐的压缩级别,Default: 1
  
   # 压缩文件类型
   gzip_types application/atom+xml application/geo+json application/javascript application/x-javascript application/json application/ld+json application/manifest+json application/rdf+xml application/rss+xml application/xhtml+xml application/xml font/eot font/otf font/ttf image/svg+xml text/css text/javascript text/plain text/xml image/jpeg image/gif image/png;
  
  # 当客户端的 Accept-Encoding-capabilities 头发生变化时,告诉代理缓存 gzip 和常规版本的资源
   gzip_vary on; 
  
  /**服务器开启对静态文件( CSS, JS, HTML, SVG, ICS, and JSON)的压缩。但是,要使此部分与之相关,需要在 gzip_types 设置 MIME 类型,,仅仅设置 gzip_static 为 on 是不会自动压缩静态文件的。**/
   gzip_static on;
  
 /** 设置用于压缩响应的 number 和 size 的缓冲区。默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它也可以是4K或8K。**/
   gzip_buffers 32 4k;
  
  # IE6 以下的浏览器禁用 gzip 压缩
   gzip_disable "MSIE [1-6]\.";
  
  server {
    ...
      location / {
      ...
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 适合 GZip 压缩的资源类型

实际上,gzip 主要用于对文本类型的资源进行压缩,例如常用见的文本资源:

  • HTML 文件:text/html(nginx 服务器默认就会压缩)、application/xhtml+xml
  • CSS 文件:text/css
  • JS 文件:application/x-javascript、application/javascript、text/javascript
  • JSON 文件(或者API请求结果):application/json、application/geo+json、application/ld+json application/manifest+json、application/x-web-app-manifest+json
  • XML 文件:application/xml、application/atom+xml、application/rdf+xml、application/rss+xml
  • SVG 文件:image/svg+xml;

除了常用的文本文件,gzip 也支持压缩以下 MIME 类型的文件:

  • application/vnd.ms-fontobject
  • application/wasm
  • font/eot
  • font/otf
  • font/ttf
  • image/bmp
  • text/cache-manifest
  • text/calendar
  • text/markdown
  • text/plain
  • text/vcard
  • text/vnd.rim.location.xloc
  • text/vtt
  • text/x-component
  • text/x-cross-domain-policy

GZip 对基于文本的内容的资源压缩效果最好,在压缩较大文件时往往可实现高达 70-90% 的压缩率,而如果对已经通过替代算法压缩过的资源(例如,大多数图片格式)运行 gzip,则效果甚微,甚至毫无效果。

# HTTP重定向到HTTPS

server {
        listen       80;
        server_name  xiaoying.org.cn;
        rewrite ^(.*)$  https://$host$1 permanent; 
        # return 301 https://$host$request_uri; 		
 }
1
2
3
4
5
6

# 配置缓存时间及防止用户直接访问目录或文件

ETag 可以由服务器生成,例如使用文件的内容的哈希值或其他算法生成唯一标识。客户端在后续请求中可以通过 If-None-Match 头部将之前收到的 ETag 发送回服务器。如果资源未发生变化,服务器可以返回 304 Not Modified 的响应,告知客户端可以使用本地缓存。如果资源发生变化,服务器将返回新的资源和更新的 ETag。

location ~* \.(js|css|jpg|jpeg|png|gif|bmp|swf)$ {
    etag on;
  
   # max-age=86400 表示资源可以被缓存的最大时间为86400秒,即一天
   add_header Cache-Control "public, max-age=86400";
}

location ~ /\.
{
  # 防止直接通过浏览器输入URL访问敏感文件或目录。
   deny all;
}
1
2
3
4
5
6
7
8
9
10
11
12

# 精细化 Nginx 缓存策略

server {
    listen 443 ssl;
    server_name your.domain.com; # 替换为你的域名
    root /usr/share/nginx/html; # 替换为你的项目根目录
  
    # 压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  
    #域名证书文件名称
    ssl_certificate /etc/nginx/fullchain.cer;
    #域名证书私钥文件名称
    ssl_certificate_key /etc/nginx/xiaoying.org.cn.key;

    #请按照以下协议配置
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
  
    include /etc/nginx/fdao.conf;
   
    # 规则1:HTML 文件 - 永不缓存   
    # 这是最关键的一步,确保浏览器总是获取最新的入口文件。    
    location = /index.html {        
        add_header Cache-Control "no-cache, no-store, must-revalidate";        
        add_header Pragma "no-cache";        
        add_header Expires "0";
    }
  
    # 规则2:带 Hash 的静态资源 - 永久缓存    
    # 文件名中的 Hash 确保了内容变化时文件名也会变化,所以可以放心地让浏览器永久缓存。   
    # `immutable` 告诉浏览器这个文件内容永远不会变,连校验请求都无需发送。    
    location ~* \.[a-f0-9]{8}\.(css|js)$ {
    	  expires 1y; 
        add_header Cache-Control "public, immutable"
   }
  
    # 规则3:其他静态资源(如图片、字体) - 长期缓存   
    # 这些文件通常不带 Hash,但也不常变动,可以设置一个较长的缓存时间。   
    location ~* \.(jpg|jpeg|png|gif|ico|svg|woff|woff2|ttf)$ {       
        expires 30d;        
        add_header Cache-Control "public";
	}
  
  # 规则4:单页应用(SPA)路由处理    
  # 这是保证 React/Vue 等路由正常工作的关键。    
  # 重要的是,它会将所有未匹配到具体文件的请求都交由 index.html 处理。    
  # 由于我们已为 /index.html 单独设置了不缓存规则,所以这里是安全的。   
    location / {       
        try_files $uri $uri/ /index.html;
	}
  
   #反向代理
   location ^~ /api/ {   #后端接口前缀
      proxy_set_header Host $host;
      proxy_set_header   X-Forwarded-Proto $scheme;
      proxy_set_header   X-Real-IP         $remote_addr;
      proxy_pass http://127.0.0.1:8080;  #后端接口地址
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

配置解读

  • 「location = /index.html」:使用 = 精确匹配 /index.html,并强制其不被任何一方缓存。这是整个策略的核心。
  • 「location ~\* \.[a-f0-9]{8}\.(css|js)$」:通过正则表达式匹配所有带 8 位 Hash 的 JS 和 CSS 文件,并设置长达一年的缓存(1y)和 immutable 属性,实现最佳性能。
  • 「location /」:作为最后的 fallback,处理 SPA 的前端路由,将所有页面导航都指向不缓存的 index.html。

Web 应用的缓存问题,看似玄学,实则逻辑清晰。其根本在于 「HTTP 响应头是控制缓存的唯一权威」。通过在 Nginx 层实施精细化的缓存策略——「让入口 HTML 永不缓存,让带 Hash 的静态资源永久缓存」——我们不仅能从根源上解决用户无法看到更新的问题,还能最大化地利用缓存来提升应用性能。

别忘了 CDN

如果你的应用部署在 CDN 之后,请确保 CDN 的缓存策略与你的 Nginx 配置保持一致。通常需要在 CDN 控制台设置规则,使其 “「遵守源站(Origin)的 Cache-Control 头」”。

文件类型 建议 TTL 是否遵守源站
*.html 0 秒 是
*.[hash].js 31536000 秒 (1 年) 是
*.[hash].css 31536000 秒 (1 年) 是
图片 / 字体 2592000 秒 (30 天) 是
#前端
上次更新: 2025/02/18 14:46:10
TortosseGit的ssh配置
node后端部署

← TortosseGit的ssh配置 node后端部署→

最近更新
01
暂停windows更新 原创
07-30
02
关联到已存在的 GitHub 仓库 原创
07-28
03
numpy 原创
07-24
04
pandas 基础操作 原创
07-24
05
node后端部署 原创
04-10
更多文章>
Copyright © 2023-2025 liyao52033  All Rights Reserved
备案号:鄂ICP备2023023964号-1    
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式