Nginx 与 Apache 的优缺点
Nginx
优点:
- 高性能:Nginx 采用异步、非阻塞的事件驱动架构,可以处理大量并发连接而不消耗过多的系统资源,适用于处理高负载的 Web 环境。
- 资源消耗低:相比 Apache,Nginx 使用更少的内存和处理器资源,使其在节约硬件资源方面表现出色。
- 高并发处理能力:Nginx 的事件驱动架构允许并行处理大量并发连接,并提供负载均衡和反向代理。
- 高度可定制性:Nginx 的配置简洁明了,支持各种模块和插件,且易于定制和扩展。
- 高可靠性:对于大流量的 Web 站点,Nginx 在静态内容交付方面具有高度可靠性。
缺点:
- 不支持 .htaccess 文件:Nginx 不支持 Apache 中常用的 .htaccess 文件,需要直接在配置文件中进行所有设置。
- 动态内容处理相对较弱:相对于 Apache,在处理动态内容和脚本语言方面,如 PHP,Nginx 的配置稍微更加复杂。
Apache
优点:
- 广泛使用且成熟稳定:Apache 是一个历史悠久的 Web 服务器软件,广泛使用,已经被许多人广泛测试和验证。
- 强大的生态系统和模块支持:Apache 拥有大量的模块和插件,可以扩展其功能,满足各种需求。
- 完善的动态内容支持:Apache 对于处理动态内容和脚本语言(如 PHP)有更好的支持,容易集成各种应用程序。
缺点:
- 资源消耗相对较高:相对于 Nginx,Apache 在处理大量并发连接时需要更多的系统资源。
- 使用线程模型:Apache 使用基于线程的处理模型,对于高并发环境下的稳定性和效率略差一些。
- 配置相对复杂:Apache 的配置相对于 Nginx 来说较为复杂,需要更多的学习和理解。
Nginx
Nginx的进程
master process:主进程(守护进程),用来管理工作进程。
worker process:工作进程,用来处理用户的请求。
编译安装nginx服务
关闭防火墙安装依赖包
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
创建运行用户和组,便于管理
nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限。
[root@root ~]# useradd -M -s /sbin/nologin nginx
解压软件包,编译安装nginx·
官网:https://nginx.org/en/download.html
wget http://nginx.org/download/nginx-1.18.0.tar.gz
#下载安装包
tar xf nginx-1.18.0.tar.gz
#解压软件包
cd nginx-1.18.0/
./configure \
--prefix=/app/nginx \
#指定nginx的安装路径
--user=nginx \
#指定用户名
--group=nginx \
#指定组名
--with-http_ssl_module \
--with-http_v2_module \
--with-http_stub_status_module \
#启用 http_stub_status_module 模块以支持状态统计操作 VTS
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
make && make install
#安装
ln -s /app/nginx/sbin/nginx /usr/local/sbin/
#创造软连接放入 $PATH 中
配置文件
-
全局块:全局配置,对全局生效;
-
events块:配置影响 Nginx 服务器与用户的网络连接;
-
http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
-
server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
-
location块:用于配置匹配的 uri ;
-
upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分
vim /usr/local/nginx/conf/nginx.conf 1.全局配置 #user nobody; #运行用户,若编译时未指定则默认为 nobody worker_processes 1; #工作进程数量,一般设置为和 CPU 核数一样 #error_log logs/error.log; #错误日志文件的位置 #pid logs/nginx.pid; #PID 文件的位置 2.I/O 事件配置 events { use epoll; #使用 epoll I/O模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能 worker_connections 4096; #每个进程处理 4096 个连接 } 3.HTTP 配置 http { ##文件扩展名与文件类型映射表 include mime.types; ##默认文件类型 default_type application/octet-stream; ##日志格式设定 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; ##访问日志位置 #access_log logs/access.log main; ##开启文件传输模式 sendfile on; ##减少网络报文段的数量 #tcp_nopush on; ##连接保持超时时间,单位是秒 #keepalive_timeout 0; #并行下载最大资源数量 keepalive_timeout 65; 可以设置2个值 需用空格隔开 ##gzip模块设置,设置是否开启gzip压缩输出 #gzip on; ##Web 服务的监听配置 server { ##监听地址及端口 listen 80; ##站点域名,可以有多个,用空格隔开 server_name www.djq.com; ##网页的默认字符集 charset utf-8; ##根目录配置 location / { ##网站根目录的位置/usr/local/nginx/html root html; ##默认首页文件名 index index.html index.php; } ##内部错误的反馈页面 error_page 500 502 503 504 /50x.html; ##错误页面配置 location = /50x.html { root html; } } }
检查、启动、重启、停止nginx服务
nginx -t
#检测配置是否正确
nginx
#开启服务
cat /app/nginx/logs/nginx.pid
#查看nginx主进程的PID
pgrep nginx -l
#查看nginx的主进程号和工作进程号
nginx -v
#查看nginx的版本。
nginx -V
#查看nginx的版本,以及编译安装时的配置参数
升级nginx服务
tar xf nginx-1.20.2.tar.gz
./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
make
mv /app/nginx/sbin/nginx /app/nginx/sbin/nginx_old
#备份旧版本
cp objs/nginx /usr/local/nginx/sbin/nginx
重启服务 并且
nginx -V
#查看版本
kill -USR1 `cat /apps/nginx/run/nginx.pid`
nginx -s stop
#关闭服务
pstree -p |grep nginx
#查看进程关系
ps aux|grep nginx
#查询进程
分割日志
cd /usr/local/nginx/logs
#切换到日志目录
mkdir log.bak
mv *.log log.bak
#将原有日志移走
kill -USR1 7679
#重新生成日志文件