nginx入门,部署静态资源,反向代理,负载均衡使用

Nginx在linux上部署静态资源

概念介绍

Nginx可以作为静态web服务器来部署静态资源。这里所说的静态资源是指在服务端真实存在,并且能够直接展示的一些文件,比如常见的html页面、css文件、js文件、图片、视频等资源。

相对于Tomcat,Nginx处理静态资源的能力更加高效,所以在生产环境下,一般都会将静态资源部署到Nginx中.

properties 复制代码
server {
    listen 80;				#监听端口	
    server_name localhost;	#服务器名称
    location / {			#匹配客户端请求url
        root html;			#指定静态资源根目录  其中html是文件夹的名字
        index index.html;	#指定默认首页
    }
}

案例演示(我是用docker安装的Nginx)

编写一个DemoNginx.html文件,将这个文件部署到nginx中,然后通过nginx访问html静态资源。

编写的html文件

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DemoNginx</title>
</head>
<body>
<h1>  nginx部署静态资源</h1>
</body>
</html>

1、将静态资源复制到 nginx安装目录的html目录中(此目录被我挂载到了宿主机的web目录上)

  1. 更新配置文件

这段配置的意思是:当访问Nginx服务器的根路径 / 时,Nginx会查找并返回 /usr/share/nginx/html 目录下的

DemoNginx.html 文件。如果该文件不存在,将返回一个 404 错误。

3、浏览器通过 ip访问(80端口可以不写)

Nginx反向代理入门(本机)

引入:

正向代理--代理的是用户--服务器不知道用户是谁

正向代理服务器是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。(科学上网就是这个原理)

反向代理----代理的是服务器端,用户不知道是哪台服务器提供的服务。

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。用户不需要知道目标服务器的地址,也无须在用户端作任何设定,对于用户来说,访问反向代理服务器是完全无感知的。

入门使用nginx配置反向代理(为了方便在本机演示 MAC系统)

1、 修改配置文件 nginx.conf

bash 复制代码
    server {
        listen       88;
        server_name  localhost;
        location / {
                proxy_pass http://localhost:10100;
        }     
    } 	
复制代码
listen 88; 表示这个 server 区块监听 本机的 88 端口。
 所以你访问http://localhost:88 的时候,就会进入这个服务。 
server_name localhost;表示这个服务匹配的域名是 localhost。 
在本地开发环境中一般是默认这样写的(正式部署时可以改成你自己的域名)

2、检查配置文件,并重新加载

shell 复制代码
    nginx  -t   			
 	# 检查配置文件是否正确 
    nginx  -s reload		
 	# 重新加载配置文件

3 、进行访问测试


负载均衡

概念介绍

早期的网站流量和业务功能都比较简单,单台服务器就可以满足基本需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障出现。

**应用集群:**将同一应用部署到多台机器上,组成应用集群,接收负载均衡器分发的请求,进行业务处理并返回响应数据

**负载均衡器:**将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理

此处的负载均衡器,我们将会使用Nginx来实现,而Nginx的负载均衡是基于反向代理的,只不过此时所代理的服务器不是一台,而是多台。

案例演示

1、启动3个服务相同但是端口不同的服务

*🔗不会启动相同的服务,端口不同见教程

里面提供一个接口

2、在nginx中配置负载均衡

打开nginx的配置文件nginx.conf并增加如下配置:

properties 复制代码
    upstream targetsever{
       server localhost:10100;
       server localhost:10101;
       server localhost:10102;
    }
    server {
        listen       88;
        server_name  localhost;
        location / {
                proxy_pass http://targetsever;
        }

    }

3、检查配置文件,并重新加载

shell 复制代码
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算法

properties 复制代码
upstream targetserver {
	random;
	server ip:端口;
	server ip:端口;
}

url_hash算法

properties 复制代码
upstream targetserver {
	hash $request_uri;
	server ip:端口;
	server ip:端口;
}

ip_hash算法

properties 复制代码
upstream targetserver {
	ip_hash;
	server ip:端口;
	server ip:端口;
}

weight算法

properties 复制代码
upstream targetserver {
	server ip:端口 weight=5;
	server ip:端口 weight=1; 
}

least_conn算法

properties 复制代码
upstream targetserver {
	least_conn;
	server ip:端口;
	server ip:端口;
}
相关推荐
咖啡不甜不好喝11 小时前
SpringCloud之OpenFeign
spring cloud·openfeign
iru13 小时前
nginx被报CVE-2025-1695漏洞,检查后反馈是误报
运维·nginx
黄俊懿15 小时前
【深入理解SpringCloud微服务】Spring-Security作用与原理解析
java·后端·安全·spring·spring cloud·微服务·架构师
叫致寒吧19 小时前
Dockerfile
java·spring cloud·eureka
cnskylee1 天前
【Nginx】Nginx-1.28.1版本已恢复对CentOS 7的兼容性
运维·nginx·centos
悟空码字1 天前
从零到一搭建SpringCloud微服务,一场代码世界的“分家”大戏
java·后端·spring cloud
黄俊懿1 天前
【深入理解SpringCloud微服务】Gateway源码解析
java·后端·spring·spring cloud·微服务·gateway·架构师
刘个Java1 天前
手搓遥控器通过上云api执行航线
java·redis·spring cloud·docker
没有bug.的程序员1 天前
Ribbon vs LoadBalancer 深度解析
jvm·后端·spring cloud·微服务·ribbon·架构·gc调优
黄俊懿2 天前
【深入理解SpringCloud微服务】Seata(AT模式)源码解析——全局事务的回滚
java·后端·spring·spring cloud·微服务·架构·架构师