Nginx学习笔记(内容来自B站尚硅谷nginx课程)

  • 基本概念

    • nginx是什么,做什么事情

      • Nginx 是一个高性能的 HTTP 和反向代理 Web服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 由俄罗斯的程序员伊戈尔·赛索耶夫开发,以其轻量级、内存占用少和并发能力强而闻名。在 Linux 系统下,Nginx 使用 epoll 事件模型,这使得它在 Linux 平台上的效率非常高
      • Nginx作为web服务器
        • Nginx 可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、PHP等。的那丝不支持java。Java程序只能通过tomcat配合完成。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。
    • 反向代理

      • 正向代理

        • 如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
        • 正向代理是一种位于客户端和原始服务器之间的服务器,其主要功能是帮助客户端访问通常无法直接访问的资源。在正向代理的架构中,客户端首先向代理服务器发送请求,并指定目标为原始服务器。然后,代理服务器向原始服务器转交请求,并获取响应。最后,代理服务器将获得的响应数据返回给客户端。(在客户端(浏览器)配置代理服务器,通过代理服务器进行访问)正向代理的典型用途包括:访问被限制的内容。例如,帮助用户在防火墙内访问互联网。突破网络审查。例如,帮助用户访问受到地理限制或内容审查的网站。提高网络性能。例如,通过缓存技术减少数据传输延迟和带宽使用。使用正向代理时,客户端需要进行一些特别的设置,例如配置代理服务的地址、端口、账号密码等。正向代理对服务端是透明的,即服务端通常不知道请求实际上是由代理服务器发出的。
      • 反向代理
        • 反向代理,其实客户端对代理是无感的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器ip地址
      • 正向代理代理的是客户端,隐藏了客户端的真正ip,防止黑客攻击,反向代理则代理的是服务端
    • 负载均衡

      • 客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的部端增长,访问量和数据量飞速增长,以及系统业务的复杂度也增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?
      • 单个服务器解决不了,我们可以增加服务器的数量,然后将请求分发到各个服务器上,将原先集中到单个服务器的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们说的负载均衡。
    • 动静分离

      • 为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
  • nginx命令和配置文件
    • nginx常用命令(Linux环境下)
      • 使用nginx操作命令前提条件:必须进入nginx的目录
      • 1.查看版本号  ./nginx -v
      • 2.启动nginx   ./nginx
      • 3.关闭nginx  ./nginx -s stop
      • 4.重新加载nginx ./nginx -s reload
      • 5.查看nginx当前状态 ps -ef | grep nginx
    • nginx配置文件
      • nginx配置文件在 */usr/local/nginx/conf/nginx.conf
      • 配置文件组成部分,三部分
        • 全局块
          • 从配置文件开始到events块之间的内容都是全局块,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。
          • 比如下面第一行配置的worker process。这是nginx服务器并发处理服务的关键配置,worker process值越大,可以支持的并发处理量也越多,但是会收到硬件、软件等设备的制约。
        • events块
          • events块涉及的指令主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个worker process 可以同时支持的最大连接数等。
          • 上图例子就表示每个worker process支持的最大连接数为1024。这部分的配置对nginx的性能影响较大,在实际中应该灵活配置。
        • http块
          • http块是nginx服务配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http块也可以包括http全局块、server块。
          • 1.http全局块
            • http全局块配置的指令包括文件引入、MIME-TYPE定义、连接超时间、单链接请求数上限等。见下图
          • server块
            • 这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
            • 每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。
            • 而每个server块也分为全局server块,以及可以同时包含多个location块。
            • 1.全局server块 最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置
            • 2.location块 一个server块可以配置多个location块。这个块的主要作用是基于nginx服务器接收到的请求字符串,对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行
            • # 表示如果请求路径是/就是用这个location块进行处理
              location / {
                          root   html;
                          index  index.html index.htm;
                      }

  • location 指令说明:
    • 该指令用于匹配URL语法如下:
    • 1.=  :用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
    • 2 ~ : 用于表示uri包含正则表达式,并且区分大小写
    • 3.~* :用于表示uri包含正则表达式并且不区分大小写
    • 4.^~ : 用于不含正则表达式的uri之前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
    • 注意:如果uri包含正则表达式,则必须要有~或~*标识。
    • 在Nginx中,location块用于定义如何处理特定的请求URI。location块里可以使用的指令有很多,以下是一些常用的指令及其作用:

      root:设置请求URI对应的文件所在的根目录路径。

      alias:为请求URI指定一个别名,使得Nginx可以在不同的文件系统路径下寻找资源。

      index:设置当请求URI为目录时,默认显示的文件列表。

      try_files:按顺序检查文件或者目录是否存在,并返回第一个找到的文件或者目录。

      rewrite:用于URL重写。

      proxy_pass:将请求转发到后端服务器。

      fastcgi_pass:将请求转发给FastCGI应用(例如PHP)。

      以下是一个简单的location块配置实例:

      server {
          listen 80;
          server_name example.com;
       
          root /var/www/html;
       
          location / {
              index index.html index.htm;
          }
       
          location /images/ {
              root /var/www/images;
          }
       
          location ~* \.(jpg|jpeg|png)$ {
              root /var/www/images;
              expires 30d;
          }
       
          location /api/ {
              proxy_pass http://backend_server;
          }
       
          location /phpmyadmin/ {
              alias /usr/share/phpmyadmin/;
          }
       
          location /download/ {
              try_files $uri $uri/ =404;
          }
       
          location /oldsite.com/ {
              rewrite ^/oldsite.com/(.*)$ /newsite.com/$1 permanent;
          }
      }

      在这个配置中,我们定义了几个location块,它们分别处理不同类型的请求URI。例如,第一个location块处理根目录的请求,第二个location块处理/images/路径下的图片请求,并且使用expires头设置了缓存时间。第三个location块将对PHPMyAdmin的请求指向到文件系统中的相应目录。第四个location块尝试为下载请求提供文件,如果文件不存在则返回404错误。最后一个location块将旧站点的请求重定向到新站点。

 简单负载均衡配置示例 

 nginx负载均衡分配策略:

        1.轮询(默认)

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

        2.weight

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

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

        upstream sever_pool{

                server 192.168.5.21 weight=10;

                server 192.168.5.22 weight=10;

        }

        3.IP hash

        每个请求按ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session共享问题,例如(让你的用户指定访问某一个服务器)

        upstream sever_pool{

                ip_hash

                server 192.168.5.21:80

                server 192.168.5.22:80

        }

        4.fair(第三方)

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

         upstream sever_pool{

                server 192.168.5.21:80

                server 192.168.5.22:80

                fair

        }

动静分离配置

nginx东京分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用nginx处理静态页面,tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另一种方法就是动态跟静态文件混合在一起发布,通过nginx来分开。

通过location只当不同的域名实现不同的请求转发,通过expires参数设置,可以设置浏览器缓存过期时间,减少与服务器之间请求和流量。具体expires定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用expires来缓存),我这里设置3d,表示在这3天之内访问这个url,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200

location /www/ {

        root  /data/;

        index  index.html  index.htm

}

location /image/ {

        root  /data/;

        autoindex on; #配置这个会列出当前文件夹中的内容

}

配置高可用集群

1.什么是nginx高可用

        1)需要两台nginx服务器

        2)需要keepalived

        3)需要虚拟IP

2.配置高可用的准备工作

        1)需要两台服务器

        2)在两台服务器安装nginx

        3)在两台服务器安装keepalived

        安装之后,在etc里面生成目录keepalived,有文件keepalived.conf

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

global_defs {

        notification_email{

                acassen@firewall.loc

                failover@firewall.loc

                sysadmin@firewall.loc

        }

        notifycation_email_from Alexandre.Cassen@firewall.loc

        smtp_server 192.168.17.129

        stmp_connect_timeout 30

        router_id LVS_DEVEL

}

vrrp_script chk_http_post{

        script  "/user/local/srcnginx_check.sh"

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

        weight  2

}

vrrp instance VI1{
state MASTER  #备份服务器上将 MASTER改为BACKUP

interface ens33//网卡

virtual router id 51  #主、备机的virtual router id必须相同

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

advert int 1

authentication {

        auth type PAss

        auth pass 1111
 }

  virtual_ipaddress{

       192.168.17.50     //VRRP H拟地址

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值