Nginx和Apache的差异

描述

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 -3 
kill -s QUIT 
killall -3 nginx
killall -s QUIT nginx

 

4. 重载 Nginx 配置:

kill -1 
kill -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 
kill -s QUIT 
这三种方式都可以优雅地停止 Nginx,完成当前连接后停止服务。nginx -s quit 是通过发送信号让主进程优雅停止,而 kill -s QUIT  和 kill -3  直接向主进程发送 QUIT 信号实现停止。

 

2. 重新加载 Nginx 配置

• 重新加载配置:
这几种方法用于在不停止 Nginx 的情况下,重新加载配置文件。nginx -s reload 通过向 Nginx 主进程发送 HUP 信号来重新加载配置,而 kill -1  和 kill -s HUP  则是直接通过 kill 命令向主进程发送 HUP 信号。

nginx -s reload
kill -1 
kill -s HUP 

 

3. 其他进程管理命令

• 检查配置文件语法:

nginx -t
该命令检查 Nginx 配置文件语法的正确性,并报告是否有错误。

 

• 日志文件切割(重新生成日志文件):

kill -USR1 
向 Nginx 主进程发送 USR1 信号,用于重新生成日志文件。该命令常用于日志分割,将旧的日志文件关闭并重新打开新日志文件。

 

链接: https://blog.csdn.net/qq_44421043/article/details/142467150

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分