Nginx实战(安装部署、常用命令、反向代理、负载均衡、动静分离)

news2024/11/15 8:21:54

文章目录

  • 1. nginx安装部署
    • 1.1 windows安装包
    • 1.2 linux-源码编译
    • 1.3 linux-docker安装
  • 2. nginx介绍
    • 2.1 简介
    • 2.2 常用命令
    • 2.3 nginx运行原理
      • 2.3.1 mater和worker
      • 2.3.3 Nginx 的工作原理
    • 2.4 nginx的基本配置文件
      • 2.4.1 location指令说明
  • 3. nginx案例
    • 3.1 nginx-反向代理案例01
    • 3.2 nginx-反向代理案例02
    • 3.3 nginx-负载均衡
    • 3.4 nginx-动静分离

1. nginx安装部署

1.1 windows安装包

下载到本地E:\nginx-1.24.0,直接解压,启动即可

参考: https://blog.csdn.net/weixin_44251179/article/details/129700793

./nginx 启动
./nginx -s stop 快速停止
./nginx -s quit 优雅关闭,在退出前完成已经接受的连接请求
./nginx -s reload 重新加载配置

在这里插入图片描述

1.2 linux-源码编译

参考: https://www.yuque.com/wexiao/nginx/aprmou#oVdwh

1、下载源码包.tar.gz放到linux操作系统 … 目录下,使用tar -zxvf解压缩

2、安装Nginx需要C语言编译器等环境

 	安装 gcc		 yum install -y gcc
 	安装perl库	 	yum install -y pcre pcre-devel  
 	安装zlib库 	yum install -y zlib zlib-devel  

3、编译执行

./configure --prefix=/usr/local/nginx
make
make install

4、查看 /usr/local目录,确定安装成功

在这里插入图片描述

5、启动Nginx

cd /usr/local/nginx/sbin  
./nginx

默认监听80端口,如果被占用,要么该端口,要么杀对应进程

1.3 linux-docker安装

1、下载镜像
	docker pull nginx
2、启动容器
	docker run -d --name=mynginx --restart=always -p 80:80 nginx
3、停止容器
	docker stop 容器名称或容器id
# 查看nginx安装位置
	which nginx   	/usr/sbin/nginx
# 查找nginx配置文件的位置
	nginx -t 		nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# 从 / 根目录下查找文件名为 nginx.conf 的文件
	find / -name nginx.conf

2. nginx介绍

2.1 简介

Nginx是高性能的HTTP和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

  • 正向代理
    如果把局域网外的 Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。简单一点:通过代理服务器来访问服务器的过程 就叫 正向代理。需要在客户端配置代理服务器进行指定网站访问
  • 反向代理
    反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

2.2 常用命令

./nginx				启动 nginx
./nginx -s stop 	快速停止
./nginx -s quit 	优雅关闭,在退出前完成已经接受的连接请求
./nginx -s reload	重新加载 nginx(在目录:/usr/local/nginx/sbin 下执行命令,不需要重启服务器,自动编译)
which nginx   		查看nginx安装位置(/usr/sbin/nginx)
nginx -t 			查找nginx配置文件的位置(nginx: the configuration file /etc/nginx/nginx.conf syntax is ok)

2.3 nginx运行原理

image-20220429201217315

2.3.1 mater和worker

nginx 启动后,是由两个进程组成的。master(管理者)和worker(工作者)。一个nginx 只有一个master。但可以有多个worker

在这里插入图片描述

Nginx 采用事件驱动架构,其主要组件包括:

Master 进程(Master Process):负责管理 Worker 进程,接受来自管理员的信号,并处理配置文件的加载和重新加载。
Worker 进程(Worker Processes):实际处理客户端请求的进程。Nginx 通常有多个 Worker 进程,每个进程都能够独立地处理连接和请求。这种多进程的设计使得 Nginx 能够充分利用多核处理器和多线程的优势。
配置文件(Configuration Files):Nginx 使用简洁而灵活的配置文件来定义服务器的行为。配置文件通常包括全局配置、HTTP 模块配置、Server 配置以及 Location 配置。

img

2.3.3 Nginx 的工作原理

当客户端发送请求到 Nginx 服务器时,Nginx 的工作过程可以分为以下几个步骤:

接受连接(Accept Connections):Master 进程负责监听端口并接受客户端的连接请求。
选择 Worker 进程(Choose Worker Processes):Master 进程会将新连接分配给空闲的 Worker 进程,或者根据一定的负载均衡策略分配连接。
处理请求(Process Request):Worker 进程接收到连接后,会从连接读取请求并将其传递给相应的处理模块。根据配置,Nginx 可以处理静态文件、代理请 求、负载均衡以及其他各种任务。
生成响应(Generate Response):处理模块根据请求生成相应的响应,并将其发送回客户端。
关闭连接(Close Connection):一旦请求完成,连接可以保持活动状态以便复用,或者被关闭以释放资源。

2.4 nginx的基本配置文件

/usr/local/nginx/conf/nginx.conf

nginx 配置文件有三部分组成
第一部分:全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如上面第一行配置的:worker_processes 1;

第二部分:events块

​ events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024,这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

第三部分:http块

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

需要注意的是:http 块也可以包括 http全局块、server 块。

#允许进程数量,建议设置为cpu核心数或者auto自动检测,注意Windows服务器上虽然可以启动多个processes,但是实际只会用其中一个
worker_processes  1; 

events {
    #单个进程最大连接数(最大连接数=连接数*进程数)
    #根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。
    worker_connections  1024;
}

http {
    #文件扩展名与文件类型映射表(是conf目录下的一个文件)
    include       mime.types;
    #默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输
    default_type  application/octet-stream;
    #sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。
    sendfile        on; 
     #长连接超时时间,单位是秒
    keepalive_timeout  65;

    server {					#虚拟主机的配置
        listen       80;		#监听端口
        server_name  localhost; #域名,可以有多个,用空格隔开
        location / {			#配置根目录以及默认页面
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;  #出错页面配置
        location = /50x.html {   #/50x.html文件所在位置
            root   html;
        }
    }
}

2.4.1 location指令说明

该指令用于匹配 URL,lcation 是有顺序的,会根据不同请求配置的优先级来匹配的location 处理。

语法如下:
location [=|~|~*|^~|@] pattern{……}

    =    # 表示精确匹配,优先级也是最高的【精确匹配】 
    ^~   # 表示uri以某个常规字符串开头,只匹配普通字符串,不匹配正则表达式 【前缀匹配】
    ~    # 表示区分大小写的正则匹配  【正则表达式匹配】
    ~*   # 表示不区分大小写的正则匹配 【正则表达式匹配】
    !~   # 表示区分大小写不匹配的正则 【正则表达式匹配取反】
    !~*  # 表示不区分大小写不匹配的正则【正则表达式匹配取反】
    /    # 通用匹配,任何请求都会匹配到
    @    # 内部服务跳转
	注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~*标识。
	
匹配优先级:
	1、匹配优先级为:从上(=)至下(@)优先级依次递减,也就是说“=”的优先级最高,“@”优先级最低。
	2、多个location配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按正则匹配,最后是交给 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
	
	
案例1:
location = /abc/ { # 内容要同表达式完全一致才匹配成功
  .....
}
# http://abc.com/abc 		[匹配成功]
# http://abc.com/abc/index 	[匹配失败]

案例2:
location ~ /Abc/ { # 执行正则匹配,区分大小写
  .....
}
# http://abc.com/Abc/ 	[匹配成功]
# http://abc.com/abc/ 	[匹配失败]

案例3:
location ~* /Abc/ {	# 执行正则匹配,忽略大小写
  .....
}
# http://abc.com/Abc/ [匹配成功]
# http://abc.com/abc/ [匹配成功]

案例4:
location ^~ /index/ { # 以 /index/ 开头的请求,都会匹配上
  .....
}
# http://abc.com/index/index.page   [匹配成功]
# http://abc.com/error/error.page 	[匹配失败]

案例5:
location /index/ {	# 不加任何规则时,默认是大小写敏感,前缀匹配,相当于加了“~”与“^~”
  ......
}
# http://abc.com/index  			[匹配成功]
# http://abc.com/index/index.page   [匹配成功]
# http://abc.com/test/index  		[匹配失败]
# http://abc.com/Index  			[匹配失败]

案例6:
location /index/ {	# “@”,nginx内部跳转
  error_page 404 @index_error;
}
location @index_error {
  .....
}
# 以 /index/ 开头的请求,如果链接的状态为 404。则会匹配到 @index_error 这条规则上。

3. nginx案例

3.1 nginx-反向代理案例01

实现效果:在本地打开浏览器,在浏览器地址栏输入地址 www.zp.com,跳转到 liunx 系统 tomcat 主页面

在这里插入图片描述

1、服务器安装tomcat

docker search tomcat
docker pull tomcat
docker run --name mytomcat -d -p 18080:8080 tomcat # 对外提供18080端口

外网访问404:原因是查tomcat目录下的webapps文件夹下为空,但是多了个webapps.dist,解决办法详见:https://blog.csdn.net/mo_sss/article/details/131878812

保证外网直接可访问:

在这里插入图片描述

2、windows 系统的 host 文件进行域名和 ip 对应关系的配置

在这里插入图片描述

3、在 nginx 进行请求转发的配置(反向代理配置)

在这里插入图片描述

4、最终效果

在这里插入图片描述

3.2 nginx-反向代理案例02

实现效果:服务器统一对外提供接口8001,通过nginx 反向代理实现根据访问的路径跳转到不同端口的tomcat服务
访问 http://172.21.231.207:8001/edu/ 直接跳转到 127.0.0.1:18080的访问页
访问 http://172.21.231.207:8001/vod/ 直接跳转到 127.0.0.1:28080的访问页

1、部署2个tomcat服务,指定2个不同的端口18080、28080,并准备好测试a.html,放到不同tomcat服务的目录下,分别是 18080的/webapp/vod、 28080的/webapp/edu,达到外网可以访问的效果。
在这里插入图片描述

2、修改nginx的配置文件

在这里插入图片描述

3、最终效果
在这里插入图片描述

3.3 nginx-负载均衡

实现效果: 浏览器地址栏输入地址 http://172.21.231.207:8001/vod/a.html,实现负载均衡效果,平均18080 和 28080 端口中

1、准备条件:2台tomcat部署不同端口的服务,分别18080、28080端口,在webapps都建立/vod/a.html文件,外网可正常访问

在这里插入图片描述

2、修改nginx配置文件,进行负载均衡的配置,对外统一提供接口8001

在这里插入图片描述

3、效果

在这里插入图片描述

4、nginx 分配服务器策略

a. 轮询(默认)
upstream myserver {
        server 172.21.231.207:18080; 
        server 172.21.231.207:28080 down;
    }
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

b. weight
weight 代表权重, 默认为 1,权重越高被分配的客户端越多
upstream myserver {
        server 172.21.231.207:18080 weight=10;  
        server 172.21.231.207:28080 weight=10;
    }

c. ip_hash
ip_hash 每个请求按访问 iphash 结果分配,这样每个访客固定访问一个后端服务器
upstream myserver {
		ip_hash;
        server 172.21.231.207:18080 weight=10; 
        server 172.21.231.207:28080 weight=10;
    }
    
d. fair(第三方)
fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
 upstream myserver {					
        server 208.208.128.122:8081 ;   
        server 208.208.128.122:8082 ;
        fair; 													
    }

3.4 nginx-动静分离

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种:

1、一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;

2、另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。

在这里插入图片描述

1、准备工作:在Linux 系统中准备 静态资源,用于进行访问。

在这里插入图片描述

2、nginx配置:

在这里插入图片描述

3、效果:访问静态资源

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1701171.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

紧固件松动的危害及原因——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 紧固件松动,这一看似微小的机械问题,实际上可能引发一系列严重的后果。在机械设备中,紧固件扮演着至关重要的角色,它们通过紧固作用将各个部件紧密连接在一起,…

招聘视角,看数据产品经理求职面试技巧

近几年负责数据产品团队,经历团队人员的变迁,进行过几百简历的筛选,近百场社招、校招面试。金三银四的求职/招聘季接近尾声,想把自己招聘数据产品经理的过程进行总结,分享给想找数据产品经理工作的求职者。 一、数据产…

【C语言】数据指针地址的取值、赋值、自增操作避坑

【C语言】数据指针的取值、赋值、自增操作避坑 文章目录 指针地址指针自增指针取值、赋值附录:压缩字符串、大小端格式转换压缩字符串浮点数压缩Packed-ASCII字符串 大小端转换什么是大端和小端数据传输中的大小端总结大小端转换函数 指针地址 请看下列代码&#…

css3实现0.5px边框

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css3实现0.5px边框</title><s…

HotSpot虚拟机的几个实现细节

文章目录 STW安全点安全区域记忆集与卡表读写屏障 STW 收集器在根节点枚举这步都是必须要暂停用户线程的&#xff08; STW &#xff09;&#xff0c;如果不这样的话在根节点枚举的过程中由于引用关系在不断变化&#xff0c;分析的结果就不准确 安全点 收集器在工作的时候某些…

如何设置XHSC(华大)单片机的IO口中断

XHSC(华大)单片机IO口中断使用 一、代码说明 华大单片机的历程在华大或者小华的官网上都可以下载到,但是我们下载的历程基本注释都是非常简单,有的还没有注释;再加上小华跟华大的历程在代码架构上有所区别,所以新手在直接调用华大或者小华历程后,历程代码的可读性并不…

解析气膜场馆造价—轻空间

随着社会的发展和对环保及时间成本的重视&#xff0c;气膜场馆逐渐成为众多体育场馆的首选建筑模式。气膜建筑包括气膜篮球场、气膜室内足球场、气膜羽毛球场、气膜乒乓球馆、气膜网球场以及气膜滑冰场等&#xff0c;因其多项优势受到广泛应用。 气膜场馆的显著特点 1. 气膜场馆…

不可错过的数据存储指南:JVS物联网平台存储策略详解

在物联网时代&#xff0c;数据的采集、存储和分析成为了关键环节。随着设备点位不断生成大量数据&#xff0c;如何高效地管理和保存这些数据&#xff0c;同时考虑存储成本和后续的数据分析价值&#xff0c;成为了亟待解决的问题。JVS物联网平台提供了灵活多样的存储策略&#x…

安泰电子:使用高压放大器时有哪些需要注意的呢

随着科技的不断进步&#xff0c;高压放大器在各种科学实验、工程应用和产业生产中扮演着重要的角色。然而&#xff0c;由于高压放大器的特殊性&#xff0c;使用时需要特别小心和谨慎。下面将详细介绍使用高压放大器时需要注意的事项&#xff0c;以确保安全、稳定地进行实验和应…

搭载昇腾310NPU的Orange Pi AIpro开箱体验以及深度学习样例测试

Orange Pi AIpro开箱体验以及样例测试 随着人工智能和物联网技术的快速发展&#xff0c;单板计算机&#xff08;Single Board Computer, SBC&#xff09;在创客和开发者社区中越来越受到欢迎。我最近入手了一款高性能的单板计算机——Orange Pi AIpro。 在入手此款AI开发板之…

【BI 可视化插件】怎么做? 手把手教你实现

背景 对于现在的用户来说&#xff0c;插件已经成为一个熟悉的概念。无论是在使用软件、 IDE 还是浏览器时&#xff0c;插件都是为了在原有产品基础上提供更多更便利的操作。在 BI 领域&#xff0c;图表的丰富性和对接各种场景的自定义是最吸引人的特点。虽然市面上现有的 BI 软…

如何理解 Java 类和对象

Java 中的类和对象是学习 Java 编程的基础之一。类是 Java 中的核心概念之一&#xff0c;它提供了一种组织和封装数据以及相关行为的方式。对象是类的实例&#xff0c;它是在运行时创建的&#xff0c;具有特定的状态和行为。 类和对象的概念 1. 类&#xff08;Class&#xff…

Micro SD封装是什么?

我们了解客户对于Micro SD封装的疑问。在这篇文章中&#xff0c;我们将详细解释Micro SD封装是什么&#xff0c;以及其在存储领域的技术原理和应用情况&#xff0c;帮助客户更好地理解这一技术。 1. Micro SD封装的定义 Micro SD封装是指一种特定尺寸的存储芯片封装方式&#x…

汇凯金业:纸黄金和实物黄金的价格有什么区别

纸黄金和实物黄金的价格主要受到全球黄金市场行情的影响&#xff0c;二者的基础价格并无太大差异&#xff0c;但在具体交易时&#xff0c;可能会存在一些价格上的区别&#xff0c;这些差异主要来自以下几个方面&#xff1a; 交易费用与管理费&#xff1a;纸黄金交易通常需要支…

操作系统实战(四)(linux+C语言)

目录 实验目的 前提知识 实验题目 题目分析 实验程序 头文件 头文件实现 核心代码文件 &#xff08;各类进程&#xff09; 生产者 抽烟者A 抽烟者B 抽烟者C makefile文件 实验运行 运行结果分析 总结 实验目的 加深对并发协作进程同步与互斥概念的理解&…

学浪视频怎么下载保存到本地

你是否曾经因为想要保存一份珍贵的学浪视频却苦于无法下载而感到烦恼&#xff1f;现在&#xff0c;我将向你揭示一个简单易行的方法&#xff0c;让你轻松地将学浪视频保存到本地&#xff0c;随时随地享受学习的乐趣。你是否曾经因为想要保存一份珍贵的学浪视频却苦于无法下载而…

大模型的发展方向:让大模型感知人类所处的物理世界,文字、听、看、闻、触摸、动手操作等信息接收和输出能力,向物理世界学习 大模型开发者方向

大模型的发展方向非常广泛&#xff0c;除了让大模型感知人类所处的物理世界&#xff0c;通过文字、听觉、视觉、嗅觉、触觉和动手操作等信息接收能力&#xff0c;还包括以下几个重要的方向&#xff1a; 多模态学习与融合&#xff1a; 多模态感知&#xff1a;整合来自不同感知渠…

【Linux】TCP的三次握手和四次挥手

三次握手 在TCP/IP协议中&#xff0c;TCP协议提供可靠的连接服务&#xff0c;采用三次握手建立一个连接。注意&#xff01;三次握手只是用来建立连接用的&#xff0c;和TCP可靠稳定没有关系&#xff0c;TCP的可靠是通过重传和检错等机制实现的。 默认创建一个socket后&#xff…

瑜伽馆约课会员管理系统小程序的作用是什么

瑜伽馆有着众多学员&#xff0c;如瘦身、改变气质、减脂塑形等往往属于长期多次跟随教练学习&#xff0c;或是自己在家里学习等&#xff0c;对商家来说&#xff0c;品牌宣传、吸引客户到店以及长期经营、提高自身服务效率是重中之重。 客户多次进店享受服务的同时还需要悦己&a…

深入理解SVM和浅层机器学习算法的训练机制

深入理解SVM和浅层机器学习算法的训练机制支持向量机&#xff08;SVM&#xff09;的训练过程SVM的基本概念SVM的损失函数训练方法 浅层机器学习算法的训练机制决策树K-最近邻&#xff08;K-NN&#xff09;朴素贝叶斯 结论 深入理解SVM和浅层机器学习算法的训练机制 在探讨浅层…