Nginx 功能展示实验

Nging可以作为反代服务器;也可以作为负载均衡器,并自带根据对后端服务器健康状态检测具有增删服务器的功能;也可以作为纯Web服务器,提供Web服务。

本实验将使用Nginx实现上述三种功能。

==值得注意的是:Nginx的负载均衡调度功能是依赖反代功能才能实现的,所以,如果详细的描述拓扑结构的话,Nginx服务器的反代功能更靠近前端些,负载均衡调度功能肯定在反代一层的下一层。负载均衡功能不可能出现在反代的前一层。==

实验中的https加密和缓存实验仅仅为了复习,与本实验的主体无密切关系。

实验说明

本次实验所用的反代服务器和Web服务器均使用Nginx程序,实验环境为CentOS7.3。

绘制实验拓扑图

graph TD 
A[Client] -->|请求| B{Nginx}
B -->|响应| A
B -->|反代 & 调度| C(Web Server 1)
B -->|反代 & 调度| E(Web Server 2)

各主机节点的角色分配:

后端两台Web服务器使用Nginx提供纯Web服务。

前端一台Nginx服务器作为反向代理服务器和负载均衡器,同时具有反向代理和负载均衡调度两个功能。

IP分配:

Nginx Address :172.16.50.2(面向公网)、192.168.50.129(面向后端服务器)

Web Server 1 Address :192.168.50.128

Web Server 2 Address :192.168.50.131

节点间的关系如图所示。

实验过程

1. 先准备后端两台Web服务器

  1. 在webserver1上通过不同的端口部署三个虚拟主机,其中一个使用ssl方式,并提供默认访问页。配置如下:
vim /etc/nginx/conf.d/vhost.conf

server {
    listen 80;
    server_name 192.168.50.128;
    root /web/nginx/html/vhost1;
    index index.html;
}

server {
    listen 8080;
    server_name 192.168.50.128;
    root /web/nginx/html/vhost2;
    index index.html;

}

server {
    listen 443 ssl;
    server_name nginx.achudk.com;
    root /web/nginx/ssl/vhost1;
    ssl on;
    ssl_certificate "/etc/pki/CA/certs/nginx.crt";
    ssl_certificate_key "/etc/pki/CA/nginx.pem";
}
  1. 在webserver2上部署一个虚拟主机并提供默认访问页,方法同上

==在实际生产环境中,两台web服务器提供的内容必须一致,本实验为了演示效果,故意将两台服务器的web页面不同,以示区别。==

  1. 在Nginx服务器上设置sorry server 页面。

2. 部署Nginx的反代和负载均衡功能

要求:代理webserver1服务器的所有虚拟主机提供的站点

【注】

  • 反代服务器可以设置两个网卡,外侧设置为公网,内侧设置为私网,可以代理ip为公网的或ip为私网的WebServer。
  • 在实验过程中,可能会出现意外情况,可以试试删除反代服务器的缓存后再试试。
vim /etc/nginx/nginx.conf
# 在http{ }的上下文中添加如下内容

proxy_cache_path /var/cache/nginx/proxy_cache80 levels=1:2:1 keys_zone=proxycache80:20m max_size=1g;  

upstream websrvs {
    server 192.168.50.128:80 weight=1 max_fails=2 fail_timeout=3s;
    server 192.168.50.131:80 weight=1;
    server 127.0.0.1 backup;

#   least_conn;
#   hash $remote_addr;
    hash $request_uri consistent;

    keepalive 25;                                                 
    }
vim /etc/nginx/conf.d/reverse_proxy.conf

server {                                                              
    listen 80;
    server_name 172.16.50.2;
    location / {
        proxy_pass http://websrvs;
        proxy_cache proxycache80;
        proxy_cache_key $request_uri;
        proxy_cache_valid 200 302 301 2m;
        proxy_cache_valid any 1m;
        proxy_connect_timeout 70;
    }
}

3. 整体试验结果验证

for ((i=1;i<=5;i++)); do curl http://172.16.50.2;done

当down掉一台web服务器时,仅有另一台提供web服务

当两台web服务器都down掉时,会显示sorry server页面。