Nginx 基础

65 阅读4分钟

Nginx 与 Apache 的优缺点

Nginx

优点:

  1. 高性能:Nginx 采用异步、非阻塞的事件驱动架构,可以处理大量并发连接而不消耗过多的系统资源,适用于处理高负载的 Web 环境。
  2. 资源消耗低:相比 Apache,Nginx 使用更少的内存和处理器资源,使其在节约硬件资源方面表现出色。
  3. 高并发处理能力:Nginx 的事件驱动架构允许并行处理大量并发连接,并提供负载均衡和反向代理。
  4. 高度可定制性:Nginx 的配置简洁明了,支持各种模块和插件,且易于定制和扩展。
  5. 高可靠性:对于大流量的 Web 站点,Nginx 在静态内容交付方面具有高度可靠性。

缺点:

  1. 不支持 .htaccess 文件:Nginx 不支持 Apache 中常用的 .htaccess 文件,需要直接在配置文件中进行所有设置。
  2. 动态内容处理相对较弱:相对于 Apache,在处理动态内容和脚本语言方面,如 PHP,Nginx 的配置稍微更加复杂。

Apache

优点:

  1. 广泛使用且成熟稳定:Apache 是一个历史悠久的 Web 服务器软件,广泛使用,已经被许多人广泛测试和验证。
  2. 强大的生态系统和模块支持:Apache 拥有大量的模块和插件,可以扩展其功能,满足各种需求。
  3. 完善的动态内容支持:Apache 对于处理动态内容和脚本语言(如 PHP)有更好的支持,容易集成各种应用程序。

缺点:

  1. 资源消耗相对较高:相对于 Nginx,Apache 在处理大量并发连接时需要更多的系统资源。
  2. 使用线程模型:Apache 使用基于线程的处理模型,对于高并发环境下的稳定性和效率略差一些。
  3. 配置相对复杂: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
#重新生成日志文件