Nginx 简介与安装

1,简介

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好.中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。
Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。
Nginx一般用户七层负载均衡,其吞吐量有一定的限制。为了提高整体的吞吐量,会在DNS和Nginx之间引入LVS(软件负载均衡器)、F5(硬负载均衡器) 可以做四层负载均衡,首先DNS解析到LVS(F5),让后LVS(F5)转发给Nginx,在有Nginx转发给真实的服务器

2,安装(windows)

解压之后,双击nginx.exe,看到一闪而过,浏览器输入127.0.0.1,出现以下界面代表安装成功

linux 安装:https://www.cnblogs.com/pickKnow/p/11224225.html

3,Ngnix 相关命令

    验证配置是否正确: nginx -t

    查看Nginx的版本号:nginx -V

    启动Nginx:start nginx

    快速停止或关闭Nginx:nginx -s stop

    正常停止或关闭Nginx:nginx -s quit

    配置文件修改重装载命令:nginx -s reload

 

4,Nginx应用场景

1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。

2、虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。

3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。

4、Nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

 

 

静态资源:Ngnix 目录下的tml 目录存放了静态资源

 

虚拟主机配置:

1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站

2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台

3、基于ip的虚拟主机

 

基于域名的虚拟主机:本地模拟

    step1:C:\Windows\System32\drivers\etc 下的host 文件,添加已下:

        127.0.0.1 www.baiyue.com
        127.0.0.1 bbs.baiyue.com

    step2:修改nginx-1.15.0\conf 文件夹下的nginx.conf 文件:

   意味着:当客户端访问Nginx的时候,拦截所有的www.baiyue.com 的域名,监听的端口号为80,最终查找路径式views/baiyue/index.html

    # 添加到虚拟主机www.baiyue.com
    server {
       listen       80;
       server_name  www.baiyue.com;

       location / {
           root   views/baiyue;
           index  index.html;
       }
    }

    # 添加到虚拟主机bbs.baiyue.com
    server {
       listen       80;
       server_name  bbs.baiyue.com;

       location / {
           root   views/bbs;
           index  index.html;
       }
    }

访问:www.baiyue.com   和 bbs.baiyue.com

基于端口的虚拟主机:

   step1:C:\Windows\System32\drivers\etc 下的host 文件,添加已下:

     127.0.0.1 8080.baiyue.com
     127.0.0.1 8081.baiyue.com

    step2:修改nginx-1.15.0\conf 文件夹下的nginx.conf 文件:

    server {
       listen       8080;
       server_name  8080.baiyue.com;

       location / {
           root   views/baiyue;
           index  index.html;
       }
    }

    # 添加到虚拟主机www.tencent.com
    server {
       listen       8081;
       server_name  8081.baiyue.com;

       location / {
           root   views/bbs;
           index  index.html;
       }
    }

访问:www.baiyue.com:8080   和 www.baiyue.com:8081

 

反向代理:

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
简单的说就是,Ngnix 作为反向代理服务器,接收来自客户端的请求,分发给内部服务器,接收到结果之后,再返回给客户端。

 模拟:启动本地springboot 项目:

启动完成之后:可以访问http://127.0.0.1:8080/index,页面出现自己设计的返回页面

配置本地host:,将之前的注释掉,以免影响测试

127.0.0.1 www.baiyue.com
#127.0.0.1 bbs.baiyue.com
#127.0.0.1 8080.baiyue.com
#127.0.0.1 8081.baiyue.com

配置nginx.conf 反向代理:主要的配置proxy_pass 当监听到域名式www.baiyue.com 端口8080 时,分发到内部的实际服务器地址127.0.0.1:8080,就能返回到本地项目访问的页面了

    server {
       listen       8080;
       server_name  www.baiyue.com;

       location / {
           proxy_pass http://127.0.0.1:8080;
           index  index.html index.htm;
       }
    }

location的语法
已=开头表示精确匹配
如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。

^~ 开头表示uri以某个常规字符串开头,不是正则匹配

~ 开头表示区分大小写的正则匹配;

~* 开头表示不区分大小写的正则匹配

/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到

 

负载均衡:

load Balance,是指在高并发情况下,可以使用Nginx 实现分流,将请求分发到不同的服务器,减小单个服务器的压力。

在Nginx 配置负载均衡就是要配置Upstream server(上游服务器,就是Ngnix最后真实访问的服务器),因为会配置集群,所以所多台upstream server

配置多台upstrem server 的好处,或者说Nginx 负载均衡的好处:

     1,实现分流,减少单个服务器压力,在高并发,大流量的情况下的高访问业务

     2,集群之后,Nginx 实现故障转移,不让服务宕机,http 请求,若一台服务器发生故障,可以直接转移到下一台服务器,以便请求继续

 

模拟负载均衡,本地开启俩两个服务,端口为8080,8082,配置Nginx 负载均衡,让其分发到不到的服务上:

C:\Windows\System32\drivers\etc 下的host 文件 ,继续配置:127.0.0.1 www.baiyue.com

配置nginx.conf 负载均衡,主要式配置上游服务器,和proxy_pass

    # 配置上游服务器
    upstream  backServer{
        server 127.0.0.1:8080;
        server 127.0.0.1:8082;
    }
    
    server {
       listen       80;
       server_name  www.baiyue.com;

       location / {
           proxy_pass http://backServer;
           index  index.html index.htm;
       }
    }

这时候,访问http://www.baiyue.com/index 地址的时候,Nginx 会采用轮询 机制,轮流分发到不同的额服务器上,所以点击一次,显示的是8080 服务上的内容,再点击,显示的是8082 服务的内容

 

 Nginx 负载均衡包含的算法:

1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。
2、weight(轮询权值)
weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

权重越高,分发到这台服务器的机会(次数)就越高

  # 配置上游服务器
    upstream  backServer{
        server 127.0.0.1:8080 weight=1;
        server 127.0.0.1:8082 weight=2;
    }
    
    server {
       listen       80;
       server_name  www.baiyue.com;

       location / {
           proxy_pass http://backServer;
           index  index.html index.htm;
       }
    }

设置之后,当Nginx 接收到请求之后,分配给8082 所在的服务器要多一点

3、ip_hash
每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。俗称IP绑定。

访问的客户端和上游服务器进行绑定,以后每次这个客户端发起的请求,都交给这台服务器来处理

    # 配置上游服务器
    upstream  backServer{
        server 127.0.0.1:8080;
        server 127.0.0.1:8082;
        ip_hash;
    }
    
    server {
       listen       80;
       server_name  www.baiyue.com;

       location / {
           proxy_pass http://backServer;
           index  index.html index.htm;
       }
    }

配置ip_hash; 之后,本地测试每次访问都是访问同一个服务,因为已经进行了ip绑定

4、fair(第三方)
比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。

5、url_hash(第三方)
按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。

 

5 配置Nginx 故障转移

  模拟,当本地两台服务有一台挂了之后,会根据你设置的等待时候,在几秒之后分发给下一台服务器,如果不设置时间,他会一直等待

    # 配置上游服务器
    upstream  backServer{
        server 127.0.0.1:8080;
        server 127.0.0.1:8082;
    }
    
    server {
       listen       80;
       server_name  www.baiyue.com;

       location / {
           proxy_pass http://backServer;
            ###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间
            proxy_connect_timeout 3s;
            ###nginx发送给上游服务器(真实访问的服务器)超时时间
            proxy_send_timeout 3s;
            ### nginx接受上游服务器(真实访问的服务器)超时时间
            proxy_read_timeout 3s;
           index  index.html index.htm;
       }
    }

 

posted @ 2019-07-18 12:13  Chris,Cai  阅读(255)  评论(0编辑  收藏  举报