nginx的安装,学习及使用

nginx

开源的高性能Web服务器和反向代理服务器,俄罗斯开发者伊戈尔·赛索耶夫(Igor Sysoev)使用C语言开发

特点

  1. 高性能:Nginx使用事件驱动和异步处理机制,能够支持数以万计的并发连接,而不会显著增加资源消耗。
  2. 高可靠性:Nginx设计为高可靠性,能够长时间运行而无需重启,这在生产环境中非常重要。
  3. 模块化:Nginx的模块化设计使其功能易于扩展,开发者可以根据需求添加或移除模块。
  4. 配置灵活性:Nginx的配置通过简单的文本文件进行,这使得定制服务器行为变得容易。
  5. 安全性:提供了SSL/TLS支持、防DDoS攻击、IP黑白名单等安全特性。
  6. 资源消耗低:运行时对内存和CPU的占用非常低,适合在资源受限的环境中运行。

 nginx功能

  1. Web服务器:作为静态内容服务器,提供网页、图片、视频等的快速访问。
  2. 反向代理:将客户端的请求转发到后端服务器,隐藏实际提供服务的服务器。
  3. 负载均衡:智能地在多个后端服务器间分配请求,提高系统可用性和扩展性。
  4. 动静分离:将静态资源和动态内容分离,提高网站性能。
  5. API网关:作为API服务的前端,提供路由、限流、监控等功能。
  6. HTTPS服务:支持SSL/TLS协议,提供加密的安全连接。
  7. 邮件代理:支持IMAP/POP3/SMTP协议,可以作为邮件代理服务器。

架构

Master-Worker 进程模型
    Master进程:负责管理Worker进程,包括启动、停止Worker进程,处理信号(如重新加载配置),以及管理共享资源(如缓存)。它不直接处理客户端请求,而是负责监控Worker进程的状态和进行必要的管理操作。
    Worker进程:负责实际处理客户端请求。每个Worker进程都是独立的,它们之间互不干扰,共同处理来自客户端的并发请求。这种设计提高了Nginx的并发处理能力和稳定性。
Event模块
    Event模块是Nginx的核心模块之一,负责处理底层的事件。它采用异步、非阻塞的事件驱动模型,通过操作系统提供的高效I/O多路复用机制(如epoll、kqueue等)来监听和处理大量的并发连接。这种机制使得Nginx能够高效地处理请求,而不会因为等待I/O操作而阻塞进程。
HTTP模块
    HTTP模块是Nginx的HTTP请求处理模块,负责解析HTTP请求、处理请求头、处理请求内容,以及生成HTTP响应等。HTTP模块内部包含了很多子模块,如反向代理模块、负载均衡模块、静态文件模块等,可以根据需求进行自定义配置
 Cache模块
    Cache模块用于缓存静态资源和动态请求的响应结果

编译安装nginx

#创建存放nginx源码的目录
mkdir  -p  /nginx
#进入目录,开始下载nginx源码包
cd  /nginx
curl -O https://nginx.org/download/nginx-1.26.1.tar.gz
#解压源码包
tar  xf  nginx-1.26.1.tar.gz 
cd  nginx-1.26.1
#解决依赖的软件包
yum install  gcc   pcre-devel  openssl-devel -y
#新建用户nginx_user 用来启动nginx
useradd  nginx_user  -s  /sbin/nologin
#配置工作
./configure  --prefix=/usr/local/nginx-1  --user=nginx_user --with-http_ssl_module  --with-http_v2_module  --with-threads   --with-stream   --with-http_stub_status_module
#启动2个进程去编译
make  -j  2
#安装编译,将前面编译好的二进制文件和配置文件复制到/usr/local/nginx-1目录下
make  install
#修改PATH环境变量,增加nginx的安装目录,方便找到安装的nginx
echo 'PATH=/usr/local/nginx-1/sbin/:$PATH'  >>/etc/profile
在当前终端里执行脚本/etc/profile 加载PATH环境变量
source   /etc/profile
#启动nginx
/usr/local/nginx-1/sbin/nginx

通过查看进程来确认是否成功启动

可以通过查看端口来确认nginx是否启动

netstat -anplut         命令需要安装包net-tools

通过访问本机ip地址来查看,如果出现以下界面,恭喜你,已经成功安装(注意关闭防火墙和selinux)

nginx命令

nginx                            启动nginx

nginx -v                        查看nginx版本

nginx -t                        检查nginx配置文件有没有问题

nginx -s reload            重新加载nginx

nginx -s stop                停止nginx服务

nginx开机启动


1.写入配置文件,开启自动启动编译安装的nginx

vim /etc/rc.local 
/usr/local/nginx-1/sbin/nginx

2.创建一个 nginx.service文件,让systemctl进行管理

进入目录项

cd /usr/lib/systemd/system

cd /usr/lib/systemd/system编辑一个nginx.service文件内容如下:

[Unit]
Description=nginx - high performance web server

[Service]
Type=forking
PIDFile=/usr/local/nginx-1/logs/nginx.pid
ExecStart=/usr/local/nginx-1/sbin/nginx -c /usr/local/nginx-1/conf/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat $PIDFile)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat $PIDFile)"

[Install]
WantedBy=multi-user.target

vim nginx.service


[Unit]
Description=nginx - high performance web server

定义了服务的描述信息,当您使用systemctl status 命令查看服务列表或服务的状态时,这个描述信息会显示出来,帮助用户了解这个服务是做什么的。

[Service]
Type=forking

#指定了服务的启动类型,forking类型意味着服务在启动时会创建一个新的进程,并且父进程会立即退出。systemd将跟踪这个新创建的子进程作为服务的主进程。
PIDFile=/usr/local/nginx-1/logs/nginx.pid

#指定了服务的主进程ID(PID)文件的路径。Nginx的master进程的PID会被写入这个文件。systemd会使用这个文件来跟踪Nginx的主进程,并在需要时发送信号给它。
ExecStart=/usr/local/nginx-1/sbin/nginx -c /usr/local/nginx-1/conf/nginx.conf

#指定了启动服务时要执行的命令,告诉systemd使用指定的Nginx可执行文件(/usr/local/nginx-1/sbin/nginx)和配置文件(/usr/local/nginx-1/conf/nginx.conf)来启动Nginx服务。
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat $PIDFile)"

#指定了重新加载服务配置时要执行的命令。当您使用systemctl reload nginx命令时,systemd会执行这个命令。
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat $PIDFile)"

#指定了停止服务时要执行的命令。当您使用systemctl stop nginx命令时,systemd会执行这个命令

[Install]
WantedBy=multi-user.target

#指定了这个服务单元被哪个目标(target)所依赖

接下来重新加载系统配置,并设置开机启动

systemctl daemon-reload

部署web

部署一个网页

进入/usr/local/nginx-1/conf中,编辑nginx.conf

worker_processes  2;#启动两个进程
#pid        logs/nginx.pid;
events {
    worker_connections  2048;
}
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"';
    sendfile        on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #一个server 就是一个网站
    #一个server就是一个虚拟主机(网站)
    server {
    #网站监听的端口
        listen       80;
        #网站对应的域名
        server_name  www.yqxweb.com;
    #定义访问日志的路径和名字、记录的内容
        access_log  logs/yqxweb.access.log  main;
        #定义错误日志:访问网站出错的时候,服务器会记录下来
        error_log  logs/yqxweb.error.log;
    #定义路由  / 网站根目录
        location / {
        #定义网站存放网页的文件夹--》网站内容根目录 ->在/usr/local/nginx-1/html
            root   html;  
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

更改完配置文件后记得使用nginx -t检查是否有错误,接着重启一遍nginx最后可以使用curl+ip访问

,更改/etc/hosts文件添加域名解析,将你的域名和对应的ip写入,就可以使用 curl +域名进行访问

192.168.172.153 www.yqxweb.com 

在windows的测试机器上添加dns域名解析对应的ip和域名
C:\Windows\System32\drivers\etc\hosts
给本机进行域名解析的
192.168.205.153   www.scweb.com

nginx还有许多其他的功能

隐藏nginx版本

nginx -t

nginx -s reload

再次打开刷新即可

提供下载功能和状态统计功能

访问时需在域名后添加/download

此处download需要在html新建一个文件夹download

访问时需在域名后添加/status

负载均衡

将工作负载(如访问请求、数据处理任务等)均匀地分配到多个服务器或网络设备上,以防止任何单一节点过载,从而提高整体系统的可用性和性能.

作用

  1. 资源优化:有效利用服务器资源,避免过载。
  2. 提升性能:增加系统处理请求的能力,提高吞吐量和响应速度。
  3. 改善体验:确保用户请求快速响应,提升用户体验。
  4. 增强可伸缩性:便于根据需要添加或减少服务器资源。
  5. 提高可靠性:分散请求,减少单点故障风险,提升服务连续性。
  6. 降低成本:优化资源使用,减少长期运营成本。

配置

进入/usr/local/nginx-1/conf

vim nginx.conf

worker_processes  2;
events {
    worker_connections  2048;
}
http {
        #定义一个负载均衡器,yqx's scweb
    upstream yqxweb {
        #最少连接算法
        #least_conn;

        #哈希算法
        #ip_hash;

        #加权轮询
        server 192.168.172.140 weight=10;

        #备份
        #server 192.168.172.140 backup;
        server 192.168.172.140:8080;
        server 192.168.172.143;
    }
        #定义一个虚拟主机,对外提供web服务
    server {
        listen 80;
        #定义一个访问页面根目录,定义一个路由,转达到yqx's web负载均衡配置上去处理
        location / {
            proxy_pass http://yqxweb;
            #代理服务器在转发http请求时,在http头部增加一个字段X-Real_IP,值为ip;
            proxy_set_header X-Real_IP  $remote_addr;
            #proxy_pass http://www.jd.com;

        }
    }
}

健康检测


    被动检测模式下,Nginx并不主动向后端服务器发送检测请求。相反,它通过观察代理请求的实际响应来判断后端服务器的健康状况
    主动检测模式下,Nginx会定期向后端服务器发送检测请求(通常称为“探针”或“心跳”),以验证其健康状况

高可用-keepalived

认识

高可用系统或服务能够持续并稳定地运行,对于任何因素造成的单点故障都具有较强的容错能力,保证系统或服务的连续性和可靠性

Keepalived是一个开源的、轻量级的、基于VRRP(虚拟路由器冗余协议)协议的高可用软件,主要用于实现Linux服务器的故障转移和负载均衡

体系架构

    core模块:负责主进程的启动、维护及全局配置文件的加载和解析。
    vrrp模块:实现VRRP协议的核心部分,负责处理VRRP的广播、接收和响应等操作。
    check模块:负责健康检查功能,通过定期检测服务器的状态(如端口状态、URL响应等)来确保服务的可用性。如果检测到服务器故障,会触发故障切换机制。

作用

    高可用系统网络服务:Keepalived可以实现在两台或多台主机之间的故障切换转移,确保服务的连续性。
    LVS集群健康状态检测:Keepalived能够检测LVS集群中各台真实服务器的健康状态,并在服务器出现故障时自动将其从LVS的正常转发队列中移除。
    管理LVS负载均衡软件:Keepalived可以读取配置文件,并通过一个更为底层的接口来管理IPVS并生成IPVS规则,使得LVS的使用更为方便

安装使用

    yum  install  keepalived -y
    cd /etc/keepalived/keepalived.conf
第一台主机的keepalived

#vrrp_strict  注释掉,遵守最严格的vrrp协议
#实现高可用的配置
vrrp_instance VI_1 {  #启动一个vrrp的实例 VI_1 实例名,可以自定义,一个实例背后就是一个keepalived相关的进程
    state MASTER      #角色是master   backup
    interface ens33    #在哪个接口上监听vrrp协议,同时绑定vip到那个接口
    virtual_router_id 105    #虚拟路由id(帮派) 0~255范围
    priority 120            #优先级  0~255
    advert_int 1            #advert interval 宣告消息 时间间隔 1秒
    authentication {   #认证
        auth_type PASS   #认证的类型是密码认证
        auth_pass 11112222   #具体的密码,可以自己修改
    }
    virtual_ipaddress {    #vip的配置,vip可以是多个ip,也可以是一个vip
        192.168.172.188

    }
}

    systemctl start keepalived
    systemctl enable keepalived

第二台主机

! onfiguration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 88
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    } 
    virtual_ipaddress {
        192.168.172.188
    }       
} 

可以使用 ip add 查看可以发现有192.168.172.188这个地址


    对外我们只公布有vip地址的负载均衡器
    验证
        直接将lb1的nginx关机
        lb2出现了vip
    会通过vrrp协议进行广播,一旦时隔多久没有收到广播就会进行vip漂移

脑裂

同时出现多台vip

原因

        vrid(虚拟路由id)不一样
        网络通信有问题:中间有防火墙阻止了网络之间的选举的过程,vrrp报文的通信
        认证密码不一样也会出现脑裂

危害

        冗余:资源浪费,但是能正常访问,反而还有负载均衡的作用
        脑裂恢复的时候,还是有影响的,会短暂的中断,影响业务的使用

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值