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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342