网站首页 > 技术教程 正文
一、简介
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
猜你喜欢
- 2024-10-07 一文详解 文件包含漏洞(文件包含漏洞可能带来的危害)
- 2024-10-07 项目部署基础汇总三---linux下安装nginx
- 2024-10-07 使用Logtail采集Kubernetes上挂载的NAS日志
- 2024-10-07 Docker部署nginx挂载文件夹和文件让数据保存在宿主机
- 2024-10-07 第二十九使用nginx代理本地文件夹实现文件服务器
- 2024-10-07 nginx源码分析—内存池结构ngx_pool_t及内存管理
- 2024-10-07 企业十大应用-nginx-部署(nginx哪个公司开发的)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)