建设网站的主要流程图/做网站的软件有哪些
一、概述
本指南对nginx进行了基本介绍,并描述了一些 可以用它完成的简单任务。 据推测,nginx已经安装在阅读器的机器上。 本指南描述了如何启动和停止nginx,并重新加载其 配置,解释结构 的配置文件,并描述了如何设置 nginx 要提供静态内容,如何将nginx配置为代理 服务器,以及如何将其与 FastCGI 应用程序连接。
nginx有一个主进程和几个工作进程。 主进程的主要目的是读取和评估配置, 并维护工作进程。 工作进程对请求进行实际处理。 nginx采用基于事件的模型和依赖于操作系统的机制来有效地 在工作进程之间分发请求
nginx及其模块的工作方式在配置文件中确定。默认情况下,配置文件名为nginx.conf,位于/usr/local/nginx/conf、/etc/nginx或/usr/local/etc/nginx。
二、启动、停止和重新加载配置
要启动nginx,请运行可执行文件。一旦nginx启动,就可以通过使用-s参数调用可执行文件来控制它。使用以下语法:
nginx -s signal
其中信号可能是以下之一:
stop— 快速关机
quit— 优雅关机
reload— 重新加载配置文件
reopen— 重新打开日志文件
例如,通过等待工作进程来停止nginx进程 要完成当前请求的服务,可以执行以下命令:
nginx -s quit
在配置文件中所做的更改 在重新加载配置的命令之前不会应用。 发送到nginx或重新启动。 要重新加载配置,请执行:
nginx -s reload
一旦主进程收到重新加载配置的信号,它将检查新配置文件的语法有效性,并尝试应用其中提供的配置。如果成功,主进程将启动新的工作进程,并向旧的工作进程发送消息,请求它们关闭。否则,主进程回滚更改并继续使用旧配置。旧工作进程收到关闭命令,停止接受新连接,并继续服务当前请求,直到所有此类请求都得到服务。之后,旧工作进程退出。
在Unix工具(如kill实用程序)的帮助下,也可以向nginx进程发送信号。在这种情况下,信号将直接发送给具有给定进程ID的进程。默认情况下,nginx主进程的进程ID将写入目录/usr/local/nginx/logs或/var/run中的nginx.pid。例如,如果主进程ID为1628,要发送导致nginx正常关闭的QUIT信号,请执行:
kill -s QUIT 1628
为了获取所有正在运行的nginx进程的列表,可以使用ps实用程序,例如,如下所示:
ps -ax | grep nginx
三、配置文件的结构
nginx由由配置文件中指定的指令控制的模块组成。指令分为简单指令和块指令。简单指令由名称和参数组成,用空格分隔,并以分号(;)结尾。块指令具有与简单指令相同的结构,但它以一组由大括号({和})包围的附加指令结尾,而不是分号。如果块指令可以在大括号内包含其他指令,则称为上下文(例如:事件、http、服务器和位置)。
配置文件中放置在任何上下文之外的指令都被认为是在主上下文中。events 和http指令位于main context中、server 在 http中, location在 server中。
#符号后的其余行被视为注释。
1、提供静态内容
一个重要的web服务器任务是提供文件(如图像或静态HTML页面)。您将实现一个示例,根据请求,文件将从不同的本地目录提供:/data/www(可能包含HTML文件)和/data/images(包含图像)。这将需要编辑配置文件,并在具有两个位置块的http块内设置服务器块。
首先,创建/data/www目录,并将包含任何文本内容的index.html文件放入其中,然后创建/data/images目录,并在其中放置一些图像。
接下来,打开配置文件。默认配置文件已经包含了服务器块的几个示例,其中大部分已注释掉。现在,注释掉所有这些块并开始新的服务器块:
http {server {}
}
通常,配置文件可以包括多个服务器块,这些服务器块通过它们侦听的端口和服务器名称进行区分。一旦nginx决定了哪个服务器处理请求,它就会根据服务器块中定义的位置指令的参数测试请求头中指定的URI。
将location模块添加到server模块:
location / {root /data/www;
}
此位置块指定与请求的URI相比的“/”前缀。对于匹配的请求,URI将添加到根指令中指定的路径,即/data/www,以形成本地文件系统上所请求文件的路径。如果有几个匹配的位置块,nginx选择前缀最长的位置块。上面的位置块提供长度为1的最短前缀,因此只有当所有其他位置块都无法提供匹配时,才会使用此块。
接下来,添加第二个location块:
location /images/ {root /data;
}
它将匹配以/images/开头的请求(location/也匹配此类请求,但前缀更短)。
服务器块的最终配置应如下所示:
server {location / {root /data/www;}location /images/ {root /data;}
}
这已经是一个服务器的工作配置,该服务器在标准端口80上侦听http://localhost/.响应URI以/images/开头的请求,服务器将从/data/images目录发送文件。例如,响应http://localhost/images/example.png请求nginx将发送/data/images/example.png文件。如果这样的文件不存在,nginx将发送一个响应,指示404错误。URI不以/images/开头的请求将映射到/data/www目录。例如,响应http://localhost/some/example.html请求nginx将发送/data/www/some/example.html文件。
要应用新配置,如果nginx尚未启动,请启动它,或者通过执行以下操作向nginx的主进程发送reload信号:
nginx -s reload
如果某些东西不能按预期工作,您可以尝试在/usr/local/nginx/log或/var/log/nginx目录下的access.log和error.log文件中查找原因。
2、设置简单的代理服务器
nginx的常见用途之一是将其设置为代理服务器,这 表示接收请求并将其传递给代理服务器的服务器, 从它们检索响应,并将其发送到客户端。
我们将配置一个基本的代理服务器,它服务于 包含本地目录中文件的图像,并将所有其他请求发送到 代理服务器。 在此示例中,两个服务器都将在单个 nginx 实例上定义。
首先,通过向nginx的配置文件中添加一个服务器块来定义代理服务器,其中包含以下内容:
server {listen 8080;root /data/up1;location / {}
}
这将是一个简单的服务器,它在端口8080上侦听(以前,由于使用了标准端口80,所以未指定侦听指令),并将所有请求映射到本地文件系统上的/data/up1目录。创建此目录并将index.html文件放入其中。请注意,root指令位于服务器上下文中。当选择用于服务请求的位置块不包括其自己的根指令时,使用这样的根指令。
接下来,使用上一节中的服务器配置,并将其修改为代理服务器配置。在第一个位置块中,将proxy_pass指令与参数中指定的代理服务器的协议、名称和端口放在一起(在我们的例子中,它是http://localhost:8080):
server {location / {proxy_pass http://localhost:8080;}location /images/ {root /data;}
}
我们将修改第二个位置块,该块当前将带有/images/前缀的请求映射到/data/images目录下的文件,以使其与具有典型文件扩展名的图像请求相匹配。修改后的位置块如下所示:
location ~ \.(gif|jpg|png)$ {root /data/images;
}
该参数是一个正则表达式,匹配所有以.gif、.jpg或.png结尾的URI。正则表达式应以~开头。相应的请求将映射到/data/images目录。
当nginx选择一个位置块来服务请求时,它首先检查指定前缀的位置指令,记住前缀最长的位置,然后检查正则表达式。如果与正则表达式匹配,nginx会选择这个位置,否则,它会选择前面记住的位置。
代理服务器的最终配置如下所示:
server {location / {proxy_pass http://localhost:8080/;}location ~ \.(gif|jpg|png)$ {root /data/images;}
}
此服务器将过滤以.gif、.jpg或.png结尾的请求,并将它们映射到/data/images目录(通过向根指令的参数添加URI),并将所有其他请求传递到上面配置的代理服务器。
要应用新的配置,请发送重载信号到nginx,如前几节所述。
还有许多指令可用于进一步配置代理连接。
3、设置快速CGI代理
nginx可用于将请求路由到FastCGI服务器,FastCGI服务器运行使用各种框架和编程语言(如PHP)构建的应用程序。
与FastCGI服务器一起使用的最基本的nginx配置包括使用FastCGI_pass指令而不是proxy_pass指令,以及FastCGI_param指令来设置传递给FastCGI服务器的参数。假设FastCGI服务器可以在localhost:9000上访问。以上一节中的代理配置为基础,将proxy_pass指令替换为fastcgi_pass指令,并将参数更改为localhost:9000。在PHP中,SCRIPT_FILENAME参数用于确定脚本名称,QUERY_STRING参数用于传递请求参数。结果配置为:
server {location / {fastcgi_pass localhost:9000;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param QUERY_STRING $query_string;}location ~ \.(gif|jpg|png)$ {root /data/images;}
}
这将设置一个服务器,该服务器将通过FastCGI协议将所有请求(静态图像请求除外)路由到在localhost:9000上运行的代理服务器。
四、负载平衡配置
1、负载平衡方法
中支持以下负载平衡机制(或方法) nginx:
轮询 — 分发对应用程序服务器的请求 以循环赛的方式,
最少连接 — 下一个请求分配给服务器,其中 最少的活动连接数,
ip-hash — 哈希函数用于确定哪个服务器应该 为下一个请求选择(基于客户端的 IP 地址)。
2、默认负载平衡配置
使用 nginx 进行负载平衡的最简单配置可能看起来 如下所示:
http {upstream myapp1 {server srv1.example.com;server srv2.example.com;server srv3.example.com;}server {listen 80;location / {proxy_pass http://myapp1;}}
}
在上面的示例中,同一应用程序有 3 个实例 在 SRV1-SRV3 上运行。 如果未专门配置负载平衡方法, 它默认为轮循机制。 所有请求都代理到服务器组 myapp1,nginx 应用 HTTP 负载 平衡以分发请求。
nginx中的反向代理实现包括HTTP的负载平衡, HTTPS,FastCGI,uwsgi,SCGI,memcached和gRPC。
要为 HTTPS 而不是 HTTP 配置负载平衡,只需使用“https” 作为协议。
为 FastCGI、uwsgi、SCGI、memcached 或 gRPC 设置负载平衡时,请分别使用 fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass 和 grpc_pass 指令。
3、最少连接的负载平衡
另一个负载均衡规则是连接最少的。 最少连接允许控制应用程序的负载 在某些请求的情况下更公平地实例 需要更长的时间才能完成。
使用最少连接的负载平衡,nginx将尝试不使 繁忙的应用程序服务器具有过多的请求,分发新的 请求改为对不太繁忙的服务器的请求。
nginx 中的最少连接负载平衡在将 least_conn 指令用作服务器组配置的一部分时被激活:
upstream myapp1 {least_conn;server srv1.example.com;server srv2.example.com;server srv3.example.com;}
4、会话持久性
请注意,使用循环或最少连接的负载 平衡,每个后续客户端的请求可能是潜在的 分发到其他服务器。 不能保证同一客户端将始终是 定向到同一服务器。
如果需要将客户端绑定到特定的应用程序服务器 — 换句话说,使客户端的会话“粘性”或“持久化” 始终尝试选择特定服务器的术语 — IP 哈希负载 可以使用平衡机制。
使用 ip 哈希,客户端的 IP 地址用作哈希密钥 确定应为服务器组中的哪个服务器选择 客户的要求。 此方法可确保来自同一客户端的请求 将始终定向到同一服务器 除非此服务器不可用。
要配置 IP 哈希负载平衡,只需将 ip_hash 指令添加到服务器(上游)组配置:
upstream myapp1 {ip_hash;server srv1.example.com;server srv2.example.com;server srv3.example.com;
}
5、加权负载平衡
甚至可能影响nginx负载均衡算法 此外,通过使用服务器权重。
在上面的示例中,未配置服务器权重,这意味着 所有指定的服务器都被视为同样有资格用于 特定的负载平衡方法。
特别是循环赛,这也意味着或多或少相等 跨服务器分发请求 — 前提是有足够的请求 请求,以及何时以统一的方式处理请求,并且 完成得足够快。
为服务器指定权重参数时,权重将作为一部分 的负载平衡决策。
upstream myapp1 {server srv1.example.com weight=3;server srv2.example.com;server srv3.example.com;}
用此配置,每 5 个新请求将分布在 应用程序实例如下:将定向 3 个请求 对于 SRV1,一个请求将转到 SRV2,另一个请求将转到 SRV3。
同样可以使用连接最少和 最新版本的 nginx 中的 IP 哈希负载平衡。
6、健康检查
nginx中的反向代理实现包括带内(或无源) 服务器运行状况检查。 如果来自特定服务器的响应失败并显示错误, nginx会将此服务器标记为失败,并尝试 暂时避免为后续入站请求选择此服务器。
max_fails 指令将连续失败的尝试次数设置为 与fail_timeout期间应发生的服务器通信。 默认情况下,max_fails设置为 1。 设置为 0 时,将禁用此服务器的运行状况检查。 fail_timeout 参数还定义服务器标记为失败的时间长度。 服务器故障后的fail_timeout间隔后,nginx将开始正常 使用实时客户端的请求探测服务器。 如果探测成功,服务器将标记为活动服务器。
相关文章:

nginx配置详解(容器、负载)—官方原版
一、概述本指南对nginx进行了基本介绍,并描述了一些 可以用它完成的简单任务。 据推测,nginx已经安装在阅读器的机器上。 本指南描述了如何启动和停止nginx,并重新加载其 配置,解释结构 的配置文件,并描述了如何设置 n…...

2023年中职网络安全竞赛——CMS网站渗透解析
需求环境可私信博主 解析如下: CMS网站渗透 任务环境说明: 服务器场景:Server2206(关闭链接) 服务器场景操作系统:未知 1.使用渗透机对服务器信息收集,并将服务器中网站服务端口号作为flag提交; Flag:8089...

SQL 窗口函数详解
SQL窗口函数详解 窗口函数的主要作用是对数据进行分组排序、求和、求平均值、计数等。 一、窗口函数的基本语法 <分析函数> OVER ([PARTITION BY <列清单>] ORDER BY <排序用列清单> [ROWS BETWEEN 开始位置 AND 结束位置])理解窗口函数的基本语法ÿ…...

Android 12系统源码_SystemUI(六)显示和隐藏最近任务
前言 Android12对最近任务做了调整,将原本处于SystemUI模块的最近任务转移到了Launcher3QuickStep应用中。 本篇文章我们会结合源码一起来梳理一下最近任务的显示流程。 一、SystemUI模块显示最近任务的相关代码 1、在SystemUI模块调用CommandQueue的showRecentA…...

Docekr三剑客之 Docekr compose
写在前面 Docker三剑客Docker Compose、Docker Machine、Docker Swarm分别是Docker官方开源的三个项目。有着不同的功能: Docker Compose负责实现对 Docker 容器集群的快速编排Docker Machine负责在多种平台上快速安装 Docker 环境Docker Swarm提供 Docker 容器集…...

企业是否具备等保测评资质在哪里查?怎么查?
为了规范等保相关业务办理流程,确保等保业务顺利办理,保障企业合法权益,政策规定,只有取得等保测评资质机构方可办理等保测评业务。因此很多人在问,企业是否具备等保测评资质在哪里查?怎么查? …...

Spacedesk软件推荐,让你的平板也变成电脑的副屏
我的设备: 电脑:戴尔G15 5511、i7-11800H、Windows 11、RTX3060 平板:荣耀V6、麒麟985、安卓10、分辨率2000*1200(手机也行,我用的平板) 实际使用: 先给放一张实际使用的照片 可以让平板变成电脑的副屏…...

Vue 3.0 组合式API 介绍 【Vue3 从零开始】
提示 在阅读文档之前,你应该已经熟悉了这两个 Vue 基础和创建组件。 在 Vue Mastery 上观看关于组合式 API 的免费视频。 通过创建 Vue 组件,我们可以将接口的可重复部分及其功能提取到可重用的代码段中。仅此一项就可以使我们的应用程序在可维护性和…...

【算法数据结构体系篇class13、14】:贪心算法思想
一、贪心算法概念贪心算法概念:1)最自然智慧的算法2)用一种局部最功利的标准,总是做出在当前看来是最好的选择3)难点在于证明局部最功利的标准可以得到全局最优解4)对于贪心算法的学习主要以增加阅历和经验…...

C++知识点,关键字inline ,String,强制类型转化
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练 🔥座右铭:“不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错…...

MyBatis源码分析(六)MetaObject工具类的使用与源码分析
文章目录一、MetaObject基本使用二、关键类源码分析1、MetaObject的构造方法2、PropertyTokenizer分词器3、BeanWrapper4、MetaClass5、DefaultReflectorFactory6、Reflector7、总结三、MetaObject的getValue源码分析写在后面一、MetaObject基本使用 public class User {priva…...

文献资源最多的文献下载神器,99.99%的文献都可下载
用对工具事半功倍,查找下载文献用对工具能节约大量的时间和精力去做更多的事情。 文献党下载器(wxdown.org),几乎整合了所有文献数据库资源,涵盖各种文献类型,包含全部学科。文献党下载器整合的资源如&…...

工控机ARM工业边缘计算机搭建Node-Red环境
搭建Node-Red环境Node-RED是一个基于Node.js的开源可视化流程编程环境,可以轻松构建自定义应用程序,通过连接简单的节点来完成复杂的任务。Node-RED提供了一种简单的方法,可以快速连接到外部服务,从而实现物联网应用的开发。Node-…...

位图/布隆过滤器/海量数据处理方式
位图 位图的概念 所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。 直接来看问题: 给40亿个不重复的无符号整数,没排过序。给一个无符号整数࿰…...

Tomcat 配置文件数据库密码加密
几年前研究过Tomcat context.xml 中数据库密码改为密文的内容,因为当时在客户云桌面代码没有留备份也没有文章记录,最近项目又提出了这个需求就又重新拾起来学习一下。在网上找了一些资料,自己也大概试了一下,目前功能是实现了。参…...

k8s-Kubernetes集群部署
文章目录前言一、Kubernetes简介与架构1.Kubernetes简介2.kubernetes设计架构二、Kubernetes集群部署1.集群环境初始化2.所有节点安装kubeadm3.拉取集群所需镜像3.集群初始化4.安装flannel网络插件5.扩容节点6.设置kubectl命令补齐前言 一、Kubernetes简介与架构 1.Kubernetes…...

Python数据分析案例19——上市银行财务指标对比
我代码栏目都是针对基础的python数据分析人群,比如想写个本科毕业论文,课程论文,做个简单的案例分析等。过去写的案例可能使用了过多的机器学习和深度学习方法,文科的同学看不懂,可能他们仅仅只想用python做个回归或者…...

Python 中错误 ConnectionError: Max retries exceeded with url
出现错误“ConnectionError: Max retries exceeded with url”有多种原因: 向 request.get() 方法传递了不正确或不完整的 URL。我们正受到 API 的速率限制。requests 无法验证您向其发出请求的网站的 SSL 证书。 确保我们指定了正确且完整的 URL 和路径。 # ⛔️…...

SpringBoot下的Spring框架学习(Tedu)——DAY02
SpringBoot下的Spring框架学习(Tedu)——DAY02 目录SpringBoot下的Spring框架学习(Tedu)——DAY02Spring框架学习1.1 Spring介绍1.2 知识铺垫1.2.1 编辑Dog类1.2.2 编辑Cat类1.2.3 编辑测试类User.java1.2.4 上述代码的总结1.3 面…...

容易混淆的点:C语言中char* a[] 与 char a[] 的区别以及各自的用法
char* a[] 和 char a[] 的区别 char* a[] 和 char a[] 是 C 语言中数组的不同声明方式,二者具有以下区别: char a[] 声明的是一个字符数组,其中存储的是一串字符。此时,a 可以被视为一个指向字符的指针。 char* a[]则声明了一个…...

认识Spring(下)
作者:~小明学编程 文章专栏:Spring框架 格言:热爱编程的,终将被编程所厚爱。 目录 Spring更加高效的读取和存储对象 存储bean对象 五大注解 关于五大类注解 对象的注入 属性注入 构造方法注入 Setter注入 三种注入方式的…...

Educational Codeforces Round 144 (Rated for Div. 2) C - Maximum Set
传送门 题意: 对于一个集合,如果它的任意两个元素都能 有 其中一个能整除另一个,那么它是好的。问在区间[L,R] 中由这个区间某些数内构成的好的集合的最长长度是多少,以及且满足这个长度的好集合有多少个。(懒得想就借…...

学python的第四天---基础(2)
一、三角形类型读入数组并排序的方法nlist(map(float,input().split())) c,b,asorted(n)list_1 list(map(float, input().split())) list_1.sort() list_1.reverse()lengthssorted(map(float,input().split(" ")),reverseTrue)二、动物写法一:d{" &…...

spring之refresh流程-Java八股面试(六)
系列文章目录 第一章 ArrayList-Java八股面试(一) 第二章 HashMap-Java八股面试(二) 第三章 单例模式-Java八股面试(三) 第四章 线程池和Volatile关键字-Java八股面试(四) 第五章ConcurrentHashMap-Java八股面试(五) 动态每日更新算法题,想要学习的可以关注一下…...

【C语言】刷题|链表|双指针|指针|多指针|数据结构
主页:114514的代码大冒 qq:2188956112(欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ ) Gitee:庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 文章目录 目录 文章目录 前言 一、移除链表元素 二、反转链表 三,链表的中间结点 四&…...

糖化学类854262-01-4,Propargyl α-D-Mannopyranoside,炔丙基 α-D-吡喃甘露糖苷
外观以及性质:Propargyl α-D-Mannopyranoside一般为白色粉末状,糖化学类产品比较多,一般包括:葡萄糖衍生物、葡萄糖醛酸衍生物,氨基甘露糖衍生物、半乳糖衍生物、氨基半乳糖衍生物、核糖衍生物、阿拉伯糖衍生物、唾液…...

项目管理工具DHTMLX 在 G2 排名中再创新高
DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术&am…...

28 位委员出席,龙蜥社区第 15 次运营委员会会议顺利召开
2 月 24 日,龙蜥社区在海光召开了第 15 次运营委员会会议,本次会议由统信软件运营委员会委员崔开主持。来自 Arm、阿里云、飞腾、红旗软件、海光、Intel、龙芯、联通软研院、浪潮信息、普华基础软件、统信软件、万里红、移动、中科方德等理事单位的 28 位…...

自然语言处理-基于预训练模型的方法-chapter3基础工具集与常用数据集
文章目录3.1NLTK工具集3.1.1常用语料库和词典资源3.1.2常见自然语言处理工具集3.2LTP工具集3.3pytorch基础3.3.1张量基本概念3.3.2张量基本运算3.3.3自动微分3.3.4调整张量形状3.3.5广播机制3.3.6索引与切片3.3.7降维与升维3.4大规模预训练模型3.1NLTK工具集 3.1.1常用语料库和…...

【SpringMVC】@RequestMapping
RequestMapping注解 1、RequestMapping注解的功能 从注解名称上我们可以看到,RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。 SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处…...