Nginx
什么是Nginx?
Nginx是一个 轻量级/高性能 的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和IMAP 协议。它实现非常高效的反向代理、负载平衡,可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、腾讯等。
其他 web 网站服务软件
Tomcat:Java Servlet和JSP的容器,用于托管Java Web应用程序。
IIS:Windows平台的Web服务器,与Windows紧密集成,支持ASP.NET等技术。
Nginx 有哪些优点?
• 跨平台、配置简单。
• 非阻塞、高并发连接:处理 2-3 万并发连接数,官方监测能支持5万并发。
• 内存消耗小:开启 10 个 Nginx 才占 150M 内存。
• 成本低廉,且开源。
• 稳定性高,宕机的概率非常小。
• 内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。
Nginx 应用场景
• http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
• 虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
• 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用 Nginx 做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。
• Nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。
Nginx 和 Apache 的差异
特点
Apache:
创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存(线程要比进程小的多,所以 worker 支持比 perfork 高的并发),并发过大会榨干服务器资源。
Nginx:
采用单线程来异步非阻塞处理请求(管理员可以配置 Nginx 主进程的工作进程的数量)(epol),不会为每个请求分配 cpu 和内存资源,节省了大量资源,同时也减少了大量的 CPU 的上下文切换。所以才使得 Nginx 支持更高的并发。
区别
1. 轻量级:Nginx 相比 Apache 占用更少的内存和系统资源,特别适合高并发场景。
2. 静态资源处理性能:Nginx 在处理静态资源时性能远超 Apache,速度更快。
3. 反向代理加速:Nginx 支持无缓存的反向代理,可以加速网站访问,优化流量分发。
4. 性能不依赖硬件:Nginx 的性能和可伸缩性不依赖于高性能硬件,Apache 需要较强的硬件资源才能获得高效能。
5. 热部署支持:Nginx 支持热部署,可以在不影响服务的情况下进行配置修改或软件升级,而 Apache 需要重启才能应用修改。
6. 异步与同步处理:Nginx 是异步非阻塞的处理方式,一个进程可以处理多个连接;Apache 则是同步多进程,一个进程处理一个连接。
7. 模块化设计:Nginx 高度模块化,开发模块相对简单,并且自带的组件比 Apache 更少,适合针对特定需求进行优化。
8. 高并发性能:Nginx 在高并发场景下能保持低资源消耗的同时提供高性能,而 Apache 则在高并发下消耗更多资源。
9. 配置简洁:Nginx 的配置文件相对简洁,容易上手和维护;而 Apache 的配置文件复杂,学习成本较高。
这些差异使 Nginx 在处理高并发、静态资源、反向代理等场景下更受欢迎,而 Apache 则更适用于复杂的动态内容管理或特定模块需求的环境。
Nginx 默认的配置文件路径
在基于RHEL(如CentOS、Fedora)的Linux发行版中,使用 yum 安装 Nginx 后,默认的配置文件路径通常如下:
1. 主配置文件:
• /etc/nginx/nginx.conf
这个是Nginx的主配置文件,所有的全局配置选项(如worker进程数、日志文件路径、http块设置等)都会在这里定义。
2. 站点虚拟主机配置目录:
• /etc/nginx/conf.d/
这个目录通常包含具体的站点虚拟主机配置文件。默认的站点配置文件为:
• /etc/nginx/conf.d/default.conf
可以在这里添加、修改或删除站点配置文件。
3. 网站根目录(默认网页目录):
• /usr/share/nginx/html/
这是Nginx安装后,默认的网页存放目录。默认的网页文件(如 index.html)也存放在这个路径中。
4. 日志文件路径:
日志文件路径可以在 nginx.conf 文件中通过 access_log 和 error_log 指令进行更改。
• 访问日志:/var/log/nginx/access.log
• 错误日志:/var/log/nginx/error.log
YUM安装的默认目录和文件:
/etc/nginx/ # 配置文件目录 ├── nginx.conf # 主配置文件 └── conf.d/ # 站点配置目录 └── default.conf # 默认站点配置文件 /usr/share/nginx/html/ # 默认网站根目录 /var/log/nginx/ # 日志文件目录
Nginx 服务的 YUM 安装
使用官方YUM源
# nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
启动
systemctl start nginx netstat -lntp | grep nginx
查看版本、系统状态、开启模块等信息
nginx -v
Nginx 服务的编译安装
官网下载软件包 https://nginx.org/en/download.html 。生产环境一般用稳定版。
1. 关闭防火墙并上传安装包
1. 关闭防火墙:
systemctl stop firewalld systemctl disable firewalld setenforce 0
2. 将 Nginx 安装包上传至 /opt 目录:
`nginx-1.12.0.tar.gz`
2. 安装依赖包
Nginx 的配置及运行需要 pcre、zlib、openssl 等软件包的支持,安装这些软件开发包提供相应的库和头文件:
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
3. 创建 Nginx 运行用户和组
Nginx 默认以 nobody 身份运行,建议创建专门的用户和组来更好地控制权限:
`useradd -M -s /sbin/nologin nginx`
4. 编译安装 Nginx
1. 解压 Nginx 源码包:
cd /opt tar zxvf nginx-1.12.0.tar.gz -C /opt/
2. 进入解压后的目录并配置编译选项:
cd nginx-1.12.0/ ./configure --prefix=/usr/local/nginx # 指定 Nginx 的安装路径 --user=nginx # 指定运行 Nginx 的用户 --group=nginx # 指定运行 Nginx 的组 --with-http_stub_status_module # 启用 http_stub_status_module 模块以支持状态统计 #清爽版 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module ![]()
3. 编译并安装:
make && make install
4. 创建命令符号链接,让系统可以识别 nginx 命令:
`ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/`
5. 管理 Nginx 服务
1. 检查 Nginx 配置文件是否正确:
nginx -t
2. 启动 Nginx:
/usr/local/nginx/sbin/nginx # 或 nginx -g "daemon off;" # 不要以守护进程(daemon)模式运行。
3. 停止 Nginx:
cat /usr/local/nginx/logs/nginx.pid # 查看 Nginx 的 PID kill -3kill -s QUIT killall -3 nginx killall -s QUIT nginx
4. 重载 Nginx 配置:
kill -1kill -s HUP killall -1 nginx killall -s HUP nginx
5. 分割日志并重新打开日志文件:
kill -USR1
6. 平滑升级 Nginx:Nginx 会启动新版本的可执行文件,并且不会中断现有的连接。这种方式可以实现 平滑升级。
kill -USR2
6. Nginx 新版本平滑升级
大致步骤:
下载、解压软件包 -> 进入软件包目录 ./configure 配置 -> make 编译 -> 替换nginx二进制文件 -> make upgrade
1. 解压新版本的 Nginx 源码包:
tar -zxvf nginx-1.xx.xx.tar.gz cd nginx-1.xx.xx
2. 配置并编译新版本 Nginx:
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module make
3. 备份旧的 Nginx 二进制文件并替换为新版本(objs目录):
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old cp objs/nginx /usr/local/nginx/sbin/nginx
4. 升级 Nginx:
make upgrade # 确保当前 Nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的或者先停止旧版本 Nginx,然后启动新版本:
killall nginx /usr/local/nginx/sbin/nginx
7. Nginx 添加系统服务
方法一:使用 init.d 添加 Nginx 系统服务(脚本)
1. 编辑 Nginx 启动脚本:
`vim /etc/init.d/nginx`
2. 填写以下脚本内容:
#!/bin/bash
#chkconfig: - 99 20
#description: Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case"$1"in
start)
$COM
;;
stop)
kill -s QUIT $(cat$PID)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat$PID)
;;
*)
echo"Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
![]()
3. 修改文件权限并添加为系统服务:
chmod +x /etc/init.d/nginx chkconfig --add nginx
4. 启动、停止 Nginx 服务:
systemctl stop nginx systemctl start nginx
方法二:使用 systemd 添加 Nginx 系统服务
1. 编辑 Nginx 的 systemd 服务文件:
`vim /lib/systemd/system/nginx.service`
2. 填写以下内容:
[Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target ![]()
3. 各个字段说明:
• [Unit]
• Description:描述服务
• After:定义服务的依赖,网络服务启动后再启动 Nginx。
• [Service]
• Type=forking:Nginx 以后台模式运行。
• PIDFile:指定 Nginx 进程 ID 的存放路径。
• ExecStart:Nginx 的启动命令。
• ExecReload:Nginx 的重载命令。
• ExecStop:Nginx 的停止命令。
• PrivateTmp=true:为 Nginx 分配独立的临时空间。
• [Install]
• WantedBy=multi-user.target:设置服务在多用户模式下启动。
4. 修改权限并启动 Nginx 服务:
chmod 754 /lib/systemd/system/nginx.service systemctl start nginx.service systemctl enable nginx.service
Nginx 的2个进程
查看进程后有3个进程,实际有2个Nginx的进程,分别为:
master进程:管理worker进程,加载配置文件
worker进程:处理连接请求
详解:
ps -elf | grep nginx 1 S root 17968 1 0 80 0 - 5146 sigsus 11:27 ? 0000 nginx: master process /usr/local/nginx/sbin/nginx 5 S nginx 17969 17968 0 80 0 - 5257 ep_pol 11:27 ? 0000 nginx: worker process 0 S root 18037 15136 0 80 0 - 28206 pipe_w 11:34 pts/0 0000 grep --color=auto nginx
这三个进程涉及 Nginx 的工作机制:
1. nginx: master process /usr/local/nginx/sbin/nginx
• 这是 Nginx 的主进程,负责整体管理。它启动后会监听配置文件变化,管理多个工作进程(worker process)。主进程本身不处理实际的请求,而是用于:
• 读取和解析配置文件
• 管理子进程(启动、停止、重启等)
• 处理信号(如重载、停止等)
2. nginx: worker process
• 这些是 Nginx 的工作进程,负责实际处理客户端请求。每个 worker 进程独立处理请求,包括静态内容、代理请求、负载均衡等。Nginx 使用异步的、事件驱动的模型,所以一个 worker 可以同时处理大量连接。
3. grep --color=auto nginx
• 这部分是执行的 grep 命令,用于查找与 Nginx 相关的进程。-color=auto 参数会将匹配到的字符串(这里是 “nginx”)高亮显示。
总结:主进程负责管理,工作进程负责处理实际的请求。
Nginx 命令管理及进程控制
1. 启动与停止 Nginx
• 后台启动 Nginx:
`nginx` AI写代码bash该命令启动 Nginx 进程并以后台模式运行。
• 前台启动 Nginx:
nginx -g "daemon off;"该命令启动 Nginx 进程,并以前台模式运行。此模式主要用于调试或某些特殊场景。
• 停止 Nginx(优雅停止):
nginx -s quit kill -3这三种方式都可以优雅地停止 Nginx,完成当前连接后停止服务。nginx -s quit 是通过发送信号让主进程优雅停止,而 kill -s QUITkill -s QUIT
2. 重新加载 Nginx 配置
• 重新加载配置:
这几种方法用于在不停止 Nginx 的情况下,重新加载配置文件。nginx -s reload 通过向 Nginx 主进程发送 HUP 信号来重新加载配置,而 kill -1
nginx -s reload kill -1kill -s HUP
3. 其他进程管理命令
• 检查配置文件语法:
nginx -t该命令检查 Nginx 配置文件语法的正确性,并报告是否有错误。
• 日志文件切割(重新生成日志文件):
kill -USR1向 Nginx 主进程发送 USR1 信号,用于重新生成日志文件。该命令常用于日志分割,将旧的日志文件关闭并重新打开新日志文件。
链接: https://blog.csdn.net/qq_44421043/article/details/142467150
全部0条评论
快来发表一下你的评论吧 !