深入理解NGINX(Nginx学习进阶)

深入理解NGINX(Nginx学习进阶)(1)

本文将为您详细介绍如何在 CentOS 系统下部署 Nginx 项目。

本文在示例步骤中的软件版本如下,在实际操作时,请您以实际软件版本为准。

  • 操作系统:CentOS 7.5
  • nginx 版本:Nginx 1.12.2
安装 Nginx

# 安装 n=Nginx: yum -y install nginx # 查看 Nginx 版本 nginx -v # 查看 Nginx 安装目录 rpm -ql nginx # 启动 Nginx service nginx start

按照上面步骤按照好nginx后,访问服务器的公网 IP 地址,出现如下页面则表示 Nginx 部署完成:

深入理解NGINX(Nginx学习进阶)(2)

Nginx 的默认根目录 root 是/usr/share/nginx/html,直接修改 html 下的 index.html 静态页面,用来标识这个页面的特殊性。

vim /usr/share/nginx/html/index.html # 在页面中输入 Hello nginx , This is rs-1! URL is index.html

负载均衡(原“应用型负载均衡”)可以根据后端服务器的路径来进行请求转发,在/image路径下部署静态页面,相关命令如下:

# 新建目录 image mkdir /usr/share/nginx/html/image cd /usr/share/nginx/html/image vim index.html # 在页面中输入 Hello nginx , This is rs-1! URL is image/index.html

注意:

Nginx 的默认端口是80,如果想修改端口请修改配置文件并重启 Nginx。

验证 Nginx 服务

访问服务器的公网 IP 路径,如果可以显示出已部署好的静态页面,则证明 Nginx 部署成功。

rs-1 的 index.html 页面:

深入理解NGINX(Nginx学习进阶)(3)

rs-1 的 /image/index.html 页面:

深入理解NGINX(Nginx学习进阶)(4)

深入理解NGINX(Nginx学习进阶)(5)

Nginx文件结构

首先看一下nginx配置文件结构

... #全局块 events { #events块 ... } http #http块 { ... #http全局块 server #server块 { ... #server全局块 location [PATTERN] #location块 { ... } location [PATTERN] { ... } } server { ... } ... #http全局块 }

  • 1、全局块:配置影响nginx全局的指令。
  • 一般有:运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

  • 2、events块:配置影响nginx服务器或与用户的网络连接。
  • 有:每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

  • 3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  • 4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  • 5、location块:配置请求的路由,以及各种页面的处理情况。
  • 下图具体标示具体的文件结构

    深入理解NGINX(Nginx学习进阶)(6)

    Demo

    下面给大家上一个配置文件,作为理解。

    深入理解NGINX(Nginx学习进阶)(7)

    深入理解NGINX(Nginx学习进阶)(8)

    上面是nginx的基本配置,需要注意的有以下几点:

    1、几个常见配置项:

    • 1.$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;
    • 2.$remote_user :用来记录客户端用户名称;
    • 3.$time_local : 用来记录访问时间与时区;
    • 4.$request : 用来记录请求的url与http协议;
    • 5.$status : 用来记录请求状态;成功是200;
    • 6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
    • 7.$http_referer :用来记录从那个页面链接访问过来的;
    • 8.$http_user_agent :记录客户端浏览器的相关信息;

    2、惊群现象:

    一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。

    3、每个指令必须有分号结束。

    深入理解NGINX(Nginx学习进阶)(9)

    前言

    在多个应用实例间做负载均衡是一个被广泛使用的技术,用于优化资源效率,最大化吞吐量,减少延迟和容错。

    nginx可以作为一个非常高效的HTTP负载均衡器来分发请求到多个应用服务器,并提高web应用的性能,可扩展性和可靠性。

    1、负载均衡方法

    nginx支持以下负载均衡机制(或者方法):

    1. round-robin/轮询: 到应用服务器的请求以round-robin/轮询的方式被分发;
    2. least-connected/最少连接:下一个请求将被分派到活动连接数量最少的服务器;
    3. ip-hash/IP散列: 使用hash算法来决定下一个请求要选择哪个服务器(基于客户端IP地址);
    1.1、默认负载均衡配置(轮询)

    nginx中最简单的负载均衡配置看上去大体如下:

    http {

    upstream myapp1 {

    server srv1.example.com;

    server srv2.example.com;

    server srv3.example.com;

    }

    server {

    listen 80;

    location / {

    proxy_pass http://myapp1;

    }

    }

    }

    在上面的例子中, 同一个应用有3个实例分别运行在srv1、srv2、srv3。当没有特别指定负载均衡方法时, 默认为round-robin/轮询。所有请求被代理到服务器集群myapp1, 然后nginx实现HTTP负载均衡来分发请求。

    nginx中反向代理的实现包括HTTP, HTTPS, FastCGI, uwsgi, SCGI, 和 memcached的负载均衡。

    要配置负载均衡用HTTPS替代HTTP,只要使用”https”作为协议即可。

    为FastCGI, uwsgi, SCGI, 或 memcached 搭建负载均衡时, 只要使用相应的fastcgi_pass, uwsgi_pass, scgi_pass, 和 memcached_pass指令。

    1.2、最少连接负载均衡(least-connected/最少连接)

    另一个负载均衡方式是least-connected/最少连接。当某些请求需要更长时间来完成时,最少连接可以更公平的控制应用实例上的负载。

    使用最少连接负载均衡时,nginx试图尽量不给已经很忙的应用服务器增加过度的请求, 而是分配新请求到不是那么忙的服务器实例。

    nginx中通过在服务器集群配置中使用least_conn指令来激活最少连接负载均衡方法:

    upstream myapp1 {

    least_conn;

    server srv1.example.com;

    server srv2.example.com;

    server srv3.example.com;

    }

    1.3、会话持久化(ip-hash)

    请注意,在轮询最少连接负载均衡方法中,每个客户端的后续请求被分派到不同的服务器。对于同一个客户端没有任何方式保证发送给同一个服务器。

    如果需要将一个客户端绑定给某个特定的应用服务器——用另一句话说,将客户端会话”沾住”或者”持久化”,以便总是能选择特定服务器,那么可以使用ip-hash负载均衡机制。

    使用ip-hash时,客户端IP地址作为hash key使用,用来决策选择服务器集群中的哪个服务器来处理这个客户端的请求。这个方法保证从同一个客户端发起的请求总是定向到同一台服务器,除非服务器不可用。

    要配置使用ip-hash负载均衡,只要在服务器集群配置中使用ip_hash指令:

    upstream myapp1 {

    ip_hash;

    server srv1.example.com;

    server srv2.example.com;

    server srv3.example.com;

    }

    2、带权重的负载均衡

    可以通过使用服务器权重来影响nginx的负载均衡算法。

    在上面的例子中,服务器权重没有配置,这意味着所有列出的服务器被认为对于具体的负载均衡方法是完全平等的。

    特别是轮询,分派给服务器的请求被认为是大体相当的。假设有足够的请求,并且这些请求被以同样的方式处理而且完成的足够快。

    当服务器被指定weight/权重参数时,负载均衡决策会考虑权重。如下所示

    upstream myapp1 {

    server srv1.example.com weight=3;

    server srv2.example.com;

    server srv3.example.com;

    }

    在上面的这个配置中,假设有5个新的请求。那么每5个新请求将会如下的在应用实例中分派:

    3个请求分派去srv1,一个去srv2,另外一个去srv3.

    在最近的nginx版本中,可以类似的在最少连接和IP哈希负载均衡中使用权重。

    ,

    免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

      分享
      投诉
      首页