Nginx在linux上部署静态资源
概念介绍
Nginx可以作为静态web服务器来部署静态资源。这里所说的静态资源是指在服务端真实存在,并且能够直接展示的一些文件,比如常见的html页面、css文件、js文件、图片、视频等资源。
相对于Tomcat,Nginx处理静态资源的能力更加高效,所以在生产环境下,一般都会将静态资源部署到Nginx中.
server {
listen 80; #监听端口
server_name localhost; #服务器名称
location / { #匹配客户端请求url
root html; #指定静态资源根目录 其中html是文件夹的名字
index index.html; #指定默认首页
}
}
案例演示(我是用docker安装的Nginx)
编写一个DemoNginx.html文件,将这个文件部署到nginx中,然后通过nginx访问html静态资源。
docker inspect mynginx # 看看挂载的目录在那里
编写的html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DemoNginx</title>
</head>
<body>
<h1> nginx部署静态资源</h1>
</body>
</html>
1、 nginx默认显示的就是这个index.html 网页文件
我们把自己写好的文件上传到这个目录 (如果你的名字也叫index.html 直接替换完成就可以,如果不是还需要进行后面的步骤)
这个推荐个小工具(可以用命令快速上传本机文件) rz 是一个在 Linux/Unix 系统中用于 接收文件 的命令,常用于终端工具(如
Xshell、SecureCRT、FinalShell、Mobaxterm 等)配合 zmodem
协议从本地上传文件到服务器。你在通过终端连接到 Linux 服务器时,执行 rz,它会弹出一个文件选择窗口(前提是你的终端工具支持
zmodem 协议),你选择本地文件后,就会被上传到当前目录。
安装教程
sudo yum install lrzsz -y # 安装
rz # 弹出对话框让你选择文件, 默认会上传到当目录
- 更新配置文件
这段配置的意思是:当访问Nginx服务器的根路径 / 时,Nginx会查找并返回 /usr/share/nginx/html 目录下的
DemoNginx.html 文件。如果该文件不存在,将返回一个 404 错误。
3、浏览器通过 ip访问(80端口可以不写)
部署一组静态资源(在默认配置的情况下演示,不动配置文件)
1、我的文件有首页index.html ,我想把nginx的index删掉, 这样就不需要配置 nginx.conf 文件了
这样就直接OK了(配置文件都不用改)
Nginx反向代理入门(本机)
引入:
正向代理–代理的是用户–服务器不知道用户是谁
正向代理服务器是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。(科学上网就是这个原理)
反向代理----代理的是服务器端,用户不知道是哪台服务器提供的服务。
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。用户不需要知道目标服务器的地址,也无须在用户端作任何设定,对于用户来说,访问反向代理服务器是完全无感知的。
入门使用nginx配置反向代理(为了方便在本机演示 MAC系统)
1、 修改配置文件 nginx.conf
server { listen 88; server_name localhost; location / { proxy_pass http://localhost:10100; } }
listen 88; 表示这个 server 区块监听 本机的 88 端口。 所以你访问http://localhost:88 的时候,就会进入这个服务。 server_name localhost;表示这个服务匹配的域名是 localhost。 在本地开发环境中一般是默认这样写的(正式部署时可以改成你自己的域名)
2、检查配置文件,并重新加载
nginx -t # 检查配置文件是否正确 nginx -s reload # 重新加载配置文件
3 、进行访问测试
负载均衡
概念介绍
早期的网站流量和业务功能都比较简单,单台服务器就可以满足基本需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障出现。
**应用集群:**将同一应用部署到多台机器上,组成应用集群,接收负载均衡器分发的请求,进行业务处理并返回响应数据
**负载均衡器:**将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理
此处的负载均衡器,我们将会使用Nginx来实现,而Nginx的负载均衡是基于反向代理的,只不过此时所代理的服务器不是一台,而是多台。
案例演示
1、启动3个服务相同但是端口不同的服务
*🔗不会启动相同的服务,端口不同见教程
里面提供一个接口
2、在nginx中配置负载均衡
打开nginx的配置文件nginx.conf并增加如下配置:
upstream targetsever{
server localhost:10100;
server localhost:10101;
server localhost:10102;
}
server {
listen 88;
server_name localhost;
location / {
proxy_pass http://targetsever;
}
}
3、检查配置文件,并重新加载
nginx.exe -t # 检查配置文件是否正确
nginx.exe -s reload # 重新加载配置文件 s是signal的缩写
4、测试时,我们直接访问nginx的88端口此时nginx会根据负载均衡策略,将请求转发到后面的服务器。
我在浏览器中访问了六次nginx的88端口, 可以发现默认的策略是轮询, 2次一轮
负载均衡算法
在nginx中提供了很多的负载均衡算法,常见的负载均衡算法如下所示:
名称 | 说明 | 特点 |
---|---|---|
round robin | 轮询方式 | 默认的负载均衡算法,按照请求的顺序依次分配给后端服务器。 |
random | 随机 | 随机选择一个后端服务器来处理请求 |
url_hash | 依据url分配方式 | 根据客户端请求url的hash值,来分发请求, 同一个url请求, 会发转发到同一个服务器上 |
ip_hash | 依据ip分配方式 | 根据客户端请求的IP地址计算hash值, 根据hash值来分发请求, 同一个IP发起的请求, 会发转发到同一个服务器上 |
weight | 权重方式 | 根据权重分发请求,权重大的分配到请求的概率大 |
least_conn | 依据最少连接方式 | 哪个服务器当前处理的连接少, 请求优先转发到这台服务器 |
场景对比
random算法
upstream targetserver {
random;
server ip:端口;
server ip:端口;
}
url_hash算法
upstream targetserver {
hash $request_uri;
server ip:端口;
server ip:端口;
}
ip_hash算法
upstream targetserver {
ip_hash;
server ip:端口;
server ip:端口;
}
weight算法
upstream targetserver {
server ip:端口 weight=5;
server ip:端口 weight=1;
}
least_conn算法
upstream targetserver {
least_conn;
server ip:端口;
server ip:端口;
}