共计 4298 个字符,预计需要花费 11 分钟才能阅读完成。
一、Nginx 动静拆散
-
什么是动静拆散
就是将动静的资源与动态的资源文件进行拆散,如图:
-
目标
解决因为动态资源和动静资源竞争 CPU 导致的性能问题。
-
场景
次要的应用场景是 Web 我的项目中应用。
比方:查问某个商品列表的页面,如图:
商品列表页面初始化的时候,会加载 Js 和 Css 文件和数据库中的商品数据。
前提:并发量比拟大,动静资源将 cpu 和内存等资源耗尽,导致动态资源无法访问,所以将我的项目中的动态资源进行拆分。
-
实例我的项目
-
条件
- Net5 环境的 mvc 我的项目
- Nginx
-
实例
-
新建 Web 我的项目,动态资源未分离的状态,如图:
-
运行 Nginx
如图:
- 我的项目运行后如图:
– -
动态资源拆分
将我的项目中动态资源【wwwroot】拆分到其余文件夹中,新建一个 StaticResource 文件夹,
如图:
-
-
因我的项目中没有了动态资源文件,导致页面布局凌乱,如图:![在这里插入图片形容](https://img-blog.csdnimg.cn/b3e5aa153a2642a2ae237c185b8421c6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQEDnpZ7lhpw=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
所以须要在 Nginx 服务器中配置动态文件,配置代码如下:```yaml
#配置动态资源
location ~ \.(ico|js|css|png|jpg|mp4)$ {root 动态资源门路;}
# ~ 代表优先匹配动态资源
```
整体配置如下:```yaml
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {worker_connections 1024;}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {root html;}
#代理 动态数据
location / {proxy_pass http://Demo.Application;}
#代理 动态资源
location ~ \.(ico|js|css|png|jpg|mp4)$ {root D:/StaticResource/wwwroot;}
}
#负载平衡(分流配置)upstream Demo.Application{
least_conn;
server localhost:5000;
server localhost:5001;
}
}
```
运行后果如图:![在这里插入图片形容](https://img-blog.csdnimg.cn/2a15fbf4618545e89035c405a51df632.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQEDnpZ7lhpw=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
依照以上的 nginx 配置,动态数据与动态资源还是共享 CPU 资源的,那么仍然没有解决当并发量过大,动静资源将 cpu 和内存等资源耗尽,导致动态资源无法访问的问题,所以咱们要将动态数据和动态资源放在不同的虚拟主机中,配置代码如下:```yml
worker_processes 1;
events {worker_connections 1024;}
http {
include mime.types;
default_type application/octet-stream;
#加载动态数据
server {
listen 801;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {root html;}
#代理
location / {proxy_pass http://Demo.Application;}
}
#用来合并 动态数据和动态资源
server {
listen 80;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {root html;}
#代理 动态数据
location / {proxy_pass http://localhost:801;}
#代理 动态资源
location ~ \.(ico|js|css|png|jpg|mp4)$ {proxy_pass http://localhost:802;}
}
#加载动态资源
server {
listen 802;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {root html;}
#代理 动态资源
location ~ \.(ico|js|css|png|jpg|mp4)$ {root D:/StaticResource/wwwroot;}
}
#负载平衡(分流配置)upstream Demo.Application{server localhost:5001;}
}
```
依照以上的建设两个不同的虚拟机,然而还在一个 Nginx 当中,还是会存在资源竞争的问题,所以要将动态数据和动态资源放在不同的 Nginx 当中,【举荐应用这种形式】实现如下:- Nginx 1 动态数据 配置文件如下
```yml
worker_processes 1;
events {worker_connections 1024;}
http {
include mime.types;
default_type application/octet-stream;
#加载动态数据
server {
listen 801;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {root html;}
#代理
location / {proxy_pass http://Demo.Application;}
}
#负载平衡(分流配置)upstream Demo.Application{server localhost:5001;}
}
```
- Nginx2 动态资源 配置文件如下
```yml
worker_processes 1;
events {worker_connections 1024;}
http {
include mime.types;
default_type application/octet-stream;
#加载动态资源
server {
listen 802;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {root html;}
#代理 动态资源
location ~ \.(ico|js|css|png|jpg|mp4)$ {root D:/StaticResource/wwwroot;}
}
}
```
- Nginx3 合并资源配置文件如下
```yml
worker_processes 1;
events {worker_connections 1024;}
http {
include mime.types;
default_type application/octet-stream;
#用来合并 动态数据和动态资源
server {
listen 80;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {root html;}
#代理 动态数据
location / {proxy_pass http://localhost:801;}
#代理 动态资源
location ~ \.(ico|js|css|png|jpg|mp4)$ {proxy_pass http://localhost:802;}
}
}
```
二、Nginx 代理缓存
-
条件
-
定义缓存
proxy_cache_path /cache/nginx/ levels=1:2 keys_zone=mycache:64m;
-
存储缓存
#代理 动态数据 location / { proxy_cache mycache; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache_methods GET HEAD; proxy_cache_revalidate on; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_valid any 1m; proxy_cache_min_uses 1; proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504; proxy_pass http://localhost:801; }
-
建缓存文件夹
nginx-1.20.0\cache\nginx
-
-
运行 后果如下
如图:
-
缺点
-
如果把数据库的数据改了,则页面不会发生变化,缓存工夫过期后,则会发生变化。
解决方案:应用 Redis 来解决。
-
三、Nginx http 转 htts
-
生成证书的工具
- 生成工具:https://slproweb.com/download…
- 生成教程:https://jingyan.baidu.com/art…
四、Nginx include
-
应用命令
include 配置文件名称.conf #备注 在 nginx 配置文件下创立配置文件
五、Nginx Stream 反向代理
-
四层反向代理 mysql 数据库
配置如下:
stream { server { listen 13306; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass localhost:3306; } upstream mysql {server localhost:3306;} }
正文完