web群集--rocky9.2源码部署nginx1.24的详细过程

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Nginx 是一款由 Igor Sysoev 开发的开源高性能 HTTP 服务器和反向代理服务器,自 2004 年发布以来,以其高效、稳定和灵活的特点迅速成为许多网站和应用的首选。本文详细介绍了 Nginx 的核心概念、工作原理及常见使用场景,涵盖高并发处理、反向代理、负载均衡、低内存占用等特点,并提供了安装配置教程,适合开发者参考学习。

@[TOC]

···
前言
在现代互联网架构中,Nginx 已经成为了许多网站和应用程序的首选服务器。无论是作为一个 Web 服务器、反向代理服务器、邮件代理服务器,还是负载均衡器,Nginx 都展现了其高效、稳定和灵活的特性。本文将详细介绍 Nginx 的核心概念、工作原理以及常见的使用场景,希望能为那些对 Nginx 感兴趣的开发者提供一个全面的参考。

一、什么是 Nginx?

Nginx(读作“Engine-X”)是由俄罗斯开发者 Igor Sysoev 在2004年首次发布的开源高性能 HTTP 服务器和反向代理服务器。Nginx 的设计目标是处理高并发连接的场景,同时保持较低的内存使用。由于其卓越的性能和稳定性,Nginx 很快成为了 Apache 的主要竞争对手。

Nginx 的主要特点包括:

高并发连接处理能力: Nginx 采用事件驱动(event-driven)的架构,这使得它能够高效地处理大量的并发连接,尤其在处理静态内容时表现出色。

反向代理和负载均衡: Nginx 能够充当反向代理服务器,将客户端的请求转发到后端服务器,同时支持多种负载均衡算法,例如轮询(Round Robin)、最少连接(Least Connections)等。

低内存占用: 与传统的进程或线程模型不同,Nginx 使用单线程处理多个请求的方式,大大降低了内存消耗。

模块化设计: Nginx 的核心功能可以通过模块扩展,这使得它能够适应多种使用场景。

简单配置: Nginx 的配置文件采用模块化的语法结构,清晰且易于管理。

二、Nginx 的架构和工作原理

Nginx 的架构设计与传统的 Web 服务器不同,它采用了异步非阻塞的事件驱动模型,这使得它能够同时处理成千上万的连接,而不会像其他基于进程或线程的服务器那样由于过多的上下文切换而导致性能下降。

1. 核心架构

Nginx 的核心架构主要包括以下几个组件:

主进程(Master Process): 负责加载配置文件并管理工作进程。主进程不处理实际的请求,而是负责分发信号给工作进程,处理日志等。

工作进程(Worker Processes): 实际处理客户端的请求。Nginx 的事件驱动模型使得每个工作进程可以高效地处理多个客户端请求。

事件驱动机制: Nginx 通过 epoll(Linux 下的高效 I/O 多路复用机制)来监控多个套接字,确保在任何套接字准备好读或写时,立即进行相应的操作。这种非阻塞的机制使得 Nginx 在处理大量并发连接时依然能够保持高性能。

2. 请求处理流程

Nginx 处理请求的过程可以分为以下几个步骤:

接收请求: 客户端发起请求,Nginx 主进程接收请求并将其分发给工作进程处理。

反向代理: 如果 Nginx 配置为反向代理服务器,它会将请求转发到后端的应用服务器,并在收到应用服务器的响应后,将其返回给客户端。

静态内容处理: 对于静态文件,如 HTML、CSS、JavaScript 和图片等,Nginx 可以直接从磁盘读取并返回给客户端,而无需经过应用服务器。

响应客户端: Nginx 将生成的响应通过网络返回给客户端,并关闭连接或保持连接以处理后续的请求。

三、Nginx 的常见使用场景

Nginx 的灵活性使得它能够在多种场景中使用。以下是一些常见的 Nginx 使用场景:

1. 作为 HTTP 服务器
Nginx 最常见的用途之一是作为静态内容的 HTTP 服务器。由于其高效的处理能力和低资源消耗,Nginx 在提供静态文件(如 HTML 页面、图片、视频等)时表现非常出色。很多大型网站,如 GitHub、WordPress、Netflix 等,都使用 Nginx 来处理静态内容的传输。

2. 反向代理服务器
Nginx 也经常被用作反向代理服务器,它能够将客户端的请求转发到一个或多个后端服务器,并根据配置的负载均衡算法选择合适的服务器来处理请求。这种架构能够提高网站的可扩展性和可靠性。

3. 负载均衡器
Nginx 支持多种负载均衡算法,可以在多个后端服务器之间分发请求,减轻单个服务器的负载压力,提高整体系统的可用性。此外,Nginx 还可以监控后端服务器的健康状态,自动将请求从不可用的服务器转移到可用的服务器上。

4. SSL/TLS 终结器
Nginx 可以处理 SSL/TLS 加密连接,充当 SSL/TLS 终结器。这意味着它能够在客户端与服务器之间建立加密连接,同时将解密后的请求转发到后端服务器。这样可以减轻后端服务器的负载,并简化 SSL 证书的管理。

5. 动态内容缓存
Nginx 还可以用作缓存服务器,将动态生成的内容缓存一段时间,减少后端服务器的负载,并加快用户的访问速度。这在需要高性能的应用场景中非常有用。

四、nginx源码包的获取

nginx官方下载地址
链接: nginx下载地址
进去后会看到如下页面
image.png

选择合适的版本直接点击下载即可
这里使用1.24版本的nginx
image.png

之后拖到xshell面板内即可
如果拖拽显示0000000

yum -y install lrzsz

五、安装过程

在这里插入图片描述

先安装依赖

yum -y install gcc gcc-c++ pcre-devel zlib-devel openssl-devel

解包

tar xf nginx-1.24.0.tar.gz

编译

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre --with-stream  --with-stream_ssl_module

解释

./configure: 这是用于配置 Nginx 源代码编译选项的脚本。在编译 Nginx 之前,你需要运行这个脚本来选择要包含的模块、安装位置以及其他设置。

--prefix=/usr/local/nginx: 指定 Nginx 的安装目录。此选项将 Nginx 安装在 /usr/local/nginx 目录下。默认情况下,Nginx 安装在 /usr/local/nginx,但你可以使用此选项更改安装位置。

--user=nginx: 指定运行 Nginx 进程的用户。在这个例子中,Nginx 将以 nginx 用户身份运行。这个选项有助于提高安全性,防止 Nginx 进程以 root 用户的身份运行。

--group=nginx: 指定 Nginx 进程所属的用户组。在这个例子中,Nginx 进程将属于 nginx 组。这也有助于提高安全性。

--with-http_ssl_module: 启用 HTTP SSL 模块。这个模块允许 Nginx 使用 HTTPS(通过 SSL/TLS 协议)来加密 HTTP 流量,从而确保客户端和服务器之间的通信安全。

--with-http_v2_module: 启用 HTTP/2 模块。HTTP/2 是 HTTP 协议的最新版本,支持更高效的多路复用、压缩和优先级排序,显著提高了网络性能。

--with-http_realip_module: 启用 HTTP Real IP 模块。这个模块用于更正客户端 IP 地址,特别是在 Nginx 处于反向代理模式下时。它能够将请求的原始客户端 IP 地址从 HTTP 头中提取出来(例如 X-Forwarded-For),而不是使用代理服务器的 IP 地址。

--with-http_gzip_static_module: 启用 HTTP Gzip Static 模块。这个模块用于在发送响应前压缩静态文件,从而减少带宽使用和提高传输速度。该模块可以预压缩文件,然后直接提供压缩后的版本给客户端。

--with-http_stub_status_module: 启用 HTTP Stub Status 模块。这个模块提供了 Nginx 的状态信息,例如当前活动连接数、请求数等,有助于监控 Nginx 的运行状况和性能。

--with-pcre: 启用 PCRE(Perl Compatible Regular Expressions)库的支持。PCRE 用于正则表达式匹配操作,例如在 Nginx 配置中使用 location 块进行路径匹配时需要用到正则表达式。

--with-stream: 启用 TCP/UDP 流处理模块。该模块允许 Nginx 处理 TCP 和 UDP 流量,通常用于反向代理或负载均衡 TCP 和 UDP 流量,例如数据库连接、邮件服务器或其他基于 TCP/UDP 的服务。

--with-stream_ssl_module: 启用 Stream SSL 模块。这个模块允许 Nginx 对 TCP/UDP 流量进行 SSL/TLS 加密处理,通常与 --with-stream 一起使用,以确保在流量传输时提供安全加密。

安装

make && make install

添加环境变量(在root目录下)
vim ~/.bash_profile

export PATH=$PATH:/usr/local/nginx/sbin

加载

source ~/.bash_profile

为什么要做这个配置?
方便我们使用nginx命令
比如说配置之前我们启用nginx

/usr/local/nginx/sbin/nginx

现在

nginx

可以做到简化命令

编辑配置文件
vim /usr/local/nginx/conf/nginx.conf
在这里插入图片描述

添加用户

useradd -s /sbin/nologin -M nginx

六、添加成为系统服务

vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

加载

systemctl daemon-reload

这样我们就可以使用systemd命令了
比如

启动nginx

systemctl start nginx

重启nginx

systemctl restart nginx

关闭nginx

systemctl stop nginx
相关文章
|
15天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
16天前
|
前端开发 JavaScript
构建你的第一个Web应用:从零到部署
【8月更文挑战第33天】 在这篇文章中,我们将一起踏上构建一个基本Web应用的旅程。不同于传统的“安装这个、运行那个”教程,我们的目标是通过理解每一步的意义和目的来深化你的技术理解。我们将探索HTML、CSS、JavaScript的基础,并学习如何将它们结合起来创建一个简单的个人网站。接着,我们会介绍如何使用GitHub Pages进行免费部署,让你的应用上线。准备好了吗?让我们开始吧!
|
18天前
|
Java UED 自然语言处理
Struts 2 国际化竟有如此神奇魔力?快来揭开多语言支持的 Web 应用神秘面纱
【8月更文挑战第31天】在全球化背景下,Web应用需适应多种语言环境。Struts 2凭借其强大的国际化(i18n)支持,简化了多语言应用开发。通过不同语言的资源文件,它能自动匹配用户语言偏好,优化用户体验并扩展用户群。下面是一个示例:创建`messages.properties`(英语)与`messages_zh_CN.properties`(中文),并在Struts 2的Action类及JSP页面中调用`getText()`方法及Struts标签展示相应语言内容。此外,在struts.xml中指定资源文件,以确保框架正确加载对应语言包。通过这些步骤,开发者可以轻松实现应用的多语言支持。
40 0
|
18天前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
27 0
|
11月前
|
网络协议 应用服务中间件 nginx
使用Dockerfile编写源码安装Nginx镜像
使用Dockerfile编写源码安装Nginx镜像
185 0
|
tengine 安全 应用服务中间件
源码安装----Tengine(nginx的进阶版)
源码安装----Tengine(nginx的进阶版)
316 1
|
应用服务中间件 Linux nginx
linux篇-linux下源码安装nginx
linux篇-linux下源码安装nginx
119 0
linux篇-linux下源码安装nginx
|
关系型数据库 MySQL 应用服务中间件
Centos 下源码安装配置Nginx +PHP + fastcgi+mysql+MemCached
编译工具包是少不了的先搞起吧 yum -y install gcc gcc-c++ libxml2 libxml2-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel  zlib zlib-devel glibc glibc-devel glib2 glib2-devel .
1347 0
|
存储 应用服务中间件 测试技术
源码安装NGINX
安装过程比较简单,就是下载源码包,下载依赖包,打包编译安装就完事了。
120 0
|
关系型数据库 MySQL 应用服务中间件