Nginx 安装配置

Nginx 安装配置Nginx engineX 由 IgorSysoev 于 2002 年开发 分为社区版和商业版 nginxplus

大家好,欢迎来到IT知识分享网。

1.1 Nginx 概述
1.1.1 Nginx 介绍

Nginx(engine X)由Igor Sysoev于2002年开发,分为社区版和商业版(nginx plus)。2019年3月11日,F5 Networks以6.7亿美元的价格收购了Nginx。Nginx是一款免费的、开源的、高性能HTTP和反向代理服务器,同时支持邮件代理服务器以及TCP/UDP代理服务器。它被设计用于解决C10K问题(10,000个并发连接),并且广泛应用于高流量网站中。

Nginx 官网:http://nginx.org

Nginx的其他二次发行版包括:

  • Tengine:由淘宝网发起的Web服务器项目,基于Nginx进行优化,添加了许多高级功能和特性,特别适合高访问量的网站。Tengine已经在大型网站如淘宝网、天猫商城中得到了充分检验。官网:http://tengine.taobao.org/
  • OpenResty:由章亦春团队开发的基于Nginx与Lua语言的高性能Web平台,官网:http://openresty.org/cn/
1.1.2 Nginx 功能介绍
  • 静态资源服务器:如html、图片、js、css、txt等。
  • 反向代理:支持HTTP/HTTPS协议。
  • 动态资源请求反向代理:结合FastCGI/uWSGI/SCGI等协议。
  • TCP/UDP协议转发:支持tcp/udp协议的请求转发。
  • 邮件代理:支持IMAP4/POP3协议的反向代理。
1.1.3 Nginx 基础特性
  • 模块化设计:具备良好的扩展性。
  • 高可靠性:支持热部署,不停机更新配置文件、升级版本和更换日志文件。
  • 低内存消耗:在10,000个keep-alive连接下,仅需2.5MB内存。
  • 事件驱动:支持AIO、mmap、sendfile等机制。
1.2 Nginx 架构和进程
1.2.1 Nginx 进程结构

Nginx采用多进程架构,由一个Master主进程和多个Worker工作进程组成。

  • 主进程(Master Process):负责接收外部操作信号,转发给Worker进程,并监控Worker进程的运行状态。它还负责读取Nginx配置文件,建立、绑定和关闭socket连接,管理和生成工作进程,并实现不中断服务的平滑升级和重启。
  • 工作进程(Worker Process):负责处理所有网络请求。每个Worker进程都是独立且平等的,通常设置为CPU核心数,以充分利用资源并减少上下文切换的损耗。Worker进程处理客户请求,将其送入各个功能模块,执行I/O调用,与后端服务器通信,并响应客户请求。
1.2.2 Nginx 进程间通信

Nginx的主进程与工作进程之间通过管道通信。主进程生成工作进程,并在启动时为每个进程建立单向管道,用于发送指令。Worker进程之间也可以通过共享内存或管道通信,但由于它们是隔离的,因此需要通过主进程来实现状态信息的共享。

1.2.3 Nginx 启动和 HTTP 连接建立

Nginx启动时,Master进程加载配置文件并初始化监听的socket。然后,Master进程通过fork出多个Worker进程,Worker进程之间竞争新的连接,成功的Worker进程通过三次握手建立Socket连接并处理请求。

1.3 Nginx 模块介绍

Nginx支持多种模块,模块化设计使其功能可以灵活扩展。

  • 核心模块:提供Nginx的基本运行功能,如错误日志记录、配置文件解析、事件驱动机制和进程管理。
  • 标准HTTP模块:处理HTTP协议的解析和管理。
  • 可选HTTP模块:扩展HTTP功能,如多媒体传输、GeoIP请求解析、网络传输压缩和SSL支持。
  • 邮件服务模块:支持POP3、IMAP和SMTP协议的邮件服务。
  • Stream服务模块:用于TCP协议代理的实现。
  • 第三方模块:用于扩展Nginx功能,如Json支持和Lua支持。
1.4 Nginx 安装
1.4.1 Nginx 版本和安装方式

Nginx主要有三个版本:

  • Mainline version:主要开发版本,一般为奇数版本号,如1.19。
  • Stable version:最新的稳定版本,一般为偶数版本号,如1.20。
  • Legacy versions:旧的稳定版本,如1.18。

Nginx可以通过yum或源码编译安装,推荐使用源码编译方式安装。虽然yum安装较为方便,但版本通常较旧,而源码编译可以更灵活地自定义安装路径和功能,以满足特定业务需求。


Nginx 编译安装

1. 安装所需依赖包
dnf install gcc pcre-devel zlib-devel openssl-devel -y 

首先,通过 dnf 包管理器安装 Nginx 编译所需的依赖库。这些依赖包括 gcc 编译器、pcre-devel(Perl Compatible Regular Expressions 开发库)、zlib-devel(压缩库开发文件)和 openssl-devel(OpenSSL 开发文件)。

2. 创建目录并解压 Nginx 源码包
mkdir /nginx 

创建一个名为 /nginx 的目录,用于存放 Nginx 源码包。将 nginx-1.24.0.tar.gz 文件放置在该目录中,并执行解压命令:

tar zxf nginx-1.24.0.tar.gz 
3. 创建 Nginx 运行用户
useradd -s /sbin/nologin -M nginx 

通过 useradd 命令创建一个名为 nginx 的系统用户。该用户将用于运行 Nginx,并且不允许登录系统(-s /sbin/nologin)且不创建家目录(-M)。

4. 进入 Nginx 源码目录
cd nginx-1.24.0/ 

进入解压后的 nginx-1.24.0 目录,准备进行配置和编译。

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

使用 ./configure 脚本配置 Nginx 安装路径和功能模块:

  • --prefix=/usr/local/nginx:指定 Nginx 安装路径。
  • --user=nginx--group=nginx:指定 Nginx 运行的用户和用户组。
  • --with-http_ssl_module:启用 HTTPS 支持。
  • --with-http_v2_module:启用 HTTP/2 支持。
  • --with-http_realip_module:启用 IP 透传功能。
  • --with-http_stub_status_module:启用状态监控页面。
  • --with-http_gzip_static_module:启用静态文件 Gzip 压缩支持。
  • --with-pcre:启用正则表达式支持。
  • --with-stream:启用 TCP 反向代理支持。
  • --with-stream_ssl_module:启用 TCP SSL 加密支持。
  • --with-stream_realip_module:启用 TCP 透传 IP 功能。
6. 编译并安装 Nginx
make && make install 

使用 make 命令编译源码并安装 Nginx 到指定的目录。

在这里插入图片描述

验证版本及编译参数

1. 配置环境变量
vim ~/.bash_profile 

编辑 ~/.bash_profile 文件,添加 Nginx 二进制文件的路径到系统环境变量中:

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

保存并退出后,执行以下命令使配置生效:

source ~/.bash_profile 
2. 验证 Nginx 版本及编译参数
nginx -V 

使用 nginx -V 命令查看 Nginx 的版本号和编译时启用的模块。输出如下:
在这里插入图片描述

此命令验证了 Nginx 是否成功安装以及是否正确编译了所需模块。

3. 创建 Nginx 启动文件
vim /lib/systemd/system/nginx.service 

创建或编辑 Nginx 的 systemd 服务文件 /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 

关键部分解释如下:

  • [Unit] 部分定义了服务的描述、依赖和启动顺序。
  • [Service] 部分定义了服务的启动类型、启动前的检查命令、启动命令、重载和停止命令。
  • [Install] 部分定义了服务在系统中的安装模式,通常为 multi-user.target

保存并退出编辑器后,执行以下命令重新加载 systemd 配置:

systemctl daemon-reload 
4. 启动 Nginx 服务
systemctl start nginx 

启动 Nginx 服务,检查服务状态以确保其成功运行:

systemctl status nginx 

平滑升级

1. 解压源码包

[root@Nginx ~]# tar zxf nginx-1.26.1.tar.gz  

功能:将 nginx-1.26.1.tar.gz 文件解压到当前目录。tar 命令用于解压归档文件,zxf 参数表示使用 gzip 解压并提取文件。

2. 进入 Nginx 源码目录

[root@Nginx ~]# cd nginx-1.26.1/ 

功能:进入解压后的 Nginx 源码目录,以便进行配置和编译。

3. 解压额外的模块

[root@Nginx ~]# tar zxf echo-nginx-module-0.63.tar.gz  

功能:解压 echo-nginx-module-0.63.tar.gz 文件,该文件包含额外的 Nginx 模块。

4. 配置 Nginx

[root@Nginx nginx-1.26.1]# ./configure --prefix=/usr/local/nginx --add-module=/root/echo-nginx-module-0.63 --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module 

功能:配置 Nginx 编译选项。

  • --prefix=/usr/local/nginx:指定 Nginx 安装路径。
  • --add-module=/root/echo-nginx-module-0.63:添加第三方模块。
  • --user=nginx --group=nginx:设置运行 Nginx 的用户和用户组。
  • --with-http_ssl_module:启用 HTTPS 支持。
  • --with-http_v2_module:启用 HTTP/2 支持。
  • --with-http_realip_module:启用真实 IP 支持。
  • --with-http_stub_status_module:启用状态监控模块。
  • --with-http_gzip_static_module:启用静态文件 Gzip 压缩支持。
  • --with-pcre:启用 Perl 兼容正则表达式库。
  • --with-stream:启用流模块。
  • --with-stream_ssl_module:启用流 SSL 支持。
  • --with-stream_realip_module:启用流真实 IP 支持。

5. 编译 Nginx

[root@Nginx nginx-1.26.1]# make 

功能:编译 Nginx 源码,生成可执行文件。

6. 查看编译后的文件信息

[root@Nginx nginx-1.26.1]# ll objs/nginx /usr/local/nginx/sbin/nginx -rwxr-xr-x 1 root root  Aug 20 15:37 objs/nginx -rwxr-xr-x 1 root root  Aug 20 15:00 /usr/local/nginx/sbin/nginx 

功能:列出 objs/nginx/usr/local/nginx/sbin/nginx 文件的信息,确认编译成功并显示文件大小和时间戳。

7. 替换 Nginx 可执行文件

[root@Nginx sbin]# cp nginx nginx.1 [root@Nginx sbin]# \cp -f /root/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin 

功能:备份当前 Nginx 可执行文件 nginxnginx.1,然后将新编译的 nginx 文件复制到 /usr/local/nginx/sbin 目录中,替换旧的可执行文件。

8. 测试 Nginx 配置文件

[root@Nginx sbin]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful 

功能:测试 Nginx 配置文件是否正确,确保配置语法无误。

9. 重新加载 Nginx 配置

[root@Nginx sbin]# kill -USR2 36606 [root@Nginx sbin]# ps aux | grep nginx root 36606 0.0 0.1 9840 2564 ? Ss 15:08 0:00 nginx: master process /usr/local/nginx/sbin/nginx nginx 36607 0.0 0.2 13700 4852 ? S 15:08 0:00 nginx: worker process root 36608 0.0 0.4  8876 pts/0 T 15:08 0:00 systemctl status nginx root 42580 0.0 0.3 9876 6084 ? S 15:50 0:00 nginx: master process /usr/local/nginx/sbin/nginx nginx 42581 0.0 0.2 13736 4764 ? S 15:50 0:00 nginx: worker process root 42583 0.0 0.1  2292 pts/0 S+ 15:50 0:00 grep --color=auto nginx [root@Nginx sbin]# kill -WINCH 36606 [root@Nginx sbin]# kill -QUIT 36606 

功能

  • kill -USR2 36606:发送 USR2 信号给旧的 Nginx 主进程,触发其重新加载配置。
  • ps aux | grep nginx:检查 Nginx 进程的状态。
  • kill -WINCH 36606:发送 WINCH 信号给旧的主进程,告诉它将工作进程切换到新的主进程。
  • kill -QUIT 36606:发送 QUIT 信号给旧的主进程,平稳退出。

10. 验证 Nginx 是否正常运行

[root@Nginx sbin]# curl -I localhost HTTP/1.1 200 OK Server: nginx/1.26.1 Date: Tue, 20 Aug 2024 07:51:54 GMT
Content-Type: text/html
Content-Length: 615 Last-Modified: Tue, 20 Aug 2024 07:00:22 GMT Connection: keep-alive ETag: "66c43f06-267" Accept-Ranges: bytes 

功能:使用 curl 工具向 localhost 发送 HTTP 请求,检查 Nginx 是否正确响应,确保其正常运行并返回 HTTP 200 状态码。

在这里插入图片描述

回滚

Nginx 服务回滚与测试

1. 停止 Nginx 服务
[root@Nginx sbin]# pkill nginx 
  • 使用 pkill nginx 命令停止所有 Nginx 进程。
2. 备份并替换 Nginx 可执行文件
[root@Nginx sbin]# cp nginx nginx.1 [root@Nginx sbin]# ls nginx nginx.1 nginx.2 nginx nginx.1 nginx.2 
  • 创建了 nginx.1 文件作为 nginx 文件的备份。
  • 列出当前目录下的 nginxnginx.1nginx.2 文件。
[root@Nginx sbin]# cp /usr/local/nginx/sbin/nginx.1 /usr/local/nginx/sbin/nginx cp: overwrite '/usr/local/nginx/sbin/nginx'? y 
  • 使用 cp 命令将 nginx.1 文件复制为 nginx 文件,并确认覆盖已存在的 nginx 文件。
3. 检查 Nginx 进程
[root@Nginx sbin]# ps aux | grep nginx [root@Nginx sbin]# ps aux | grep nginx root 36608 0.0 0.4  8876 pts/0 T 15:08 0:00 systemctl status nginx root 42628 0.0 0.1  2352 pts/0 S+ 16:05 0:00 grep --color=auto nginx 
  • 使用 ps aux | grep nginx 命令检查当前运行的 Nginx 进程。
4. 启动 Nginx 服务
[root@Nginx sbin]# systemctl start nginx [root@Nginx sbin]# systemctl status nginx 
  • 使用 systemctl start nginx 命令启动 Nginx 服务。
  • 使用 systemctl status nginx 命令检查 Nginx 服务的状态。
5. 检查 Nginx 服务状态输出
● nginx.service - The NGINX HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2024-08-20 16:06:27 CST; 5s ago Process: 42632 ExecStartPre=/usr/local/nginx/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 42633 ExecStart=/usr/local/nginx/sbin/nginx (code=exited, status=0/SUCCESS) Main PID: 42634 (nginx) Tasks: 2 (limit: 10800) Memory: 3.1M CPU: 12ms CGroup: /system.slice/nginx.service ├─42634 "nginx: master process /usr/local/nginx/sbin/nginx" └─42635 "nginx: worker process" Aug 20 16:06:27 Nginx.tinminglee.org systemd[1]: Starting The NGINX HTTP and reverse proxy server... Aug 20 16:06:27 Nginx.tinminglee.org nginx[42632]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok Aug 20 16:06:27 Nginx.tinminglee.org nginx[42632]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful Aug 20 16:06:27 Nginx.tinminglee.org systemd[1]: Started The NGINX HTTP and reverse proxy server. 
  • 显示了 Nginx 服务的状态,确认服务已启动并运行。
  • 确认了 Nginx 配置文件的语法正确,并且测试成功。
  • 显示了 Nginx 的主进程(PID 42634)和工作者进程(PID 42635)。
6. 测试 Nginx 服务
[root@Nginx sbin]# curl -I localhost HTTP/1.1 200 OK Server: nginx/1.24.0 Date: Tue, 20 Aug 2024 08:06:54 GMT
Content-Type: text/html
Content-Length: 615 Last-Modified: Tue, 20 Aug 2024 07:00:22 GMT Connection: keep-alive ETag: "66c43f06-267" Accept-Ranges: bytes 

在这里插入图片描述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/122814.html

(0)
上一篇 2025-10-13 21:00
下一篇 2025-10-13 21:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信