0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Nginx和Apache的差异

马哥Linux运维 来源:CSDN技术社区 2025-07-09 09:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Nginx

什么是Nginx?

Nginx是一个轻量级/高性能 的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和IMAP 协议。它实现非常高效的反向代理、负载平衡,可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、腾讯等。

其他 web 网站服务软件

TomcatJava 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
systemctldisablefirewalld
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. 进入解压后的目录并配置编译选项:

cdnginx-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
cdnginx-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
cpobjs/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)
$0stop
$0start
;;

reload)
kill-s HUP $(cat$PID)
;;

*)
echo"Usage:$0{start|stop|restart|reload}"
exit1
esac
exit0









![]()

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 服务:

chmod754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctlenablenginx.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

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

    关注

    2

    文章

    1302

    浏览量

    73653
  • 服务器
    +关注

    关注

    13

    文章

    10094

    浏览量

    90880
  • nginx
    +关注

    关注

    0

    文章

    180

    浏览量

    12968

原文标题:从Nginx小白到运维高手:安装配置与进程管理实战教程

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    nginx重启命令linux步骤是什么?

      1、验证nginx配置文件是否正确   方法一:进入nginx安装目录sbin下,输入命令./nginx -t   看到如下显示nginx.conf syntax is ok
    发表于 07-10 16:40

    nginx重启命令linux步骤是什么?

      1、验证nginx配置文件是否正确   方法一:进入nginx安装目录sbin下,输入命令./nginx -t   看到如下显示nginx.conf syntax is ok
    发表于 07-11 17:13

    NanoPi NEO - 可靠的Nginx 网络服务器

    服务器部署,并删除匿名用户和测试数据库。#mysql_secure_installation根据提示进行选择:3. 安装nginx如果你之前已经安装了Apache2,则需要先移除apache
    发表于 06-20 15:43

    nginx错误页面配置

    16、nginx 错误页面配置nginx错误页面包括404 403 500 502 503 504等页面,只需要在server中增加以下配置即可: error_page404 403 500 502
    发表于 07-26 06:54

    主要学习下nginx的安装配置

    处理。因为有了中间件,使得大型网站在规划有了更好的层次性,维护上更加方便。也可以实现负载均衡、安全防护等。Nginx是一个开源高性能、可靠的HTTP中间件、代理服务,在目前企业中得到了很大的利用。今天
    发表于 10-19 14:12

    ApacheNginx 简单对比 以及Nginx 基本使用方法

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个目前运维必备的工具之一。
    的头像 发表于 01-31 14:42 8896次阅读
    <b class='flag-5'>Apache</b>与<b class='flag-5'>Nginx</b> 简单对比  以及<b class='flag-5'>Nginx</b> 基本使用方法

    nginx和tomcat区别

    Tomcat是Apache 软件基金会的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/
    的头像 发表于 02-12 15:37 1.1w次阅读
    <b class='flag-5'>nginx</b>和tomcat区别

    一文读懂NginxApache工作原理

    在高并发连接的情况下,NginxApache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,Nginx 0.7.14 + PHP 5.2.6
    发表于 04-26 11:33 2712次阅读

    Linux的apache

    Linux的apache(ups电源技术转让)-Linux的apache,有需要的可以参考!
    发表于 08-31 16:17 1次下载
    Linux的<b class='flag-5'>apache</b>

    Apache Doris正式成为 Apache 顶级项目

    全球最大的开源软件基金会 Apache 软件基金会(以下简称 Apache)于美国时间 2022 年 6 月 16 日宣布,Apache Doris 成功从 Apache 孵化器毕业,
    的头像 发表于 06-17 14:08 1778次阅读

    Nginx如何监控

    搭建了Nginx集群后,需要继续深入研究的就是日常Nginx监控。
    的头像 发表于 08-22 10:03 1809次阅读

    Nginx入门指南

    Nginx是由Igor Sysoev(俄罗斯人)为当地网站Rambler.ru所开发的一款高性能WEB 服务软件,第一个公开版本于2004年10月发布。一开始Nginx并不为人所知,后来由于它诱人
    的头像 发表于 01-07 09:53 1233次阅读

    Nginx 如何实现高性能低消耗

    Nginx 是一个轻量级的HTTP 服务程序,相比其他服务器程序如ApacheNginx占用内存少,稳定性高,并发处理能力强。同时Nginx 还是一个反向代理服务程序,和邮件代理服务
    的头像 发表于 11-11 11:31 1018次阅读
    <b class='flag-5'>Nginx</b> 如何实现高性能低消耗

    Apache服务器和Nginx服务器

    ApacheNginx都是常见的开源Web服务器软件,它们用于处理HTTP请求并提供网站和应用程序的服务。下面是对ApacheNginx的一些基本特点的比较: 一、
    的头像 发表于 01-22 16:48 1156次阅读

    Nginx基础安装与配置教程

    说起Web服务器,大家第一反应可能是Apache,但作为一个在运维路上摸爬滚打的技术人,我必须要为Nginx正名一下!这个由俄罗斯大神Igor Sysoev开发的轻量级HTTP服务器,真的是我见过最"能打"的Web服务器之一。
    的头像 发表于 06-13 16:13 796次阅读