nginx

一个高性能的HTTP和反向代理服务器,占有内存少,并发能力强,还可以作为静态页面的web服务器同时还支持CGI协议。

常用命令

1.启动命令

找到nginx二进制文件(/usr/local/nginx/sbin)

docker 容器 一般在(/etc/nginx/sbin)

./nginx

2.关闭命令

./nginx -s stop

3.重新加载配置文件

./nginx -s reload

4.查看版本号

./nginx -v

nginx配置文件

默认配置文件default.conf

worker_process 1;
events{
    worker_connections 1024;
}
http{
    include mime.types;
    default_type application/octer-stream;
    keepalive_timeout 65;
    server {
        listen 80;
        server_name localhost;
        localtion / {
            root html;
            index index.html,index.htm;
        }
        error_page 500 502 503 504 /50x.html;
        localtion = /50x.html{
            root html;
        }
    }
}

全局块:

主要包括nginx服务器的用户,允许生成的worker process(支持的worker进程数量)数,进程存放路径,日志存放路径和类型以及配置文件和类型引入。

events块:

nginx服务器与用户的网络连接,常用的设置比如多 worker process下的网络连接进行序列化,是否允许接收多个网络连接,选取哪个事件驱动模型来处理连接请求,worker_connections,每个worker process 可以支持的最大连接数。

http块:

这个是nginx服务器中最频繁的部分,代理,缓存和日志等绝大多数功能和第三方模块配置

1.http全局块

http全局配置的指令包括文件引入,MIME-TYPE定义,日志定义,连接超时时间,单连接请求上线

2.server块

主要作用就是基于nginx服务器接收到请求字符串,对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理,地址定向,数据缓存和应答控制等功能。

每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机,每个server块也分为全局server块以及可以同事包含多个localtion块

location 指令说明

语法如下:

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配

成功,就停止继续向下搜索并立即处理该请求。

2、~:用于表示 uri 包含正则表达式,并且区分大小写。

3、~ *:用于表示 uri 包含正则表达式,并且不区分大小写。

4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字

符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location

块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~ * 标识。

1.反向代理:

反向代理客户端是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送大反向代理服务器,由反向代理服务器去获取数据后,返回客户端,此时代理服务器和目标服务器就是一个服务器,暴露了代理服务器的地址,隐藏了真是服务器ip地址。


image.png

配置文件

1.配置单个

server {
    listen  8000;
    server_name 192.168.56.121;

     location / {
        root   /opt/html;
        index  index.html index.htm;
     }
}

2.配置多个

server {
    listen  8000;
    server_name 192.168.56.121;

     location / {
        root   /opt/html;
        index  index.html index.htm;
     }
    location /api/v1{
       proxy_pass http://localhost:9001/api/v1;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
    }

   location /api/v2 {
      proxy_pass http://localhost:8080/api/v1;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
   }

}

2.负载均衡:

当单个服务器解决不了并发数量,我们只有增加服务器的数量来解决,这时候就需要使用负载均衡策略来将请求分发到各个服务器上。


image.png

配置文件

http {
    upsteam myserver{
        ip_hash;//策略
        server 192.168.56.101:8000 weight =1;
        server 192.168.56.102:8000 weight =2;
    }
    server {
        localtion /{
            proxy_pass http://myserver;
            proxy_connection_time 10;
        }
    }
}

nginx提供策略

1.轮询(默认)

每个请求按照顺序一次分发到不同服务器,后端服务器宕机,会自动剔除。

2.权重

upsteam myserver{
     server 192.168.56.101:8000 weight =10;
     server 192.168.56.102:8000 weight =2;
 }

weght越大访问的比例成正比

3.hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

4.响应时间

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream server_pool {
    server 192.168.56.101:8000 ;
    server 192.168.56.102:8000 ;
    fair ;
}

3.动静分离:

将静态页面和动态资源分开管理来提高解析速度,降低单个服务器压力

image.png

修改/conf/nginx.confp配置文件

server{
    listen 80;
    server_name 192.168.17.129;
    
    location /www/ {
        root /data/;
        index index.html index.htm
    }
    location /image/ {
        root /data/;
        autoindex on;             
    }
}

测试:

image.png

image.png

4.高可用:

为了防止nginx宕机导致服务不可用,需要使用主备的方式来提高nginx的高可用性

image.png

前置条件:

1.配置高可用需要俩台服务器

2.需要安装和上nginx和keeepalived

高可用集群

image.png

修改/etc/keepalived/keepalivec.conf配置文件

#全局配置
global_defs {
    notification_email {
    acassen@firewall.loc
    failover@firewall.loc
    sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.17.129 #主机ip
    smtp_connect_timeout 30
    router_id LVS_DEVEL #服务器域名名字,可在/etc/hosts中查看127.0.0.1映射的域名
}

#脚本配置
vrrp_script chk_http_port {
    script "/usr/local/src/nginx_check.sh"#脚本路径
    interval 2 #(检测脚本执行的间隔);每隔2s检查一次
    weight 2 #设置服务器权重
}

#虚拟ip的配置
vrrp_instance VI_1 {
        state BACKUP # Master为Master;Salve为BACKUP
        interface ens33 #网卡;可以用ip addr 看网卡名
        virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
        priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
        advert_int 1 #每1s发送一次心跳
        authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.17.50 // VRRP H 虚拟ip地址,多台keepalived绑定一个ip;必须同一网段
    }
}

在/usr/local/src 添加检测脚本

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx #nginx启动路径
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived #nginx挂掉后,杀掉这个服务器的所有keepalived进程
    fi
fi

启动nginx和keepalived

nginx启动

    ./nginx

启动keepalived

systemctl start keepalived.service

把住服务器的nginx和keeperalived停止,在输入之前的访问地址如果还可以访问说明成功

image.png

nginx原理

image.png

work工作原理

image.png

1个matser& 多个worker机制的好处

每个work是独立进程,如果其他worker 出现问题不会造成服务中断

需要设置多少个worker

nginx采用的是与redis类似的io多路复用机制,每个worker是一个独立的进程,每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,每个worker进程可以把一个cpu发挥到极致,所以worker数和服务器的cpu数相等最为适宜。worker多于cpi会导致cpu频繁切换导致损耗

配置文件(nginx.conf)

worker_processes 4
#work 绑定 cpu(4 work 绑定 4cpu)。
worker_cpu_affinity 0001 0010 0100 1000
#work 绑定 cpu (4 work 绑定 8cpu 中的 4 个) 。
worker_cpu_affinity 0000001 00000010 00000100 00001000
image.png

原文链接

https://blog.csdn.net/qq_43284469/article/details/119941951

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。