Linux下Nginx的入门学习记录


前言

前两篇文章已经把环境等都安装完了。

反向代理demo1

进入tomcat/webapps
新建java文件夹,里面放入一个html
访问效果
http://192.168.21.129:8080/java/index.html

一般情况下都是直接访问域名+路径,没有端口号的。这就该nginx上场了
修改nginx配置
进入conf文件夹

vi nginx.conf
    server {
        listen       80;
        server_name  localhost;
        location / {
               proxy_pass http://127.0.0.1:8080;
        }

然后重启nginx

./nginx -s reload

访问http://192.168.21.129/java/index.html
完美实现!

反向代理demo2

复制一个tomcat,然后修改端口为8081

cp -r tomcat tomcat8081

修改tomcat8081的端口,进入conf文件夹

vi server.xml

直接输入/8080搜索
8080 修改为8081

关闭端口 8005 修改为 8006.

修改一下此tomcat/webapps的文件
将之前的java/inde.html,修改为gmaya,内容也修改一下,用于区别。
访问不了,不要忘记开启8081端口哟
最终为:
http://192.168.21.129:8080/java/index.html
http://192.168.21.129:8081/gmaya/index.html

修改nginx配置

重启,访问看效果

Nginx 配置-负载均衡

修改配置

还是上面的两个tomcat,直接修改nginx

http {
    upstream myserver {
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://myserver;
        }
    }
}

默认轮询的方式,每次打开新窗口,80808081会交替出现。
提示:修改webapps/ROORindex文件会看的效果更明显

Nginx 分配策略:

  1. 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除
  2. 权重,默认1,权重越高被分配的客户端越多 指定轮询几率,weight 和访问比率成正比。比如一台服务器性能好,一台不好,那就分配性能好的多一点
  3. ip_hash 每个请求按访问 iphash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
  4. fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。

Nginx 高可用

tomcat搞了多个,也就是咱们web服务器搞了集群,不用担心某个tomcat挂了。
但是现在只有一台Nginx,如果Nginx挂了,也是gg
所以我们需要两台以上Nginx来实现故障转移和高可用。

keepalived简介

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

安装keepalived

yum install keepalived -y

查看网卡ifconfig
如果ifconfig使用不了

yum install net-tools


CentOS7里面的网卡名称默认不再是eth0,而是ens33

我没有那么多服务器,所以我是使用的虚拟机。做到这一步,然后克隆一个一模一样的。
一个主机为:192.168.21.129
一个从机为:192.168.21.130

修改主从keepalived配置

主机

#主机
#检测脚本
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2                            #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为从
    interface ens33         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 52    # 虚拟路由编号,主从要一直
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_http_port            #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.21.133            # 定义虚拟ip(VIP),可多设,每行一个
    }
}

从机

#从机
#检测脚本
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2                            #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state BACKUP            # 指定keepalived的角色,MASTER为主,BACKUP为从
    interface ens33         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 52    # 虚拟路由编号,主从要一直
    priority 99            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_http_port            #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.21.133           # 定义虚拟ip(VIP),可多设,每行一个
    }
}

检测nginx脚本

/usr/local/src/check_nginx.sh路径创建

#!/bin/bash
#检测nginx是否启动了
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then    #如果nginx没有启动就启动nginx
      systemctl start nginx                #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              killall keepalived
      fi
fi

修改文件访问权限

chmod 775 check_nginx.sh

启动主从tomcatnginx
启动主从keepalived

systemctl start keepalived.service

重启keepalived命令

service keepalived restart

问题

如果启动http://192.168.21.133/ 发现访问不了,可能影响的原因有

  1. 默认的global_defs配置中 ,将vrrp_strict注释!
  2. 定义的virtual_ipaddress虚拟ip,要和自己本身的虚拟机ip段一样,比如:我的虚拟机ip为:
    http://192.168.21.130/http://192.168.21.129/ ; 那么我的虚拟ip 也在http://192.168.21.*/ 范围内,我刚开始配置的192.168.200.100,就一直ping不通,改成192.168.21.133,解决。
  3. virtual_router_id 默认的是51, 可以修改成52,然后重启一下看看。
  4. priority 主从的优先级不一样。

测试

现在已经能通过虚拟ip访问了, 现在直接把主机关闭。
再次访问,发现还是可以访问。说明咱们的高可用ok了。

如果发现检测nginx脚本,中的启动命令不能够直接启动Nginx,所以还要把自己服务器上的
systemctl start nginx 配置一下。

Nginx优化

Nginx默认采用多进程工作方式,Nginx启动后,会运行一个master进程和多个worker进程。其中master充当整个进程组与用户的交互接口,同时对进程进行监护,管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。worker用来处理基本的网络事件,worker之间是平等的,他们共同竞争来处理来自客户端的请求

调整worker_processes

worker 数和服务器的 cpu 数相等是最为适宜

默认:worker_processes: 1
调大:worker_processes: CPU核心数,(双核4线程,可以设置为4)

最大化worker_connections

worker_processesworker_connections 设置好合适大小,可以提示nginx处理性能,非常重要。
数字越大,能同时处理的连接越多

默认:worker_connections: 1024
调大:worker_connections: 100000,(调大到10万连接)

connections不是随便设置的,而是与两个指标有重要关联,一是内存,二是操作系统级别的“进程最大可打开文件数”。
具体可以翻阅资料查看。不再絮叨了。

启用Gzip压缩

压缩文件大小,减少了客户端http的传输带宽,因此提高了页面加载速度

为静态文件启用缓存

根据具体情况区别要不要开启

禁用access_logs

访问日志记录,它记录每个nginx请求,因此消耗了大量CPU资源,从而降低了nginx性能


文章作者: GMaya
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 GMaya !
评论
 上一篇
记一次优化我的个人博客 记一次优化我的个人博客
前言优化一下自己的博客访问速度等!不要求画面多么炫酷,但是,必须要快!快!!我的博客:https://gmaya.top欢迎访问哟! 效果话不多说,先看效果优化前:优化后: Hexo内部优化我的个人博客站点使用hexo搭建,使用next
2020-04-14
下一篇 
Linux安装Nginx Linux安装Nginx
前言上篇安装完jdk,tomcat 就在来一个Nginx。 安装Nginx进入你想要安装的目录 cd /usr/local/ 创建nginx文件夹 mkdir nginx 进入nginx目录下 cd nginx/ 下载nginx在线下载
2020-04-13
  目录