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/
Nginx采用多进程架构,由一个Master主进程和多个Worker工作进程组成。
主进程(Master Process):负责接收外部操作信号,转发给Worker进程,并监控Worker进程的运行状态。它还负责读取Nginx配置文件,建立、绑定和关闭socket连接,管理和生成工作进程,并实现不中断服务的平滑升级和重启。
工作进程(Worker Process):负责处理所有网络请求。每个Worker进程都是且平等的,通常设置为CPU核心数,以充分利用资源并减少上下文切换的损耗。Worker进程处理客户请求,将其送入各个功能模块,执行I/O调用,与后端服务器通信,并响应客户请求。
Nginx的主进程与工作进程之间通过管道通信。主进程生成工作进程,并在启动时为每个进程建立单向管道,用于发送指令。Worker进程之间也可以通过共享内存或管道通信,但由于它们是隔离的,因此需要通过主进程来实现状态信息的共享。
Nginx启动时,Master进程加载配置文件并初始化监听的socket。然后,Master进程通过fork出多个Worker进程,Worker进程之间竞争新的连接,成功的Worker进程通过三次握手建立Socket连接并处理请求。
Nginx支持多种模块,模块化设计使其功能可以灵活扩展。
Nginx主要有三个版本:
Nginx可以通过yum或源码编译安装,推荐使用源码编译方式安装。虽然yum安装较为方便,但版本通常较旧,而源码编译可以更灵活地自定义安装路径和功能,以满足特定业务需求。
dnf install gcc pcre-devel zlib-devel openssl-devel -y
首先,通过 dnf
包管理器安装 Nginx 编译所需的依赖库。这些依赖包括 gcc
编译器、pcre-devel
(Perl Compatible Regular Expressions 开发库)、zlib-devel
(压缩库开发文件)和 openssl-devel
(OpenSSL 开发文件)。
mkdir /nginx
tar zxf nginx-1.24.0.tar.gz
useradd -s /sbin/nologin -M nginx
cd nginx-1.24.0/
./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 功能。make && make install
vim ~/.bash_profile
编辑 ~/.bash_profile
文件,添加 Nginx 二进制文件的路径到系统环境变量中:
export PATH=$PATH:/usr/local/nginx/sbin
保存并退出后,执行以下命令使配置生效:
source ~/.bash_profile
nginx -V
使用 nginx -V
命令查看 Nginx 的版本号和编译时启用的模块。输出如下:
此命令验证了 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
systemctl start nginx
启动 Nginx 服务,检查服务状态以确保其成功运行:
systemctl status nginx
正常情况下,输出将显示 Nginx 服务已启动并运行,且各个进程状态正常。
将旧Nginx二进制文件换成新Nginx程序文件(注意先备份)
向master进程发送USR2信号
master进程修改pid文件名加上后缀.oldbin,成为nginx.pid.oldbin
master进程用新Nginx文件启动新master进程成为旧master的子进程,系统中将有新旧两个Nginx主
进程共同提供Web服务,当前新的请求仍然由旧Nginx的worker进程进行处理,将新生成的master进
程的PID存放至新生成的pid文件nginx.pid
向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止
向旧master进程发送QUIT信号,关闭老master,并删除Nginx.pid.oldbin文件
如果发现升级有问题,可以回滚∶向老master发送HUP,向新master发送QUIT
[root@Nginx ~]# tar zxf nginx-1.26.1.tar.gz
[root@Nginx ~]# cd nginx-1.26.1/
[root@Nginx ~]# tar zxf echo-nginx-module-0.63.tar.gz
功能:解压 echo-nginx-module-0.63.tar.gz
文件,该文件包含额外的 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 支持。[root@Nginx nginx-1.26.1]# make
功能:编译 Nginx 源码,生成可执行文件。
[root@Nginx nginx-1.26.1]# ll objs/nginx /usr/local/nginx/sbin/nginx
-rwxr-xr-x 1 root root 6177320 Aug 20 15:37 objs/nginx
-rwxr-xr-x 1 root root 5679504 Aug 20 15:00 /usr/local/nginx/sbin/nginx
功能:列出 objs/nginx
和 /usr/local/nginx/sbin/nginx
文件的信息,确认编译成功并显示文件大小和时间戳。
[root@Nginx sbin]# cp nginx nginx.1
[root@Nginx sbin]# \cp -f /root/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin
[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 配置文件是否正确,确保配置语法无误。
[root@Nginx sbin]# kill -USR2 36606
[root@Nginx sbin]# ps aux | grep nginx
root 36606 0.0 0.1 9840 25 ? 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 235988 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 47 ? S 15:50 0:00 nginx: worker process
root 42583 0.0 0.1 221668 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 信号给旧的主进程,平稳退出。[root@Nginx sbin]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Tue, 20 Aug 2024 07:51: 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 状态码。
[root@Nginx sbin]# pkill nginx
pkill nginx
命令停止所有 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
文件的备份。nginx
、nginx.1
和 nginx.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
文件。[root@Nginx sbin]# ps aux | grep nginx
[root@Nginx sbin]# ps aux | grep nginx
root 36608 0.0 0.4 235988 8876 pts/0 T 15:08 0:00 systemctl status nginx
root 42628 0.0 0.1 221668 2352 pts/0 S+ 16:05 0:00 grep --color=auto nginx
ps aux | grep nginx
命令检查当前运行的 Nginx 进程。[root@Nginx sbin]# systemctl start nginx
[root@Nginx sbin]# systemctl status nginx
systemctl start nginx
命令启动 Nginx 服务。systemctl status nginx
命令检查 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.
[root@Nginx sbin]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Tue, 20 Aug 2024 08:06: 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
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务