首页 > 系统相关 >Nginx 学习笔记

Nginx 学习笔记

时间:2023-06-17 17:11:44浏览次数:38  
标签:... http nginx 笔记 server 学习 Nginx 服务器

概述

Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强

1. 正向代理

如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,需要通过代理服务器来访问,这种访问就称为正向代理

2. 反向代理

客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址

3. 负载均衡

增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器

4. 动静分离

简单来说就是把动态请求跟静态请求分开,不能单纯地理解为动态页面和静态页面分类。一般使用 Nginx 处理静态页面,Tomcat 处理动态页面

动静分离有两种实现:

  • 把静态文件独立成单独的域名,放在独立的服务器
  • 静态文件和动态文件混在一起发布,通过 nginx 分开

Nginx 操作命令

# 必须先进入 nginx 目录
cd /usr/local/nginx/sbin
# 查看 nginx 版本号
./nginx -v
# 启动 nginx
./nginx -s start
# 关闭 nginx
./nginx -s stop
# 重新加载 nginx(修改了配置文件)
./nginx -s reload

Nginx 配置文件

Linux 下 Nginx 配置文件路径一般如下:

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

组成部分:

# 全局块
...

# events 块
events {
	...
}

# http 块
http {
	# http 全局块
	...
	
	# server 块
	server {
		# 全局 server 块
		...
		
		# location 块
		location /uri-string {
			...
		}
	}
	
	...
}
  • 全局块:从配置文件到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等
  • events 块:主要影响 Nginx 服务器与用户之间的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等
  • http 块:配置最频繁的部分,代理、缓存和日志定义等绝大多数和第三方模块配置都在这里,http 块也包括 http 全局块和 server 块
    • http 全局块:配置指令包括文件引入、MINE-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等
    • server 块:和虚拟主机密切相关,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块
      • 全局 server 块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置
      • location 块:一个 server 块可以配置多个 location 块,这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如前面的 /uri-string)进行匹配,对特定的请求进行处理、地址定向、数据缓存和应答控制等功能,还有许多第三方模块也在这里配置

Nginx 配置实例

1. 反向代理

启动 Tomcat 并开发对外端口,配置 nginx.conf

server {
	...
	server_name [IP地址]
	...
	location / {
		...
		proxy_pass http://127.0.0.1:8080
		...
	}
}

启动两个 Tomcat 并分发不同的对外端口,根据访问路径跳转到不同端口的服务

server {
	listen 9001     # 监听端口
	server_name [IP地址]
	location ~/edu/ {   # 正则表达式写法,匹配符合条件的路径
		...
		proxy_pass http://127.0.0.1:8080
		...
	}
	location ~/vod/ {   # 正则表达式写法,匹配符合条件的路径
		...
		proxy_pass http://127.0.0.1:8081
		...
	}
}

2. 负载均衡

启动两个 Tomcat 并分发不同的对外端口,配置 nginx.conf

http {
	...
	upstream myserver {
		# ip_hash
		# fair
		server 192.168.17.219:8080  # 第一个ip:port
		# server 192.168.17.219:8080 weight=1   # 分配权重
		server 192.168.17.219:8081  # 第二个ip:port
	}
	...
	server {
		listen 80     # 监听端口
		server_name 192.168.17.219  # IP地址
		location / {
			...
			 proxy_pass http://myserver
			 ...
        }
	}
}

分配方式:

  • 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,能自动剔除宕机的服务器
  • weight:代表权重,默认为 1,权重越高被分配的客户端越多
  • ip_hash:每个请求按照 ip 的 hash 结果分配,这样每个 ip 固定访问一个后端服务器,可以解决 session 问题
  • fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配

3. 分配方式

配置 nginx.conf

server {
	listen 80     # 监听端口
	server_name 192.168.17.219  # IP地址
	location /www/ {    # 正则表达式
		...
		root /data/;    # 静态资源路径
		index index.htm index.html
		...
	}
	location /image/ {
		root /data/;
		autoindex on    # 返回文件目录内容
	}
}

Nginx 原理解析

1. master-workers

每个 worker 都是独立的进程,不需要加锁,不会影响其他 worker。每个 worker 都可以把 cpu 的性能发挥到极致,因此 worker 数量最好与 cpu 数相同

可以热部署,正在工作的 worker 完成工作后再加载,其他 worker 立即重新加载

2. 连接数 worker-connection

一个请求占用 worker 两个(一去一回)或四个连接数(需要访问 Tomcat)。每个 worker 支持最大的连接数是 1024,支持的最大并发数是 4*1024/2 或者 4*1024/4

标签:...,http,nginx,笔记,server,学习,Nginx,服务器
From: https://www.cnblogs.com/Yee-Q/p/17487736.html

相关文章

  • 思科笔记:OSPF的七类LSA
    LSA类型1:RouterLSA每一个运行OSPF的路由器都会产生1类LSA这里包含宣告进OSPF的本地直连网段的信息通过IP前缀和链路类型来标识链路通过始发路由器ID来标识LSA只在本区域泛洪;无法穿越ABRLinkID是通告该LSA的路由器RIDLSA类型2.NetworkLSA只产生在广播网络和NBMA网络......
  • Java官方笔记11包
    PackagesDefinition:Apackageisagroupingofrelatedtypesprovidingaccessprotectionandnamespacemanagement.Notethattypesreferstoclasses,interfaces,enumerations,andannotationtypes.Enumerationsandannotationtypesarespecialkindsof......
  • es-analysis模块学习总结
    什么是Analysis顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。在ES中,Analysis是通过分词器(Analyzer)来实现的,可使用ES内置的分析器或者按需定制化分析器。举一个分词简单的例子:比如你输入MasteringElasticsearch,会自动帮你分成两个单词,一个是......
  • SpringBoot学习笔记
    新建SpringBoot项目阿里云地址:https://start.aliyun.com异常消息处理//1.自定义异常类,继承RuntimeExceptionpublicclassMyExceptionextendsRuntimeException{publicMyException(){}}//2.定义全局异常类@RestControllerAdvicepublicclassGloabExcept......
  • Python3网络爬虫开发实战阅读笔记
    基本库的使用网络请求库urllib(HTTP/1.1)Python自带请求库,繁琐基础使用:略requests(HTTP/1.1)Python常用第三方请求库,便捷基础使用:略httpx(HTTP/2.0)Python第三方库,支持HTTP/2.0,支持异步请求,支持Python的async请求模式pipinstall'httpx[http2]'基础使用:与requests相似,默认......
  • protobuf学习
    下载Protobuf下载地址:https://github.com/protocolbuffers/protobuf/releasesPython安装Protobuf在python中使用protobuf,还需要安装python对应的protobuf包(否则会报错:Nomodulenamedgoofgle):pipinstallprotobuf==3.12.0proto文件语法messagePerson{ requiredstringn......
  • Django学习笔记
    1.常用命令创建项目:django-adminstartproject项目名创建APP(进入工程目录):pythonmanage.pystartapp网站名创建库表(进入工程目录):pythonmanage.pymakemigrations执行库表建立(进入工程目录):pythonmanage.pymigrate启动运动:pythonmanage.pyrunserver模板渲染嵌入......
  • 使用tcpdump+wirkshark分析nginx反向代理无法访问问题
    问题描述在使用nginx配置多路径反向代理后端prometheus应用的时候由于prometheus本身是自动跳转到/graph才能正常访问,而使用nginx反向代理如果只是配置简单的http_proxy到后端prometheus的端口会报404错误,以下是具体的配置和报错:location/prometheus{proxy_p......
  • 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器
    专栏简介本专栏将带领您进入Docker的世界。您是否对Docker有所耳闻?那么,您是否知道使用Docker可以带来什么样的好处呢?如果您还不了解Docker,不用担心,让我们一起探索这个神奇的世界吧!DockerDocker最初是dotCloud公司内部项目,由SolomonHykes在法国创立。它基于dotCloud公司多年......
  • 使用Docker将Vite Vue项目部署到Nginx二级目录
    Vue项目配置使用Vite创建一个Vue项目,点我查看如何创建配置打包路径在Nginx中如果是二级目录,例如/web时,需要设置线上的打包路径在项目跟路径下创建两个文件:.env.production、.env.development,写入一下内容:##生产环境NODE_ENV='production'VITE_BASE_PATH=/form-design......