【工具-Nginx】从入门安装到高可用集群搭建

文章已收录至https://lichong.work,转载请注明原文链接。
ps:欢迎关注公众号“Fun肆编程”或添加我的私人微信交流经验🤝

一.Nginx安装配置及常用命令

1.环境搭建

首先在linux系统下安装gcc编译环境,执行:

yum install gcc-c++ -y

确保当前系统可以编译nginx及其依赖包。

同时,安装Nginx还需要以下依赖需要进行安装:

pcre-9.37.tar.gz

openssl-1.0.1t.tar.gz

zlib-1.2.8.tar.gz

nginx-1.11.1.tar.gz

下面通过两种安装方式安装这些依赖,可灵活选择安装方式

(1)联网下载压缩包安装依赖

(1.1)在linux文件夹下下载压缩包,这里已/usr/src文件夹为例
cd /usr/src

wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
(1.2) 解压压缩文件后进入到该压缩文件
tar -xvf pcre-8.37.tar.gz

cd pcre-8.37
(1.3)对当前安装包进行配置检查
./configure 
(1.4)进行编译安装
make && make install
(1.5)安装完成,可通过命令查看是否安装成功及当前安装版本
pcre-config --version

(2)安装nginx的依赖

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

2.Nginx安装

(1)到nginx官网下载安装nginx,推荐下载Stable version(稳定版本),本次安装以nginx1.20.2为例。

nginx下载

(2)将nginx的压缩包放到/usr/src中,进入该目录下对该压缩包进行解压

cd /usr/src

tar -xvf nginx-1.20.2.tar.gz

(3) 进入到解压后的nginx文件夹

cd nginx-1.20.2

(4)对当前安装包进行配置检查

./configure

(5)进行编译安装

make && make install

(6)进到/usr/local/nginx/sbin文件夹中(安装完nginx会在local文件夹中自动创建nginx文件)启动nginx

cd /usr/local/nginx/sbin 

./nginx

(7)查看已启动的nginx进程

ps -ef | grep nginx

2.Nginx配置

(1) 进入nginx的配置文件夹

cd /usr/local/nginx/conf

(2)打开nginx.conf文件

vi nginx.conf

其中

server {
 listen    80;
 server_name localhost;
 #charset koi8-r;
 #access_log logs/host.access.log main;
 location / {
   root  html;
   index index.html index.htm;
  }
}

如果要配置固定端口号,则在server中的listen中修改端口号。此处默认不改动。

(3) 防火墙开放nginx的端口,此处以80端口为例

sudo firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

(4)从浏览器访问该nginx(浏览器访问linux的ip地址)

nginx

3.Nginx常用命令

以下命令基于已经安装成功Nginx后在Nginx的sbin文件夹下执行。

cd /usr/local/nginx/sbin/ 

(1)查看nginx的版本号

./nginx –v

(2)启动nginx

./nginx

(3) 关闭nginx

./nginx -s stop

(4) 重新加载nginx(一般用于更改完conf中的配置文件后,在不重启nginx的情况下使配置文件生效)

./nginx -s reload

二、反向代理

这里以已经配置好的nginx反向代理tomcat为例。实现效果则为访问nginx地址展示tomcat页面。

1.在linux中安装并启动好tomcat用于测试,并且开放tomcat的端口号。

2.在nginx的nginx.conf配置文件中配置反向代理

cd /usr/local/nginx/conf

vi nginx.conf

3.配置反向代理

首先将server块中的server_name修改为该linux系统的ip地址。

然后在server块中的location当中配置需要请求转发的路径,其中proxy_pass则是tomcat的地址。

location / {
      root    html;
      proxy_pass http://127.0.0.1:8080;
    }

4.访问nginx地址

三、负载均衡

nginx配备多台服务器的情况下,平均访问每台机器。

此次以两台tomcat服务器为例,一台端口为8080,一台端口为8081。

1.在nginx配置文件中进行负载均衡的配置

配置服务器地址

upstream myserver{
    server xxx.xx.xx.14:8080;
    server xxx.xx.xx.14:8081;   
}
server{
    listen    80;
    server_name xxx.xx.xx.14
    #charset koi8-r;
    #access_log logs/host.access.log main;
    location / {
        proxy_pass  http://myserver; //这里的myserver是上面配置的upstream
        root  html;
        index index.html index.htm;
  }
}

2.负载均衡分配策略

1.轮询

默认情况下是轮询策略,到nginx服务器中的每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down调则自动剔除该服务器

2.权重weight

weight默认为1,权重越高被分配的客户端越多,可根据服务器性能来配置相应的权重。

可在upstream中配置

upstream myserver{

    server xxx.xx.xx.14:8080  weight=2;//数值越大则需要处理的请求越多
    
    server xxx.xx.xx.14:8081;   

}

3.ip_hash

每个请求按照访问ip的hash结果分配,也就是说同一ip访问nginx会一直讲请求发送给同一台服务器。

upstream myserver{
    ip_hash;
    server xxx.xx.xx.14:8080 ;
    server xxx.xx.xx.14:8081;   
}

需要注意的nginx1.3.1版本之前ip_hash不能和权重weight共同使用。

当有服务器需要剔除的时候,需要手动down掉

4.fair

upstream myserver{
    ip_hash;
    server xxx.xx.xx.14:8080 ;
    server xxx.xx.xx.14:8081;   
    fair;
}

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

5.least_conn

把请求转发给连接数较少的后端服务器。在这种方式下可以达到更好的负载均衡效果

upstream myserver{
    least_conn;
    server xxx.xx.xx.14:8080 ;
    server xxx.xx.xx.14:8081;   
}

6.url_hash

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。

upstream myserver{
    hash $request_uri;
    server xxx.xx.xx.14:8080 ;
    server xxx.xx.xx.14:8081;   
}

四、动静分离

我们通过使用正则表达式来匹配过滤,以此来达到动态页面和静态页面的操作可以交给不同的服务器。

以下配置实现的是当为jpg,js和css文件的时候则访问本地html文件里的静态资源,如果访问的是动态资源则由8080端口tomcat服务器处理

以下是nginx.conf文件的配置

server{

listen    80;
server_name xxx.xx.xx.14
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ \.jpg$ {
    root  html;
    expires 30d;
}
location ~ \.js$ {
    root  html;
    expires 30d;
}
location ~ \.css$ {
    root  html;
    expires 30d;
}

location ~ .*$ {
    proxy_pass http://localhost:8080
}

}

五、高可用集群

这里介绍下双机高可用,主要分为两种:

(一).Nginx+keepalived双机主从模式

一台主服务器和一台热备服务器。正常情况下主服务器提供服务,只有当主服务器发生故障的时候热备服务器才会接管主服务器。但是当主服务器不出现故障的时候,则热备服务器就会处于浪费状态

(二).Nginx+keepalived双机主主模式

使用两台负载均衡服务器,互为主备,两台服务器都属于活动状态,只有当其中一台发生故障时由另一台接管故障服务器的请求。这种方案比较经济实惠。

下面分别介绍下这两种模式的配置:

1.Nginx+keepalived双机主从模式

配备两台nginx服务器,每台中配置keepalived。

(1)配备两台服务器,并且在两台服务器中安装nginx(安装见上)

(2)在两台服务器中安装keepalived

yum install keepalived -y

(3)打开keepalived所在文件夹

cd /etc/keepalived/

(3)对keepalived进行配置

vi keepalived.conf

(4)在keepalived.conf具体参数配置

主服务器配置如下

vrrp_instance VI_1 {
    state MASTER    //主从划分,主服务器为MASTER从服务器为BACKUP
    interface eth0  //设置为当前网卡(通过ifconfig查看)
    virtual_router_id 51  //主从服务器设置相同的id
    priority 100      //优先级 主服务器的优先级设置为较大,从服务器次之
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.111  //虚拟地址,浏览器通过该地址访问,主从配置相同
    }
}


从服务器配置如下

vrrp_instance VI_1 {
    state BACKUP
    interface eth0 //设置为当前网卡(通过ifconfig查看)
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.111
    }
}


主从服务器都在keepalived.conf中添加如下检测脚本检测脚本

vrrp_script chk_http_port {
     script "usr/local/src/nginx_check.sh" //nginx_check.sh所在位置,该文件通过下个步骤中新建
     interval 2
     weight2
}

在script配置路径下配置该检测脚本

cd /usr/local/src/

将以下脚本生成nginx_check.sh文件放到 usr/local/src/中

#!/bin/bash
A=`ps -C nginx – no-header |wc -l` 
if [ $A -eq 0 ];then 
        /usr/local/nginx/sbin/nginx 
        sleep 2 
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
             killall keepalived 
        fi 
fi

(5)两台服务器上启动nginx和keepalived

./nginx

systemctl start keepalived.service

(6)测试

访问keepalived.conf中配置的虚拟ip地址,可以正常访问服务器。将主服务器中的nginx中停止,仍可正常访问,此时访问的实际上是从服务器上的资源

2.Nginx+keepalived双机主主模式

在两台机器上都安装nginx和keepalived。具体安装方式见上。

(1)第一台keepalived配置

! Configuration 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_script chk_http_port {
 
   script "usr/local/src/nginx_check.sh"
 
   interval 2      #(检测脚本执行的间隔)
 
   weight 2
 
}
 
vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.112
    }
}
 
vrrp_instance VI_2 {
    state BACKUP
    interface eno16777736
    virtual_router_id 52
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.113
    }
}

(2)第二台keepalived配置

! Configuration 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_script chk_http_port {

   script "usr/local/src/nginx_check.sh"

   interval 2      #(检测脚本执行的间隔)

   weight 2

}

vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.112
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eno16777736
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        xxx.xx.xx.113
    }
}

在双机主主模式下,两台服务器都属于活动状态,只有当其中一台发生故障时由另一台接管故障服务器的请求。

六、推荐参数配置

可参考文章:【工具-Nginx】Nginx高性能通用配置文件-注释版-支持防刷限流、可控高并发、HTTP2、防XSS、Gzip、OCSP Stapling、负载、SSL

文章已收录至https://lichong.work,转载请注明原文链接。
ps:欢迎关注公众号“Fun肆编程”或添加我的私人微信交流经验🤝

<center><font color="DeepSkyBlue">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<strong>往期精选🪶</strong>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</font></center>

【前端-开发环境】使用NVM实现不同nodejs版本的自由切换(NVM完整安装使用手册)
【前端-NPM私服】内网使用verdaccio搭建私有npm服务器
【前端-IE兼容】Win10和Win11使用Edge调试前端兼容IE6、IE7、IE8、IE9、IE10、IE11问题
【工具-Shell脚本】java程序产品包模板-linux和windows通用shell启动停止脚本(无需系统安装Java运行环境)
【工具-Nginx】Nginx高性能通用配置文件-注释版-支持防刷限流、可控高并发、HTTP2、防XSS、Gzip、OCSP Stapling、负载、SSL
【工具-WireShark】网络HTTP抓包使用教程
【后端-maven打包】通过profile标签解决同时打jar包 war包需求
【后端-SpringCache】基于Spring Cache封装一个能够批量操作的Redis缓存记录下踩坑历程(pipeline或mget封装)
【后端-SkyWalking】SkyWalking前后端开发环境搭建详细教程步骤-6.x/7.x/8.x版本通用-插件二次开发利器(一)

<p align="right"><font color="red"><strong>✨欢迎为耿直少年点赞、关注、收藏!!!</strong></font></p>
<p align="right"><font color="red"><strong>👇👇👇</strong></font></p>

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

推荐阅读更多精彩内容