nginx光速入门到进阶

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 1、nginx基本概念 (1)nginx是什么,做什么事 高性能、高并发(高达50000)、占有内存少、性能优化

 

1、nginx基本概念

   (1)nginx是什么,做什么事

高性能、高并发(高达50000)、占有内存少、性能优化

2、nginx安装、常用命令和配置文件

   (1)在linux系统中安装nginx

/usr/src:系统级的源码目录。

/usr/local/src:用户级的源码目录

#安装相关依赖,安装编译工具及库文件



yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
#
#安装 PCRE依赖,PCRE 作用是让 Nginx 支持 Rewrite 功能。
    wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
#解压安装包:
    tar zxvf pcre-8.35.tar.gz
#进入安装包目录
[root@bogon src]# cd pcre-8.35
#安装
[root@bogon pcre-8.35]# ./configure
[root@bogon pcre-8.35]# make && make install
5、查看pcre版本
[root@bogon pcre-8.35]# pcre-config --version

image.gif

安装 Nginx



1、下载 Nginx,下载地址:https://nginx.org/en/download.html
[root@bogon src]# cd /usr/local/src/
[root@bogon src]# wget http://nginx.org/download/nginx-1.12.2.tar.gz
2、解压安装包
[root@bogon src]# tar zxvf nginx-1.12.2.tar.gz
3、进入安装包目录
[root@bogon src]# cd nginx-1.12.2
4、编译安装(可以指定安装路径,也可以使用默认的)
[root@bogon nginx-1.6.2]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
[root@bogon nginx-1.6.2]# make
[root@bogon nginx-1.6.2]# make install
5、查看nginx版本
[root@bogon nginx-1.6.2]# /usr/local/webserver/nginx/sbin/nginx -v

image.gif

6、安装成功之后,在 /usr/local/nginx/sbin路径下有启动脚本

[root@localhost nginx-1.12.2]# cd /usr/local/nginx/
[root@localhost nginx]# ls
conf  html  logs  sbin
[root@localhost nginx]# ^C
[root@localhost nginx]# cd sbin/
[root@localhost sbin]# ls
nginx  nginx.old
[root@localhost sbin]#
#查看开放的端口号
firewall-cmd --list-all
#设置开放的服务和端口号
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=80/tcp --permanent

image.gif

image.gif

(2)nginx常用命令

image.gif

(3)nginx配置文件

image.gif

nginx配置文件有三部分组成

1.全局块

从配置文件开始到events块之间的内容,

主要会设置一些影响nginx服务器整体运行的配置指令:


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


image.gif

这是nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。

2events块

image.gif

events块涉及的指令主要影响nginx服务器与用户的网络连接

比如worker_connections 1024;    支持的最大连接数。


3.http块

nginx服务配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。


   

image.gif

注意:http块也可以包括http全局块、server块

配置正反向代理

正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。

image.gif

反向代理:客户端只需要将请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据返回给客户端。

   

image.gif

3、nginx配置实例1-反向代理

1、实现效果

(1)打开浏览器,在浏览器地址栏输入地址xxxxxx(自己的ip),跳转到linux系统tomcat主页面中

2、准备工作



(1)在Linux系统中安装tomcat
wget http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.tar.gz
然后解压tar -zxvf +压缩包名
启动tomcat服务器(在Linux系统中,tomcat使用默认端口8080)
开放对外访问的端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd-reload    重启防火墙
查看已经开放的端口号
firewall-cmd --list-all

image.gif

启动tomcat服务器

image.gif

查看启动后的日志文件

image.gif

在浏览器访问tomcat服务器

image.gif

反向代理案例一:

访问过程的分析

image.gif

具体配置

    1. 在Windows系统的host文件进行域名和ip对应关系的配置

    image.gif

      1. 在最后面加上 192.168.171.131    www.123.com(根据自己服务器的ip来设置)

           2.在nginx进行请求转发的配置(反向代理配置)/usr/local/nginx/conf/nging.conf

      image.gif

      重新启动nginx(我这里是将它停止在启动)

      image.gif

      输入http://www.123.com/ 访问,注意不用添加端口号,默认使用80端口号访问nginx,然后跳转到tomcat服务器,实现反向代理的效果。

      image.gif

      反向代理案例二:

      目标:

      使用nginx反向代理,根据访问路径跳转到不同端口的服务中,nginx监听端口为9001

      访问http://192.168.171.131:9001/edu/ 直接跳转到127.0.0.1:8080

      访问http://192.168.171.131:9001/vod/ 直接跳转到127.0.0.1:8081

      2、准备工作

      (1)准备两个tomcat服务器,一个8080端口,一个8081端口

      (2)创建文件夹和测试页面

      3、具体配置

      修改nginx配置文件如下图:


      image.gif

      (2)开放对外访问的端口号 9001 8080 8081

      关闭nginx在开启

      image.gif

      4.测试

      image.gif

      image.gif

      以上案例:

      客户端将请求发送到nginx反向代理服务器,nginx反向代理将客户端的请求发送到目标服务器获取数据,目标服务器回应再转发回给代理服务器再转发到客户端。

      location指令说明:

      该指令用于匹配URL。


      image.gif

      3、nginx负载均衡配置

      单个服务器解决不了了,我们增加服务器的数量,然后将请求分发到服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

      image.gif

      nginx配置实例2-负载均衡

      1.实现效果

      (1)浏览器地址栏输入地址http://192.168.171.131:9001/edu/a.html,负载均衡效果,平均8080和8081端口中

      2.准备工作

      (1)准备两台tomcat服务器,一台8080,一台8081

      (2)在两台tomcat里面webapps目录中,创建名称是edu文件夹,在edu文件中创建页面a.html用于测试。

      3.在nginx的配置文件中进行负载均衡的配置(http块添加修改)


      image.gif

      image.gif

      测试——刷新一次就会访问不同服务器(8081——8080)

      image.gif

      4、nginx分配服务器策略

      1).轮询(默认)

      每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

      2)、weight

      weight代表权重,默认为1,权重越高被分配的客户端越多。

      指定轮询几率,weight和访问率成正比,用于后端服务器性能不均的情况。


      image.gif

      3)、ip_hash

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

      image.gif

      4、fair(第三方)

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

      image.gif

      nginx动静分离

      目的是加快网站的解析速度。可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

      image.gif

      1.准备工作

      1)在Linux系统中准备静态资源,用于进行访问

      image.gif

      2、修改nginx配置文件

      image.gif

      重启nginx

      3.测试:

      (1)浏览器中输入地址

      image.gif

      添加端口、访问名字

      image.gif

      6、nginx配置高可用集群

      image.gif

      配置高可用的准备工作:

      (1)需要两台服务器 192.168.171.131和192.168.171.129

      (2)在两台服务器安装nginx

      (3)在两台服务器安装keepalived

      使用yum命令进行安装

      yum install keepalived -y


      image.gif

      #安装之后再etc里面生成目录keepalived。

      image.gif

      完成高可用配置(主从配置)

      (1)/etc/keepalived/keepalivec.conf配置文件

      主服务

      image.gif

      image.gif

      #可以直接复制替换源文件内容

      global_defs {    #全局定义

      notification_email {

      acassen@firewall.loc

      failover@firewall.loc

      sysadmin@firewall.loc

      }

      notification_email_from Alexandre.Cassen@firewall.loc

      smtp_server 192.168.171.131    #自己服务器IP

      smtp_connect_timeout 30

      router_id LVS_DEVEL    #唯一不重复

      }

      #脚本配置

      vrrp_script chk_http_port {

      script "/usr/local/nginx/nginx_check.sh"    #检测脚本的路径及名称

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

      weight -20    #权重。设置当前服务器的权重,此处的配置说明:当前服务器如果宕机了,那么该服务器的权重降低20

      }

      #虚拟IP配置

      vrrp_instance VI_1 {

      state BACKUP     #主服务器写MASTER、备份服务器写BACKUP

      interface ens33 #网卡

      virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同

      priority 100     #主、备机取不同的优先级,主机值较大,备份机值较小

      advert_int 1    #时间间隔。每隔多少秒发送一次心跳检测服务器是否还活着,默认1秒发送一次心跳

      authentication {

      auth_type PASS

      auth_pass 1111

      }

      virtual_ipaddress {

      192.168.171.50 // VRRP H 虚拟IP地址,网段要和linux的网段一致,可以绑定多个虚拟ip

      } }


      从服务

      image.gif

      可以直接复制替换源文件

      global_defs {    #全局定义
      notification_email {
      acassen@firewall.loc
      failover@firewall.loc
      sysadmin@firewall.loc
      }
      notification_email_from Alexandre.Cassen@firewall.loc
      smtp_server 192.168.171.129    #自己服务器IP
      smtp_connect_timeout 30
      router_id LVS_DEVEL    #唯一不重复
      }
      #脚本配置
      vrrp_script chk_http_port {
      script "/usr/local/nginx/nginx_check.sh"    #检测脚本的路径及名称
      interval 2 #(检测脚本执行的间隔)
      weight -20    #权重。设置当前服务器的权重,此处的配置说明:当前服务器如果宕机了,那么该服务器的权重降低20
      }
      #虚拟IP配置
      vrrp_instance VI_1 {
      state BACKUP     #主服务器写MASTER、备份服务器写BACKUP
      interface ens33 #网卡
      virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
      priority 90     #主、备机取不同的优先级,主机值较大,备份机值较小
      advert_int 1    #时间间隔。每隔多少秒发送一次心跳检测服务器是否还活着,默认1秒发送一次心跳
      authentication {
      auth_type PASS
      auth_pass 1111
      }
      virtual_ipaddress {
      192.168.171.50 // VRRP H 虚拟IP地址,网段要和linux的网段一致,可以绑定多个虚拟ip
      } }

      image.gif

      (2)在/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

      image.gif

      启动主从服务的nginx和keepalived服务

      [root@localhost sbin]# ./nginx -s stop
      [root@localhost sbin]# ./nginx
      [root@localhost sbin]# systemctl start keepalived.service
      [root@localhost sbin]# ps -ef |grep keepalived
      root     110602      1  0 15:46 ?        00:00:00 /usr/sbin/keepalived -D
      root     110603 110602  0 15:46 ?        00:00:00 /usr/sbin/keepalived -D
      root     110604 110602  0 15:46 ?        00:00:00 /usr/sbin/keepalived -D
      root     110657   7510  0 15:50 pts/0    00:00:00 grep --color=auto keepalived
      [root@localhost sbin]#

      image.gif

      最终测试

      1.在浏览器地址栏输入虚拟IP地址 :192.168.171.50

      2.关掉主服务器的nginx服务和keeplived服务,再次访问——成功。

      image.gif

      nginx 原理

        1. master&worker——(管理和工作)

        image.gif

        image.gif

        2、worker如何进行工作的?

        image.gif

        3.一个master和多个woker有什么好处?

        1)可以使用nginx -s reload 热部署,利用nginx进行热部署操作

        2)每个woker是独立的进程,如果有其中一个woker出现问题,其他worker独立的,

        继续进行争抢,实现请求过程,不会造成服务中断。

        4、需要设置多少个worker

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

        5、连接数worker_connection

        第一个:发送请求,占用了worker的几个连接数?

        2或4个

        第二个:nginx有一个master,有四个woker,每个woker支持最大的连接数据1024,支持的最大并发数是多少?

        公式:

        image.gif微信公众号:黑马金牌编程

        相关实践学习
        SLB负载均衡实践
        本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
        负载均衡入门与产品使用指南
        负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
        相关文章
        |
        6月前
        |
        存储 缓存 负载均衡
        Nginx入门笔记
        Nginx入门笔记
        204 0
        |
        29天前
        |
        缓存 负载均衡 安全
        Nginx常用基本配置总结:从入门到实战的全方位指南
        Nginx常用基本配置总结:从入门到实战的全方位指南
        238 0
        |
        1月前
        |
        负载均衡 算法 应用服务中间件
        Nginx入门 -- 理解 Nginx 的请求处理流程
        Nginx入门 -- 理解 Nginx 的请求处理流程
        81 0
        |
        1月前
        |
        安全 应用服务中间件 网络安全
        Nginx入门 -- 了解Nginx中证书配置
        Nginx入门 -- 了解Nginx中证书配置
        40 0
        |
        1月前
        |
        负载均衡 监控 算法
        Nginx入门 -- 深入了解Nginx负载均衡
        Nginx入门 -- 深入了解Nginx负载均衡
        18 0
        |
        1月前
        |
        缓存 负载均衡 应用服务中间件
        Nginx入门 -- Nginx 配置详解
        Nginx入门 -- Nginx 配置详解
        226 0
        |
        1月前
        |
        存储 缓存 应用服务中间件
        Nginx入门 -- 基本数据结构中之ngx_hash_t
        Nginx入门 -- 基本数据结构中之ngx_hash_t
        36 0
        |
        1月前
        |
        存储 缓存 应用服务中间件
        Nginx入门 -- 基本数据结构中之ngx_list_t,ngx_queue_t
        Nginx入门 -- 基本数据结构中之ngx_list_t,ngx_queue_t
        21 0
        |
        1月前
        |
        存储 应用服务中间件 nginx
        Nginx入门 -- 基本数据结构中之ngx_str_t,ngx_array_t
        Nginx入门 -- 基本数据结构中之ngx_str_t,ngx_array_t
        61 0
        |
        1月前
        |
        前端开发 应用服务中间件 nginx
        Nginx入门 -- 理解 Nginx 的基本概念:Pipe 和 Lingering Close
        Nginx入门 -- 理解 Nginx 的基本概念:Pipe 和 Lingering Close
        53 0