8989- Node:16.14.2
9090- npm:8.5.0
9191
92- ** Step2:启动MySQL、Redis、Minio **
92+ ** Step2:启动MySQL、Redis**
9393
9494** step3:下载本仓库到本地**
9595
1061061 . 进入到blog-consumer目录,在IDEA中打开,等待Maven自动配置
1071072 . 运行启动类:/src/main/java/com/hackyle/blog/consumer/BlogConsumerApp.java
108108
109+ ** Optional Step4:配置静态资源的存取** (如果不需要上传图片等静态资源可不配置)
110+
111+ 1 . 进入配置文件:application-dev.yml,配置file-storage-path和file-domain
112+ 2 . 下载Nginx,编辑配置文件:conf/nginx.conf,然后启动
113+
114+ ```
115+ worker_processes 1;
116+
117+ events {
118+ worker_connections 1024;
119+ }
120+
121+ http {
122+ include mime.types;
123+ default_type application/octet-stream;
124+
125+ sendfile on;
126+ keepalive_timeout 65;
127+
128+ server {
129+ listen 80;
130+ server_name localhost;
131+
132+ location / {
133+ # 这里需要和application-dev.yml中的file-storage-path一样
134+ alias D:\\A03-Program\\A-Programming\\GitHub\\Blog\\res.hackyle.com\\;
135+ }
136+
137+ error_page 500 502 503 504 /50x.html;
138+ location = /50x.html {
139+ root html;
140+ }
141+ }
142+ }
143+ ```
144+
145+
146+
109147# 设计与实现概述
110148
111149- 所有的请求全部打在Nginx上,使用Nginx进行分流到不同的本地服务上
@@ -166,30 +204,19 @@ Redis:100MB
166204
167205
168206
169- ## 静态资源存储器Minio
207+ ## 静态资源存储
170208
171209** 存储所有的静态资源文件:**
172210
173211- 图片
174-
175212- 视频(由于网站的带宽比较小,不直接存放视频文件,存放于第三方站点上)
176-
177213- 音乐
178-
179214- Word、PDF等文档
180-
181215- 其他资源文件
182216
183- ** 环境准备**
184217
185- - cd /opt/minio
186- - wget https://dl.min.io/server/minio/release/linux-amd64/minio
187- - chmod +x minio
188- - MINIO_ROOT_USER=kyle-minio MINIO_ROOT_PASSWORD=hackyle-minio nohup ./minio server /data/minio-data --console-address ":9001" >./init.log 2>&1 &
189218
190-
191-
192- ** 设定:访问Minio中的静态资源通过以下域:https://res.hackyle.com **
219+ ** 设定静态资源通过以下域访问:https://res.hackyle.com **
193220
1942211 . 为域(res.hackyle.com)申请DigiCert 免费版 SSL,下载key和pem文件
195222
@@ -198,42 +225,62 @@ Redis:100MB
1982253 . 配置Nginx
199226
200227```
201- # MinIO静态资源服务
228+ # 静态资源服务:res.conf
202229server {
203- listen 80;
204- server_name res.hackyle.com;
205-
206- #地址重写到https
207- rewrite ^(.*)$ https://$host$1;
230+ listen 80;
231+ server_name res.hackyle.com;
232+
233+ #地址重写到https
234+ rewrite ^(.*)$ https://$host$1;
208235}
209-
210236server {
211- listen 443 ssl http2;
212- listen [::]:443 ssl http2;
213- server_name res.hackyle.com;
214-
215- ssl_certificate "/etc/nginx/cert/res.hackyle.com.pem";
216- ssl_certificate_key "/etc/nginx/cert/res.hackyle.com.key";
217- ssl_session_cache shared:SSL:1m;
218- ssl_session_timeout 10m;
219- ssl_ciphers HIGH:!aNULL:!MD5;
220- ssl_prefer_server_ciphers on;
221-
222- #对外提供静态资源的地址:https://res.hackyle.com/桶名/年份/月份/uuid.文件拓展名
223- location / {
224- proxy_pass http://localhost:9000/;
225- }
226-
237+ listen 443 ssl http2;
238+ listen [::]:443 ssl http2;
239+ server_name res.hackyle.com;
240+
241+ ssl_certificate "/etc/nginx/cert/res.hackyle.com.pem";
242+ ssl_certificate_key "/etc/nginx/cert/res.hackyle.com.key";
243+ ssl_session_cache shared:SSL:1m;
244+ ssl_session_timeout 10m;
245+ ssl_ciphers HIGH:!aNULL:!MD5;
246+ ssl_prefer_server_ciphers on;
247+
248+ #==存在问题:凡是不是从主页跳转到文章页面,都会被拦截
249+ #防盗链:验证所有请求中的Referer是否来自*.hackyle.com,否则响应403
250+ #valid_referers blocked *.hackyle.com;
251+ # if ($invalid_referer){
252+ # return 403;
253+ #}
254+
255+ # https://res.hackyle.com/业务名/年份/月份/uuid.文件拓展名
256+ location / {
257+ alias /data/res.hackyle.com/;
258+ }
227259}
228260```
229261
262+ ** 确定静态资源的存储目录:** /data/res.hackyle.com/
263+
264+ - 存储示例:/data/res.hackyle.com/业务名/年份/月份/文件名.拓展名
265+ - 例如博客(blog.hackyle),业务名为“blog”
266+
267+
268+
269+ ** 主要步骤**
270+
271+ 1 . 在云服务器上,配置一个目录,专门存放静态资源(一般是图片),例如:/data/res.hackyle.com/
272+
273+ 2 . 博客中的上传操作,经过文件流写到该个目录下
274+
275+ 3 . 对外还是以https://res.hackyle.com的方式提供访问,通过nginx,解析到该个文件夹
230276
277+
231278
232- ** 测试: **
279+ ** 移除Minio **
233280
234- 1 . 创建一个hello桶,设置为public,上传一张图片在该桶下
281+ - minio是分布式的文件存储系统,文件会被分割为多个块,分布式存储于多个节点上,这对于简单系统的静态资源管理十分繁杂、冗余
235282
236- 2 . 访问:res.hackyle.com/hello/balloon.jpg
283+ - minio存储在单机节点上时,会产生多个文件夹,不方便备份、数据恢复
237284
238285## Nginx
239286
0 commit comments