编程技术分享平台

网站首页 > 技术教程 正文

Nginx 备忘录 - 01. 简介与安装(nginx书)

xnh888 2024-10-07 17:37:53 技术教程 16 ℃ 0 评论

一、简介

Nginx 是一个开源的、高性能的 HTTP 和反向代理服务器。

常见的版本:

  • Nginx 开源版本:https://nginx.org/
  • Nginx Plus 商业版本:https://www.nginx-cn.net/
  • OpenResty 集成 LuaJIT:https://openresty.org/
  • Tengine 淘宝开源:https://tengine.taobao.org/

二、架构

Nginx 基于事件驱动和异步非阻塞 I/O 设计,相比于传统的 Web 服务器,Nginx 的内存占用更少,启动速度更快,在高并发场景下表现优异。

Nginx 使用了 Master-Worker 进程模型。Nginx 启动后,会有一个 master 进程和多个 worker 进程。

  • master 进程主要用来管理 worker 进程,包含:接收来自外界的信号,向各 worker 进程发送信号;监控 worker 进程的运行状态,当 worker 进程异常退出后,会自动重新启动新的 worker 进程等。
  • worker 进程主要处理基本的网络事件,多个 worker 进程之间是平等且独立的,他们同等竞争来自客户端的请求。一个请求,只可能在一个 worker 进程中被处理。worker 进程的个数是可以设置的,一般会设置与机器 cpu 核数一致。

Nginx 采用多 worker 的方式来处理请求,每个 worker 里面只有一个主线程,那能够处理的并发数是不是很有限呢?其实不然,Nginx 采用了异步非阻塞 I/O 的方式来处理请求,以实现其高并发能力。

三、编译安装

1. 安装依赖项

# C语言编译器
yum install -y gcc
# 支持正则表达式
yum install -y pcre pcre-devel
# 支持 zlib 压缩
yum install -y zlib zlib-devel
# 支持 openssl
yum install -y openssl openssl-devel

2. 下载并解压源代码

wget https://nginx.org/download/nginx-1.26.1.tar.gz
tar -zxvf nginx-1.26.1.tar.gz
cd nginx-1.26.1

3. 配置构建选项

./configure --prefix=/opt/nginx

其他常用的构建选项:

# Nginx 根目录。默认:/usr/local/nginx
--prefix=<PATH>
# 可执行文件路径。默认:**/sbin/nginx
--sbin-path=<PATH>
# 主配置文件路径。默认:**/conf/nginx.conf
--conf-path=<PATH>
# 错误日志路径。默认:**/logs/error.log
--error-log-path=<PATH>
# 访问日志路径。默认:**/logs/access.log
--http-log-path=<PATH>

# 禁用某个默认构建的模块
--without-<MODULE>
# 启用某个默认未构建的模块
--with-<MODULE>

# 静态链接第三方模块
--add-module=<PATH>
# 动态链接第三方模块
--add-dynamic-module=<PATH>

4. 编译并安装

make
make install

四、Nginx目录结构

/opt/nginx
|-- sbin           # 主程序目录
    |-- nginx      # 主程序
|-- conf           # 配置文件目录
    |-- nginx.conf # 默认主配置文件
    |-- mime.types # 文件后缀与MIME类型映射
|-- html           # 默认站点目录
    |-- 50x.html.  # 500 错误页
    |-- index.html # 默认首页文件
|-- logs           # 日志目录
    |-- access.log # 访问日志
    |-- error.log  # 错误日志
    |-- nginx.pid  # 进程ID文件

五、启动 Nginx 服务

cd /opt/nginx/sbin
./nginx           # 启动服务
./nginx -s reload # 重新加载配置
./nginx -s reopen # 重启服务
./nginx -s quit   # 优雅关闭
./nginx -s stop   # 停止服务
./nginx -t        # 检查配置文件
./nginx -v        # 查看 Nginx 版本号
./nginx -V        # 查看详细的版本信息

防火墙配置:

# 开启 80 端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-all

# 或者直接关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

六、创建 Nginx 系统服务

添加 Nginx 到 systemd 管理器:在 /lib/systemd/system/ 目录下创建 nginx.service 文件:

[Unit]
Description=nginx - high performance web service
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
ExecReload=/opt/nginx/sbin/nginx -s reload
ExecStop=/opt/nginx/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

使用 systemctl 管理Nginx服务:

# 重新加载所有服务
systemctl daemon-reload
# 重新加载服务配置
systemctl reload nginx
# 查看服务状态
systemctl status nginx
# 启动服务
systemctl start nginx
# 停止服务
systemctl stop nginx
# 重启服务
systemctl restart nginx
# 开机启动服务
systemctl enable nginx
# 关闭开机启动服务
systemctl disable nginx

七、平滑升级

# 如果需要第三方模块,
# 先下载第三方模块并解压
wget https://github.com/gnosek/\
nginx-upstream-fair/archive/refs/heads/master.zip
# /opt/nginx-upstream-fair-master
unzip master.zip

# 进入 nginx 源码重新配置构建选项
./configure --prefix=/opt/nginx \
# 启用自带的 ssl 模块
--with-http_ssl_module \
# 添加之前下载的 fair 第三方模块
--add-module=/opt/nginx-upstream-fair-master

# 重新编译,但不要安装
make

# 备份原 nginx 执行文件
mv /opt/nginx/sbin/nginx \
/opt/nginx/sbin/nginx.old
# 将新编译好的可执行程序拷贝到之前的位置
cp /opt/nginx-1.26.1/objs/nginx \
/opt/nginx/sbin/

# 检查 nginx 是否正常
./nginx -t

# 发送平滑迁移信号
kill -USR2 `cat /opt/nginx/logs/nginx.pid`

# 观察 nginx 进程信息,可发现有新老两个进程
ls /opt/nginx/logs/
ps aux | grep nginx

# 发送 WINCH 信号,
# 关闭旧的工作进程,将不再接受新请求
kill -WINCH `cat /opt/nginx/logs/nginx.pid.oldbin`

# 如果需要回滚
# 可通过 HUP 信号回滚旧的进程
kill -HUP `cat /opt/nginx/logs/nginx.pid.oldbin`

# 观察无误后,关闭旧的 master 进程,完成此次升级
kill -QUIT `cat /opt/nginx/logs/nginx.pid.oldbin`

提示:nginx-upstream-fair 模块编译时有一个缺失 default_port 的问题,需要修改下其源码:

sed -i 's/default_port/no_port/g' \
ngx_http_upstream_fair_module.c

八、使用 docker 安装 nginx

Docker 备忘录 - 07. 常用容器部署实例

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表