Nginx知识汇总

news2024/11/15 14:03:31

一、Nginx的简介

nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。

二、Nginx的优点

  1. 跨平台、配置简单;
  2. 采用单线程来异步非阻塞处理请求、避免多线程CPU 的上下文切换带来的损耗;
  3. 内存消耗小,支持高并发连接;
  4. 成本低廉,且开源;
  5. 稳定性高,宕机的概率非常小;

三、Nginx的安装

  1. 使用docker拉取nginx镜像;
docker pull nginx
  1. 查看拉取的nginx镜像信息
docker images nginx
  1. 创建nginx的配置文件的挂载目录,通过docker启动的nginx容器,nginx的配置文件是存在容器中的/etc/nginx目录下,如果想要修改nginx的配置文件的话就需要先进入到容器内,再找到其目录下的配置文件进行修改。如果是修改比较频繁的话,每次都要进入容器内进行修改还是挺麻烦的,现在在容器启动前在主机上创建nginx配置文件挂载的目录,后面启动的时候直接将容器内的配置文件挂载到主机上,后续修好nginx的配置文件就直接在挂载到主机的目录下修改就好。
# 创建挂载目录
mkdir -p /usr/local/src/nginx/conf
mkdir -p /usr/local/src/nginx/log
mkdir -p /usr/local/src/nginx/html
  1. 创建并启动nginx容器,将容器中的相应文件copy到刚创建的挂载目录中,复制完成再停止并删除该容器
// 启动容器
docker run --name myNginx -d -p 80:80  nginx:latest

# 将容器nginx.conf文件复制到宿主机
docker cp 008aee5bc129:/etc/nginx/nginx.conf /usr/local/src/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp 008aee5bc129:/etc/nginx/conf.d /usr/local/src/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp 008aee5bc129:/usr/share/nginx/html /usr/local/src/nginx

// 停止容器
docker stop 008aee5bc129
// 删除容器
docker rm 008aee5bc129
注:008aee5bc129为容器id
  1. 重新启动容器并设置挂载目录
docker run \
-p 80:80 \
--name myNginx \
-v /usr/local/src/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/src/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/src/nginx/log:/var/log/nginx \
-v /usr/local/src/nginx/html:/usr/share/nginx/html \
-d nginx:latest

四、Nginx配置文件(nginx.conf)

默认在Linux上安装的Nginx,配置文件在安装的nginx目录下的conf目录下,名字叫做nginx.conf。ginx.conf主要由三部分组成:全局块、events块、http块。

----------------------- 全局块 ------------------------------
					  # 全局配置
# user nobody nobody;
worker_processes 2;
# error_log logs/error.log
# error_log logs/error.log notice
# error_log logs/error.log info
# pid logs/nginx.pid
worker_rlimit_nofile 1024;
-------------------------------------------------------------
************************events块*****************************
				   # nginx工作模式配置
events {                           
 	worker_connections 1024;
    multi_accept on;
    use epoll;
}
*************************************************************
==========================http块=============================
						# http设置
http {                                
    # http全局块
    ....
 
    # server块
    server {         
    	# server全局块               
        ....
        
        # location块
        location {                   
            ....
        }
 
	    # location块
        location path {
            ....
        }
 
	    # location块
        location otherpath {
            ....
        }
    }
    
    # server块
    server {
        ....
 
        location {
            ....
        }
    }
 
    # upstream块
    upstream name {                   
        ....
    }
}
===============================================================
  1. 全局块:用于进行nginx全局信息的配置,常用配置项有如下:
    (1)user:用来指定nginx worker进程运行用户以及用户组,默认nobody账号运行;
    (2)worker_processes:指定nginx要开启的子进程数量,运行过程中监控每个进程消耗内存(一般几M~几十M不等)根据实际情况进行调整,通常数量是CPU内核数量的整数倍;
    (3)error_log:定义错误日志文件的位置及输出级别【debug / info / notice / warn / error / crit】;
    (4)pid:用来指定进程id的存储文件的位置;
    (5)worker_rlimit_nofile:用于指定一个进程可以打开最多文件数量的描述;
  2. events块:用于nginx工作模式的配置,常用配置项有如下:
    (1)worker_connections:指定最大可以同时接收的连接数量,这里一定要注意,最大连接数量是和worker processes共同决定的;
    (2)multi_accept:配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接;
    (3)use epoll:配置指定了线程轮询的方法,如果是linux2.6+,使用epoll,如果是BSD如Mac请使用Kqueue;‘’
  3. http块:包括http全局块,以及多个server块。作为web服务器,http模块是nginx最核心的一个模块,配置项也是比较多的,项目中会设置到很多的实际业务场景,需要根据硬件信息进行适当的配置,常规情况下,使用默认配置即可。
    3.1、http全局块:http 全局块配置的指令包括文件引入、 MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
    3.2、server块:用来定义一个虚拟访问主机,也就是一个虚拟服务器的配置信息。每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块。
    3.2.1、全局 server 块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
    3.2.2、location 块:一个 server 块可以配置多个 location 块,主要作用是根据请求地址路径的匹配,匹配成功进行特定的处理。在路由访问信息配置中关联到反向代理、负载均衡等等各项功能。
    在这里插入图片描述
# 优先级1,精确匹配,根路径
location =/ {
    proxy_pass http://192.168.80.102:8080;
}
 
# 优先级2,以某个字符串开头,以test开头的,优先匹配这里,区分大小写
# http://test.com/test/test1.html
location ^~ /test{
   root /data/; # 匹配成功,实际访问路径为:/data/test/test1.html
   index index.php index.html;
}
 
# 优先级3,区分大小写的正则匹配,匹配/image*****路径
# http://test.com/image/image1.html
location ~ /image{
    alias /data/static/;  # 匹配成功,实际访问路径为:/data/static/image1.html
    index index.php index.html;
}
 
# 优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
location ~* .*\.(jpg|gif|png|js|css)$ {
   root  /data/image/;
   index index.php index.html;
}
 
# 优先7,通用匹配
location / {
    return 403;
}

location:后面跟的是请求地址路径匹配规则;
proxy_pass:设置反向代理的路径,匹配成功后跳转到该指定的路径;
root:用于指定访问虚拟主机的目录,实际访问文件路径会拼接URL中的路径;
alias:用于指定访问虚拟主机的目录,实际访问文件路径不会拼接URL中的路径;
index:在不指定访问具体资源时,默认展示的资源文件列表;

3.2.3、upstream块:主要负责负载均衡的配置,通过默认的轮询调度方式来分发请求到后端服务器。

upstream name {
ip_hash;
server 192.168.1.100:8000;
server 192.168.1.100:8001 down;
server 192.168.1.100:8002 max_fails=3;
server 192.168.1.100:8003 fail_timeout=20s;
server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
}
ip_hash:指定的负载均衡调度算法是ip_hash;
server host:port:分发服务器的列表配置;
-- down:表示该主机暂停服务;
-- max_fails:表示失败最大次数,超过失败最大次数暂停服务;
-- fail_timeout:表示如果请求受理失败,暂停指定的时间之后重新发起请求

五、正向代理与反向代理

  1. 正向代理:代理的是客户端,需要在客户端配置代理服务器,再将要访问的真实的服务器地址交给代理服务器,由代理服务器去请求这个真实的服务器的地址,拿到对应的数据后再返回给客户端。
    在这里插入图片描述
  2. 反向代理:代理的是服务器端,客户端不需要任何配置,客户端只需要将请求发送给反向代理服务器即可,代理服务器将请求分发给真实的服务器,获取数据后将数据转发给客户端。隐藏了真实服务器,有点像网关。
    在这里插入图片描述

六、负载均衡

主要运用在分布式场景,客户端的所有请求都将会先到nginx上,再由nginx根据相应的规则,将这些请求按时间顺序逐一分配到不同的后端服务器上处理。nginx负载均衡的实现规则有以下5种:

  1. 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。
upstream myserver { 
 	server 192.168.1.11:8081; 
 	server 192.168.1.12:8082; 
} 
  1. weight权重:默认为 1,权重越高被分配的客户端越多。
upstream myserver { 
 	server 192.168.1.11:8081 weight=2; 
 	server 192.168.1.12:8082 weight=8; 
} 
  1. ip_hash( IP绑定):每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。
upstream myserver { 
 	ip_hash; 
 	server 192.168.1.11:8081; 
 	server 192.168.1.12:8082; 
} 
  1. fair(第三方插件):必须安装upstream_fair模块,对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。
upstream myserver { 
	server 192.168.80.102:8081;
	server 192.168.80.102:8082;
    fair;
} 
  1. url_hash(第三方插件):必须安装Nginx的hash软件包,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。
upstream myserver { 
	server 192.168.80.102:8081;
	server 192.168.80.102:8082;
    hash $request_uri; 
 	hash_method crc32; 
} 

七、动静分离

将静态资源 css、html、js等和动态资源(jsp servlet)进行分开部署,我们可以将静态资源直接部署在专门的服务器上,也可以直接放在反向代理服务器上(Nginx)所在在的服务器上,动态资源还是部署在真实的服务器上。然后请求来的时候,静态资源从专门的静态资源服务器获取,动态资源还是转发到后端服务器上。可以提高用户访问静态资源的响应速度,降低对后台服务的访问频率。
在这里插入图片描述

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

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

相关文章

基于微信小程序的沁园健身房预约管理系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Mave…

[附源码]Python计算机毕业设计 楼盘销售管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【Linux】第十二章 多线程(线程概念+线程控制)

🏆个人主页:企鹅不叫的博客 ​ 🌈专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接:代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

UNet - 训练数据train

目录 1. train 训练数据 2. Loss 值 3. 完整代码 1. train 训练数据 训练的代码只是在之前图像分类的基础上做了一些更改,具体的可以看下面的文章 pytorch 搭建 LeNet 网络对 CIFAR-10 图片分类https://blog.csdn.net/qq_44886601/article/details/127498256 …

EventBridge 生态实践:融合 SLS 构建一体化日志服务

作者: 昶风 引言 阿里云日志服务 SLS 是一款优秀的日志服务产品,提供一站式地数据采集、加工、查询与分析、可视化、告警、消费与投递等服务。对于使用 SLS 的用户业务而言,SLS 上存储的日志信息反映着业务的运行状态,通过适当地…

2021年认证杯SPSSPRO杯数学建模D题(第一阶段)停车的策略全过程文档及程序

2021年认证杯SPSSPRO杯数学建模 D题 停车的策略 原题再现: 开车前往人流集中的目的地时,决定在何处停车经常是一个难题。是停在距离目的地较远的地方,因为那里的空余车位可能较多,然后再走很远的路?或者是否应该乐观…

【C语言】程序的翻译环境和执行环境

🚩write in front🚩 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5&#xff5…

智慧博物馆解决方案-最新全套文件

智慧博物馆解决方案-最新全套文件一、建设背景二、思路架构三、解决方案建成5个方面1、集约化2、物联网接入3、大数据可视化分析4、室内室外地图集成5、可视化信息多元交互四、获取 - 智慧博物馆全套最新解决方案合集一、建设背景 博物馆是征集、典藏、陈列和研究代表自然和人…

【FME实战教程】002:FME完美实现CAD数据转shp案例教程(以三调土地利用现状数据为例)

FME完美实现CAD数据转shp案例教程(以三调土地利用数据为例) 文章目录1. cad数据预览2. 转换过程3. shp数据预览1. cad数据预览 2. 转换过程 (1)打开FME Desktop2020中文软件,点击【新建】。 (2&#xff09…

【Spring】——2、使用@ComponentScan自动扫描组件并指定扫描规则

📫作者简介:zhz小白 公众号:小白的Java进阶之路 专业技能: 1、Java基础,并精通多线程的开发,熟悉JVM原理 2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线…

微信小程序开发(九):使用扩展组件库

前端开发中离不开各种组件库,我最先接触的组件库还是Bootstrap,后来工作中又陆续使用了inoic、ng-zorro等各种不同的库。 在微信小程序开发中也有多种组件库,这里记录其中几种不同组件库的使用方法。 WeUI 这是微信官方推出的一款和微信原…

使用Python,Open3D对点云散点投影到面上并可视化,使用3种方法计算面的法向量及与平均法向量的夹角

使用Python,Open3D对点云散点投影到面上并可视化,使用3种方法计算面的法向量及与平均法向量的夹角 写这篇博客源于博友的提问,他坚定了我继续坚持学习的心,带给了我充实与快乐。 将介绍以下5部分: 随机生成点云点投影…

LaTeX学习笔记

LaTeX学习笔记 文章目录LaTeX学习笔记1. 开始的尝试2.文档类与宏包3.标题与章节4.标注5.列表6.对齐7.插入代码块8.绘制表格9.插入图片10.数学公式10.1.基础公式10.2.复杂公式10.3 常用符号11.参考文献冲鸭!!! 1. 开始的尝试 先开始试一下一个…

MySQL数据库索引和事务详解

目录 前言: 索引 查看索引 创建索引 删除索引 索引使用 底层数据结构分析 事务 事务引出 MySQL设计事务 事务四大特性 小结: 前言: 数据库索引和事务的存在,对于数据库的一些性能有了显著提升。我们需掌握其底层的实现…

NUMA那些事儿

NUMA——Non Uniform Memory Access,中文为非统一内存访问,在NUMA出现之前,内存的控制器是包含在北桥芯片中的,所有内存由北桥统一管理,因此可以保证访问内存的一致性。随着CPU架构的不断迭代和演进,核数越…

Elasticsearch与Kibana安装

现有环境 windows docker ubuntu Elasticsearch安装 安装包下载 ES不同平台、版本下载路径:Download Elasticsearch | Elastic 本文演示用linux # 启动ubuntu环境,开放端口9200、9300、5601 docker run -name es -p 9200:9200 -p 9300:9300 -p 5…

指夹式血氧饱和检测仪方案分析

指夹式心率血氧饱和度方案的测量原理是根据血红蛋白(Hb)和氧合血红蛋白 (HbO2)在红光和近红光区域的吸收光谱特性为依据,运用Lambert Beer定律建立数据处理经验公式,采用光电血氧检测技术结合光电容积脉搏波描记(PPG)技术&#xf…

化工制造行业数字化升级案例—基于HK-Domo商业智能分析工具

案例背景导读 世伟洛克(Swagelok)是全球领先的流体系统解决方案的开发商和制造商,为包括科研、仪表、制药、油气、电力、石化、代用燃料和半导体等在内的各个行业提供产品、组装和服务。世伟洛克通过独立的销售和服务中心网站进行运营&#x…

使用 Typescript 封装 Axios

对 axios 二次封装,更加的可配置化、扩展性更加强大灵活 通过 class 类实现,class 具备更强封装性(封装、继承、多态),通过实例化类传入自定义的配置 创建 class 严格要求实例化时传入的配置,拥有更好的代码提示 /*** param {AxiosInstance…

C语言习题练习8--二进制操作符

IO型--从main函数开始写,要写输入、计算、输出 接口型--不需要写主函数,默认主函数是存在的,你只需要完成函数就行 一、二进制中1的个数 (12条消息) C语言丨关键字signed和unsigned 的使用与区别详解_Emily-C的博客-CSDN博客_signed unsi…