Nginx入门

1. Nginx 是什么

nginx [engine x]是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP / UDP代理服务器,最初由Igor Sysoev编写。很长一段时间以来,它一直在许多负载很重的俄罗斯网站上运行,包括 Yandex, Mail.Ru, VK和 Rambler。据Netcraft称,nginx 在2019年6月服务或代理了 26.34%最繁忙的网站.html

2. Nginx的功能

基本的HTTP服务器功能、其余HTTP服务器功能、邮件代理服务器功能nginx

2.1 基本的HTTP服务器功能

  • 提供静态和 索引 文件, 自动索引 ; 打开文件描述符缓存(暂时理解动静分离) ;
  • 经过缓存加速反向代理 ; 负载均衡和容错 ;
  • 经过缓存FastCGI, uwsgi, SCGI和 memcached 服务器加速支持 ;
  • 模块化架构。过滤器包括 gzipping,字节范围,分块响应, XSLT, SSI和图像变换过滤器。若是由代理或FastCGI / uwsgi / SCGI服务器处理,则能够并行处理单个页面中的多个SSI包含;
  • SSL和TLS SNI支持 ;
  • 支持HTTP 2.0, 具备加权和基于依赖性的优先级。

2.2 其余的HTTP服务器功能

  • 基于名称和基于IP的 负载均衡 ;
  • 保持链接 和流水线链接支持;
  • 访问日志格式, 缓冲日志写入, 快速日志轮换和 syslog日志记录 ;
  • 3xx-5xx错误代码 重定向 ;
  • 重写模块: 使用正则表达式更改URI ;
  • 根据 客户端地址执行不一样的功能 ;
  • 基于客户端IP地址, 密码(HTTP基自己份验证)和 子请求结果的访问控制 ;
  • 验证 HTTP referer ;
  • 该PUT,DELETE,MKCOL,复制和移动方法;
  • FLV 和 MP4 流媒体;
  • 响应速度限制 ;
  • 限制 来自一个地址的同时链接 或 请求的数量 ;
  • 基于IP的地理定位 ;
    A / B测试 ;
    请求镜像 ;
    嵌入式Perl ;
    njs脚本语言。

2.3 邮件代理服务器功能

  • 用户 使用外部HTTP 身份验证 服务器重定向到 IMAP 或 POP3服务器;
  • 使用外部HTTP 身份验证 服务器进行用户身份 验证,并将链接重定向到内部 SMTP服务器;
  • 认证方式:
  1. POP3:USER / PASS,APOP,AUTH LOGIN / PLAIN / CRAM-MD5;
  2. IMAP:登陆,AUTH LOGIN / PLAIN / CRAM-MD5;
  3. SMTP:AUTH LOGIN / PLAIN / CRAM-MD5;
  • SSL支持;
  • STARTTLS和STLS支持。

2.4 TCP / UDP代理服务器功能

  • TCP和UDP的通用代理 ;
  • SSL和TLS SNI支持TCP;
  • 负载均衡和容错 ;
  • 基于客户端地址的访问控制 ;
  • 根据客户端地址执行不一样的功能 ;
  • 限制 来自一个地址的同时链接数 ;
  • 访问日志格式, 缓冲日志写入, 快速日志轮换和 syslog日志记录 ;
  • 基于IP的地理定位 ;
  • A / B测试 ;
  • njs脚本语言。

3. 下载Nginx

下载地址web

我这里下载的是Windows版本.正则表达式

解压打开以下:后端

4. 使用Nginx

在Nginx目录的搜索栏,敲入cmd数组

输入命令start nginx便可启动Nginx浏览器

在浏览器访问 localhost:缓存

其余的一些经常使用命令:服务器

nginx -s stop 快速关闭
nginx -s quit 优雅关闭
nginx -s reload 从新加载配置文件
nginx -s reopen 从新打开日志文件架构

4.1 Nginx的配置文件

nginx的配置文件在/conf/nginx.conf,nginx由模块组成,这些模块由配置文件中指定的指令控制。指令分为简单指令和块指令

一个简单的指令由名称和参数组成,用空格分隔,以分号(;)结尾。

块指令与简单指令具备相同的结构,但它不是以分号结尾,而是以大括号{}包围的一组附加指令结束。若是块指令在大括号内能够有其余指令,则称为上下文(示例: events, http, server和 location)。

"#" 表示注解

4.2 使用nginx访问静态资源的例子

  1. 在/conf/ 目录下,将原来的nginx.conf文件更名为nginx.conf1,而且建立一个空白的nginx.conf文件

  2. 修改nginx.conf文件

##工做线程, 建议和cpu数量相同
worker_processes  4;

#工做模式与链接数上限
events {
#单个进程最大链接数(最大链接数=链接数*进程数)
    worker_connections  1024;
}


#设定http服务器
http {
#虚拟主机的配置
    server {
    
#对 "/" 启用反向代理
    location / {
        # 制定静态资源的位置
            root D://web_resources//static//;
        
        }
        
        location /images/ {
                root D://web_resources//static//;
            }
    
    }
    
    
    
    
    
    
}

本地图片的路径 : D:\web_resources\static\images\1.png

本地页面的路径: D:\web_resources\static\index.html

也就是所 root的路径+ location后面的路径 = 实际文件存放的文件夹路径

访问测试:

成功了有没有.

4.3 nginx设置代理服务器

nginx的一个常见用途是将其设置为代理服务器,这意味着服务器接收请求,将它们传递给代理服务器,从中检索响应,而后将它们发送给客户端。

接下来作一个简单的动静分离的例子, 静态资源访问指向本地目录,动态资源代理本地的一个8080端口的web服务.

修改nginx.conf文件

http {
    server {
    
        location / {
            
            # 代理的地址
            proxy_pass http://localhost:8080;
                
            }

        # 该参数是一个正则表达式匹配以gif,.jpg或.png结尾的URL
        #相应的请求将映射到该D://web_resources//static//; 目录。
        location ~ \.(gif|jpg|png|html)$ {
        
            root D://web_resources//static//;
            
            }
    
    
    }
    
    
    
}

访问8080端口的服务:

确实被转发过去了.

访问静态资源:

5. Nginx负载均衡

除了动静分离,Nginx的负载均衡也是经常使用的一个功能.

nginx支持如下负载平衡机制(或​​方法):

  • 循环 - 对应用程序服务器的请求以循环方式分发,
  • 最少链接 - 下一个请求被分配给活动链接数最少的服务器,
  • ip-hash - 哈希函数用于肯定应为下一个请求选择哪一个服务器(基于客户端的IP地址)。

5.1 Nginx默认负载均衡

若是未特别配置负载平衡方法,则默认为循环。

修改nginx.conf文件

http {
    
    

        #负载均衡
        upstream myapp1 {
                    server localhost:8080;
                    server localhost:8081;
                    server localhost:8082;
                        }   

    server {
        # nginx监听的端口
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
    
    
 
        
}

屡次请求页面,请求均匀的负载在每一个服务上:

输出语句的数量相同.

5.2 最小链接负载平衡

另外一个负载平衡规则是最少链接的。在某些请求须要更长时间才能完成的状况下,最小链接容许更公平地控制应用程序实例上的负载。

使用最少链接的负载平衡,nginx将尝试不会使繁忙的应用程序服务器超载请求过多,而是将新请求分发给不太繁忙的服务器。

当 least_conn指令用做服务器组配置的一部分时,将激活nginx中的最小链接负载平衡

#负载均衡
        upstream myapp1 {
        # 最少链接负载均衡指令
        least_conn;
                    server localhost:8080;
                    server localhost:8081;
                    server localhost:8082;
                        }

5.3 ip地址绑定

请注意,经过循环或最少链接的负载平衡,每一个后续客户端的请求可能会分发到不一样的服务器。没法保证同一客户端始终指向同一服务器。

若是须要将客户端绑定到特定的应用程序服务器 - 换句话说,就始终尝试选择特定服务器而言,使客户端的会话“粘滞”或“持久” - ip-hash负载平衡机制能够是用过的。

使用ip-hash,客户端的IP地址将用做散列密钥,以肯定应为客户端的请求选择服务器组中的哪一个服务器。此方法可确保来自同一客户端的请求始终定向到同一服务器,但此服务器不可用时除外。

配置方式和上面相似, 添加指令ip_hash:

#负载均衡
        upstream myapp1 {
        # 最少链接负载均衡指令
        ip_hash;
                    server localhost:8080;
                    server localhost:8081;
                    server localhost:8082;
                        }

5.4 加权负载平衡

在上面的示例中,未配置服务器权重,这意味着全部指定的服务器都被视为对特定负载平衡方法具备同等资格。

当 为服务器指定权重参数时, 权重被计入负载平衡决策的一部分。

修改配置文件:

upstream myapp1 {
                #upstream的负载均衡,weight是权重,能够根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的概率越大。
                    server localhost:8080 weight = 3;
                    server localhost:8081;
                    server localhost:8082;
    }

使用此配置,每5个新请求将分布在应用程序实例中,以下所示:3个请求将定向到8080端口,一个请求将转到8081端口,另外一个请求转到8082端口。

6. 健康检查

两个参数max_fails和fail_timeout,用于判断后端节点状态.

在fail_timeout的时间范围内链接服务器通讯失败的次数若是超过max_fail,那么服务器被断定为不可用.而且再次等待一个fail_timeout的时间,再去从新尝试请求.

fail_timeout的默认值为30s,,max_fails的默认值为1.

配置方式:

#负载均衡
        upstream myapp1 {
        
        server localhost:8080 weight=3 max_fails=10 fail_timeout=30;
        server localhost:8081;
        server localhost:8082;
                        }
相关文章
相关标签/搜索