Nginx使用场景&&Nginx基础&&Nginx的负载均衡策略&&Nginx配置文件&&Nginx+Tomcat集群示例&&Nginx部署静态网站&&根据Tomcat容器实际IP修改Nginx配置

这篇具有很好参考价值的文章主要介绍了Nginx使用场景&&Nginx基础&&Nginx的负载均衡策略&&Nginx配置文件&&Nginx+Tomcat集群示例&&Nginx部署静态网站&&根据Tomcat容器实际IP修改Nginx配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. Nginx使用场景

2. Nginx中的进程

2.1 Nginx中的多进程模型

2.2 多进程模式的优点:

2.3 缓存

3. Ngnix的负载均衡策略

3.1 轮询法

3.2 加权轮询

3.3 原地址哈希

3.4 最小连接数法

3.5 Fair

3.6 url_hash

3. Nginx配置文件

4. Nginx+tomcat 集群示例

4.1 下载镜像

4.2 在宿主机中创建需要挂载的目录

4.3 常见测试用的index.html

4.4 创建Nginx配置文件

4.5 启动3个tomcat容器准备集群

4.6 根据tomcat容器实际IP修改Nginx配置文件

4.7 启动Nginx容器

4.8 测试集群

5. Nginx部署静态网站

5.1 准备前端应用

5.2 创建构建目录

5.3 构建镜像

5.4 运行容器


1. Nginx使用场景

Nginx的主要使用场景:

  • HTTP服务器
    Nginx可以作为静态服资源服务器来使用,例如在前后端分离的架构中可以将前端应用部署在Nginx服务器中。也可作为上传服务器、图片服务器等使用
  • 作为反向代理
    Nginx可以作为反向代理,将来自互联网的外部请求转发到内网中应用服务器。通过反向代理可以实现负载均衡。
    Nginx内置了丰富的负载均衡算法:轮询,基于权重,ip_hash等,通过第三方支持,还有fair(响应时间短的优先分配),url_hash等。

2. Nginx中的进程

2.1 Nginx中的多进程模型

Nginx的具有很高的性能,有庞大的使用群体,这与它的基本架构有紧密关系。
在Nginx运行时后台包括一个master主进程和多个worker进程。Nginx也可以支持多线程方式工作,但模式使用多进程,也是主流的使用方式。

  • master进程
    主进程主要进行Nginx配置文件解析,数据结构初始化,模块注册配置,信号处理,网络监听,工作进程生成和管理等工作。监控worker进程的状态,在worker进程异常退出后可以自动重新启动进程。

  • worker进程
    多个worker进程之间是对等的关系,竞争去处理客户的请求,一个请求只有一个worker去处理。worker进程数量一般与机器cpu数量相当。每个worker都是单线程的,采用异步非阻塞方式处理请求。是Nginx服务器提供服务的主体。

当一个请求进来时,多个worker会竞争处理这个请求,但有且只有一个worker可以获取到该请求的处理权限。

2.2 多进程模式的优点:

每个worker进程是互相独立的,互相不影响,一个进程的退出不影响其他的进程服务。每个worker进程使用异步非阻塞方式来处理请求,具有很高的性能。

2.3 缓存

Nginx服务器为提供请求的处理效率,减轻网络压力,采用缓存机制。缓存机制将历史应答的数据缓存到本地,并且在Nginx启动后会启动一个专门的后台进程对本地缓存内容建立维护索引,以此来加快缓存文件的访问。

所以Nginx的后台进程出master进程,worker进程以外,还有后端服务进程。

3. Ngnix的负载均衡策略

Nginx中支持多种负载均衡策略,在不同的使用场景中我们可以选择合适的负载均衡策略

3.1 轮询法

将请求轮流分配到注册的后端服务器中,平等的对待所用的后端服务器,不关心服务器的实际连接数就负载情况。比较适合后端服务器的配置都差不多的情况。例如如下配置:

upstream server {
    server 192.160.0.123:8080;
    server 192.160.0.124:8080;
    server 192.160.0.125:8080;
}

3.2 加权轮询

可以为每个武器配置一个权重值,权重值越大将会有机会分担更多的请求,该配置方式比价适合集群中各个服务器配置不均衡的情况,对高的服务器可以配置大一些的权重,对配置低的机器可以配置小一些的权重。

upstream server {
    server 192.160.0.123:8080 weight=4;
    server 192.160.0.124:8080 weight=2;
    server 192.160.0.125:8080 weight=1;
}

3.3 原地址哈希

根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器的大小进行取模计算,得到的结果作为客户端要访问的服务器的序号。

特点:这种方式可以保证来自同一ip的请求被打的固定机器上,可以解决session问题。

示例:

upstream server {
    ip_hash;
    server 192.160.0.123:8080 weight=1;
    server 192.160.0.124:8080 weight=2;
    server 192.160.0.125:8080 weight=1;
}

3.4 最小连接数法

该算法根据后端服务器当前的连接情况,动态的选取其中当前堆积的连接数最少的一台服务器来处理请求,以便于提高服务的利用率。

这种算法比较适合后端各个服务器配置不同的情况。

示例:

upstream server {
    least_conn;
    server 192.160.0.123:8080 weight=1;
    server 192.160.0.124:8080 weight=2;
    server 192.160.0.125:8080 weight=1;
}

3.5 Fair

Fair负载均衡比基于权重,和ip_hash算法更加智能,可以根据后端服务器的响应时间来分配请求,响应时间短优先分配。
该算法由第三方提供,需要安装upstream_fair模块。

示例:

upstream server {
    fair;
    server 192.160.0.123:8080 weight=1;
    server 192.160.0.124:8080 weight=2;
    server 192.160.0.125:8080 weight=1;
}

3.6 url_hash

与ip_hash比较接近,该算法根据url的哈希结果来分配请求,使每个url定向到一台后端服务器上。

该算法为第三方提供,使用时需要先安装Nginx的hash软件包

upstream server {
    hash $request_uri;
    server 192.160.0.123:8080 weight=1;
    server 192.160.0.124:8080 weight=2;
    server 192.160.0.125:8080 weight=1;
}

3. Nginx配置文件

Nginx配置文件主要有4部分:

  • main(全局配置)
    Main部分的设置影响其他所有部分的设置
  • server(主机配置)
    主要用于指定虚拟机主机域名,ip和端口等内容
  • upstream(上游服务器配置,用于反向代理,负载均衡)
    用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡
  • location(url匹配特定位置的配置)
    用于匹配网页位置(如,跟目录“/”,”/images”等)
  • Nginx使用场景&&Nginx基础&&Nginx的负载均衡策略&&Nginx配置文件&&Nginx+Tomcat集群示例&&Nginx部署静态网站&&根据Tomcat容器实际IP修改Nginx配置,Nginx安装应用专栏,nginx,依赖倒置原则,CSDN开发云,java,开发语言,实施,vim

nginx配置文件示例:

#指定用户和用户组,不指定默认为nobody
user  nginx;

#工作进程数,根据机器情况设置
worker_processes  1;

#日志设置
error_log  /var/log/nginx/error.log warn;

#pid文件
pid        /var/run/nginx.pid;

events {
	#配置事件驱动模型,其他还要select,poll,kqueue等
	use epoll;
	#配置每个worker最大连接数
    worker_connections  1024;
}

http {
    #引入其他配置文件,在nginx服务器中有/etc/nginx/mime.types
	#当nginx收到静态请求时,在请求文件的类型在mime.types中匹配mime type
	#这些mime type数据告诉浏览器文件数据的类型,以便于更好的展示数。
    include       /etc/nginx/mime.types;
	
	#默认为二进制数据流
    default_type  application/octet-stream;

	#定义日志格式,$remote_addr,$remote_user等是nginx中的预定义变量
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$upstream_addr"';
	#配置日志
    access_log  /var/log/nginx/access.log  main;

    #使用sendfile系统调用来提高性能
    sendfile        on;
    #tcp_nopush     on;

	#指定 KeepAlive 的超时时间(timeout)
	#keepalive模式告诉web服务器在处理完一个请求后保存这个tcp连接,
	#如果在规定的超时时间内接收到客户端的其他请求,服务端会利用这个未关闭
	#的连接,而不需在重新创建连接
	keepalive_timeout 60s;
	
	#是否开启gzip压缩功能
    #gzip  on;

    upstream tomcat {
        server 172.17.0.2:8080;
        server 172.17.0.3:8080;
    }

    server {
        listen 80;
        server_name localhost;

		#location部分,通过指定模式与客户端请求uri进行匹配。
        #基本语法如下:location [=|~|~*|^~|@] pattern{……}
        #1.没有修饰符 表示必须以指定模式开始。例如:location /abc
        #2.=表示:必须与指定的模式精确匹配。例如:location = /abc
        #3.~表示:指定的正则表达式要区分大小写。例如:location ~ ^/abc$
        #4.~*表示:指定的正则表达式不区分大小写。例如:location ~* ^/abc$
        #5.^~ 类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,那么就停止搜索其他模式了
        #正则表达式示例:location ~* \.(gif|jpg|jpeg)$ 匹配任何以gif, jpg, or jpeg结尾的文件
		
		#通用匹配,任何请求都匹配到
        location / {
			#配置转发
			#tomcat为上面upstream部分的定义
            proxy_pass http://tomcat;
			
			#其作用是对发送给客户端的URL进行修改
            proxy_redirect off;
			
			#默认首页
            index index.html index.htm;
			
			#附加字段到请求头
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Real-Port $remote_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

		#静态资源配置
        location /static/ {
			#访问/static/目录中的文件时,
			#nginx会到/usr/share/nginx/html/中查找文件
            alias /usr/share/nginx/html/;
        }
    }

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

4. Nginx+tomcat 集群示例

本示例通过使用docker容器搭建Nginx + tomcat集群,来演示使用Nginx实现负载均衡的例子。

4.1 下载镜像

root@ubuntu:/# docker pull nginx
root@ubuntu:/# docker pull tomcat

4.2 在宿主机中创建需要挂载的目录

1)在宿主机上

  • 创建用于存放nginx配置文件,及日志的目录,
  • tomcat的部署目录,及日志目录。

这些目录在稍后创建容器时会被挂载到容器中,这种方式可以很方便的通过修改宿主机中文件来改变容器中对应文件的目的。

root@ubuntu:/# mkdir -p /opt/nginx/conf/ /opt/nginx/www /opt/nginx/logs

root@ubuntu:/# mkdir -p /opt/tomcat/webapps/ROOT /opt/tomcat/conf /opt/tomcat/logs

4.3 常见测试用的index.html

在宿主机/opt/tomcat/webapps/ROOT目录下创建一个用于测试的html文件。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8"/>
	<title>Nginx+tomcat集群</title>
</head>
<body>
	<h1>Nginx+tomcat集群部署示例</h1>
</body>
<html>

4.4 创建Nginx配置文件

在/opt/nginx/conf目录下创建nginx.conf配置文件, 具体内容请见shang“3. nginx配置文件示例”部分

4.5 启动3个tomcat容器准备集群

root@ubuntu:/# docker run -d --name tomcat1 -v /opt/tomcat/webapps:/usr/local/tomcat/webapps tomcat

root@ubuntu:/# docker run -d --name tomcat2 -v /opt/tomcat/webapps:/usr/local/tomcat/webapps tomcat

root@ubuntu:/# docker run -d --name tomcat3 -v /opt/tomcat/webapps:/usr/local/tomcat/webapps, tomcat

注意:必须将容器的挂载目录设置为:/usr/local/tomcat/webapps,因为在tomcat镜像中将目录设置为工作目录,可以通过:docker inspect tomcat 查看容器的详细信息进行验证。

获取三个tomcat容器的ip地址:

root@ubuntu:/# docker inspect tomcat1 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
root@ubuntu:/# docker inspect tomcat2 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",
root@ubuntu:/# docker inspect tomcat3 | grep Address
            "LinkLocalIPv6Address": "",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "GlobalIPv6Address": "",
            "IPAddress": "172.17.0.4",
            "MacAddress": "02:42:ac:11:00:04",
                    "IPAddress": "172.17.0.4",
                    "GlobalIPv6Address": "",
                    "MacAddress": "02:42:ac:11:00:04",

tomcat1, tomcat2, tomcat3 的ip地址分别为 : 172.17.0.2, 172.17.0.3,172.17.0.4

4.6 根据tomcat容器实际IP修改Nginx配置文件

Nginx使用场景&&Nginx基础&&Nginx的负载均衡策略&&Nginx配置文件&&Nginx+Tomcat集群示例&&Nginx部署静态网站&&根据Tomcat容器实际IP修改Nginx配置,Nginx安装应用专栏,nginx,依赖倒置原则,CSDN开发云,java,开发语言,实施,vim

4.7 启动Nginx容器

docker run -d -p 80:80 --name nginx -v /opt/nginx/www:/usr/share/nginx/html -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/nginx/logs:/var/log/nginx nginx

4.8 测试集群

Nginx容器正常启动后,访问:http://192.168.62.133/,如果能出现测试页面,则说明集群正常。如下图:

Nginx使用场景&&Nginx基础&&Nginx的负载均衡策略&&Nginx配置文件&&Nginx+Tomcat集群示例&&Nginx部署静态网站&&根据Tomcat容器实际IP修改Nginx配置,Nginx安装应用专栏,nginx,依赖倒置原则,CSDN开发云,java,开发语言,实施,vim

5. Nginx部署静态网站

本示例基于Docker容器在Nginx中部署一个前端网站。现在项目越来越流行前后端分离的开发方式,而Nginx是目前流行的高性能的web服务器,我们可以将前端应用部署在Nginx中。

5.1 准备前端应用

准备一个用于部署的前端应用,为方便演示课件提供一个用于测试的前端应用(\docker+ngnix+vue\dist)。

5.2 创建构建目录

创建一个构建目录,如“docker+ngnix+vue”,并将用于发布的前端应用放入构建目录。然后创建Dockerfile文件。

Nginx使用场景&&Nginx基础&&Nginx的负载均衡策略&&Nginx配置文件&&Nginx+Tomcat集群示例&&Nginx部署静态网站&&根据Tomcat容器实际IP修改Nginx配置,Nginx安装应用专栏,nginx,依赖倒置原则,CSDN开发云,java,开发语言,实施,vim

Dockerfile文件如下:

FROM nginx:1.17.9
MAINTAINER lisen "lisensir@qq.com"

#/usr/share/nginx/html
COPY dist/ /usr/share/nginx/html/

本Dockerfile非常简单:

  • 指定基础镜像为 nginx1.17.9
  • 指定维护者信息
  • 将构建目录下的dist目录拷入到 容器的/usr/share/nginx/html/目录下,该目录是静态文件默认放置目录

5.3 构建镜像

将构建目录上传到linux中,然后在linux中进行构建目录,执行构建即可(docker build -t 镜像名称)

root@ubuntu:/home/lisen/docker+ngnix+vue# docker build -t nginx-vue .

5.4 运行容器

在镜像构建完成后,通过进行运行一个容器即可

root@ubuntu:/# docker run -p 80:80 -d --name nginxvue nginx-vue

容器启动后即可访问:http://192.168.62.133

Nginx使用场景&&Nginx基础&&Nginx的负载均衡策略&&Nginx配置文件&&Nginx+Tomcat集群示例&&Nginx部署静态网站&&根据Tomcat容器实际IP修改Nginx配置,Nginx安装应用专栏,nginx,依赖倒置原则,CSDN开发云,java,开发语言,实施,vim

至此部署完成。文章来源地址https://www.toymoban.com/news/detail-760034.html

到了这里,关于Nginx使用场景&&Nginx基础&&Nginx的负载均衡策略&&Nginx配置文件&&Nginx+Tomcat集群示例&&Nginx部署静态网站&&根据Tomcat容器实际IP修改Nginx配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入浅出 -- 系统架构之负载均衡Nginx大文件传输配置

       在某些业务场景中需要传输一些大文件,但大文件传输时往往都会会出现一些 Bug ,比如文件超出限制、文件传输过程中请求超时等,那么此时就可以在 Nginx 稍微做一些配置,先来了解一些关于大文件传输时可能会用的配置项: 配置项 释义 client_max_body_size 设置请求体允

    2024年04月12日
    浏览(68)
  • mysql集群使用nginx配置负载均衡

    参考链接: https://mu-sl.com//archives/mysql%E9%9B%86%E7%BE%A4%E4%BD%BF%E7%94%A8nginx%E9%85%8D%E7%BD%AE%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1 配置文件nginx_tcp.conf 示例 mysql 集群搭建(双主模式) https://mu-sl.com/archives/mysql%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA%E5%8F%8C%E4%B8%BB%E5%8F%8C%E4%BB%8E%E5%8F%8C%E4%B8%BB%E7%83%AD%E5%A4%87

    2024年02月07日
    浏览(29)
  • 使用nginx进行负载均衡配置详细说明

    nginx应用场景之一就是负载均衡。在访问量较多的时候,可以通过负载均衡,将多个请求分摊到多台服务器上,相当于把一台服务器需要承担的负载量交给多台服务器处理,进而提高系统的吞吐率;另外如果其中某一台服务器挂掉,其他服务器还可以正常提供服务,以此来提

    2024年02月07日
    浏览(38)
  • 【创作赢红包】Nginx四——Nginx实现负载均衡的多种策略

    【Nginx一】——Nginx介绍(正向代理 反向代理 负载均衡 动静分离) 【Nginx二】——Nginx常用命令 配置文件 Nginx如何处理请求 【Nginx三】——Nginx实现反向代理 本篇博客主要介绍Nginx实现负载均衡的多种策略,包括轮询、最少连接、IP哈希、加权轮询、URL哈希。 Nginx可以通过反

    2023年04月09日
    浏览(30)
  • 提升网站性能:Nginx五种高效负载均衡策略

    本文收录于我是沐风晓月的csdn专栏《linux基本功-系统服务实战》, 关于nginx的系列后面会汇总起来,关注我,一起学习与成长。 本专栏写作的过程中,联合了csdn几位大佬,目前正在整理更新目录,力争让大家学到一些真东西,将所学的理论落地,帮助你更快的提升自己。

    2024年02月02日
    浏览(42)
  • 使用Nginx的upstream实现负载均衡,并配置https,避免Post请求类型转发后变为Get

    Nginx支持负载均衡,可以很方便的帮助我们进行水平扩容,upstream就是nginx中的负载均衡模块 当客户端发送请求时,会先到Nginx,然后Nginx会将请求分发到后台不同的服务器上。 如果后台的服务器群中有一个宕机了,那么Nginx会自动忽略这台服务器,不会将请求再次分发到这台

    2024年02月01日
    浏览(41)
  • nginx配置实例-负载均衡

    目录 一、目的:实现效果 二、准备工作 三、实验部署 3.1修改第二台Tomcat服务器的监听端口为8081 3.2修改完成后,重新启动tomcat8081这台服务器。 3.3在浏览器测试 3.4在两台tomcat里面webapps目录中,创建名称是edu的文件夹,在edu文件夹中创建页面,用于测试。 3.5修改nginx配置文件

    2024年04月12日
    浏览(66)
  • Nginx负载均衡配置实例

    介绍: 增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的 情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负 载均衡 客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互

    2024年02月15日
    浏览(40)
  • NGINX配置负载均衡算法

    配置负载均衡服务器涉及到选择负载均衡算法、配置后端服务器、设置健康检查等多个方面。以下是一个简单的负载均衡服务器配置的示例,使用 Nginx 作为负载均衡器: 安装 Nginx: 如果还没有安装 Nginx,请先安装它。在 Ubuntu 上,可以使用以下命令: 配置负载均衡: 编辑

    2024年01月20日
    浏览(35)
  • Nginx配置负载均衡实例

    Nginx配置反向代理实例二 提醒一下:下面实例讲解是在Mac系统演示的; 负载均衡实例实现的效果 浏览器地址栏输入地址http://192.168.0.101/test/a.html,刷新页面进行多次请求,负载均衡效果,平均分配到8080端口服务和8081端口服务 第一步:准备两个Tomcat服务器,一个端口为8080,

    2024年01月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包