Nginx学习笔记--nginx基本操作

nginx是一个反向代理服务器,可以利用它所许多事情,最常见的就是利用nginx做服务器端的负载均衡,访问认证,限流,静态数据缓存等。下面看一下nginx的基本操作。

基本的虚拟主机

nginx既然是一个方向的代理服务器,那么其访问代理配置方式是必须要了解的。在nginx.conf配置文件中的http节点中,进行配置。

基于ip的虚拟主机

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
   server{
        listen 80;
        server_name 192.168.0.15;
        location /{
            root html;#文件夹
            index index.html;#文件
        }
        location /status{
            stub_status;
        }
}


关键的信息是server节点,这里面配置了监听访问80端口且访问reffer是192.168.0.15的请求,如果是,就根据location的配置匹配对应的路径映射,原理上类似于路由的功能。其中location的配置和匹配方式有一套完整规范。规范如下。

location配置与匹配方式

按优先级先后顺序,如下

  1. = /abc/index.html,这种方式是一般精准匹配,匹配指定的路径这种匹配方式的优先级最高,配置方式如下

    location /abc/index.html{
        
    }
    
  2. ^~ /article/ ,这种配置方式叫前缀匹配,特点是使用 ^~开头,标明使用前缀匹配,这里能够匹配uri以article开头的路径,例如/article/ab、/article/aab、/article/cd,配置方式如下,优先级第二

    location ^~ /article/{
        
    }
    
  3. ~ \.(js)$,这种方式称为正则匹配,特点是以~开头标明配置,配置方式如下,下面表示匹配.js结尾的访问请求,表示不区分大小写的匹配,~*开头表示区分大小写

    location ~ \.(js)${
    }
    
  4. /abc属于前缀匹配的一种,不过优先级比正则匹配要低一点。

  5. /表示通用匹配能够匹配任务路径,但是优先级最低,如果有其他规则匹配,就不会使用/进行匹配,配置方式如下

    location /{
        
    }
    

基于端口的虚拟主机

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
   server{
        listen 8080;
        server_name 192.168.0.15;
        location /{
            root html;#文件夹
            index index.html;#文件
        }
        location /status{
            stub_status;
        }
}


基于ip的配置改一下端口,变成监听访问8080端口的请求

基于域名的虚拟主机

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
   server{
        listen 80;
        server_name garine.com;
        location /{
            root html;#文件夹
            index index.html;#文件
        }
        location /status{
            stub_status;
        }
}


基于ip的配置,把server_name改成对应的域名,当用户通过访问garine.com来解析为ip然后访问服务器时,会把域名reffer传到服务器,就能基于域名进行代理了。

基本访问代理

上面提到的虚拟主机是代理请求然后访问nginx服务器上的资源,但是实际使用中更多是访问别的服务器的资源,通过nginx服务器,转发请求访问别的服务器,然后再通过nginx服务器,返回信息给客户端。这种基本的代理配置方式如下。

在server节点下面增加一个location配置,启动对应192.168.0.15:8080的tomcat

 server{
        listen 80;
        server_name garine.com;
        location /status{
proxy_pass http://192.168.0.15:8080;
        }

表示对于garine.com路径的请求,转发到http://192.168.0.15:8080

基于Nginx实现负载均衡

nginx通过拦截代理请求,能够实现服务器端的请求分流,从而达到负载均衡。

在nginx中实现了比较常见的集中负载均衡算法,跟阿里的Dubbo框架的负载均衡算法一样,有以下几种:

  1. 轮询算法,假如有a、b、c三台服务器,那么第一个请求落到a,第二个到b,第三个到c,然后又到a,一次类推循环
  2. 加权轮询算法,适当为负载能力更强的机器多分配流量。假如有a、b两台服务器,a权值为2,b权值为1,那么第一个、第二个请求落在a,第三个落在b,然后第四、第五个又落在a,以此类推。
  3. hash取模算法,算是一种sticky算法,根据访问者的ip取模,定位服务器算法,同一ip会访问到固定服务器。

上面提到基本的代理方式能够转发请求,根据负载算法来有策略的转发请求,那就是负载均衡。

配置方式

  1. 轮询负载
upstream tomcat{
    server 192.168.0.15:8080 max_fails=1 fail_timeout=90s;
    server 192.169.0.13:8080 max_fails=1 fail_timeout=90s;
}

   server{
        listen 80;
        server_name garine.com;
        location /status{
            stub_status;
        }
        location /{
            proxy_pass http://tomcat;
        }
}

与基本代理方式其实差不多,不过就是多配置一个upstream节点,然后再在server中引用即可,这种方式配置,默认是轮询算法。

  1. 加权轮询负载,可以通过以下配置增加权重,使用加权轮询。
upstream tomcat{
    server 192.168.0.15:8080 max_fails=1 fail_timeout=90s;
    server 192.169.0.13:8080 max_fails=1 fail_timeout=90s weight=2;
}

   server{
        listen 80;
        server_name garine.com;
        location /status{
            stub_status;
        }
        location /{
            proxy_pass http://tomcat;
        }
}

  1. ip hash负载也可以指定使用ip_hash的算法,进行负载。
upstream tomcat{
    ip_hash;
    server 192.168.0.15:8080 max_fails=1 fail_timeout=90s;
    server 192.169.0.13:8080 max_fails=1 fail_timeout=90s;
}

   server{
        listen 80;
        server_name garine.com;
        location /status{
            stub_status;
        }
        location /{
            proxy_pass http://tomcat;
        }
}

当然在upstream中还有许多配置,可以参考官方文档进一步了解。

你可能感兴趣的:(nginx)