Nginx(五)

负载均衡

官网文档 Using nginx as HTTP load balancer

nginx中实现反向代理的方式

HTTP:通过nginx配置反向代理到后端服务器,nginx将接收到的HTTP请求转发给后端服务器。使用 proxy_pass 命令

HTTPS:通过nginx配置反向代理到后端服务器,nginx将接收到的HTTPS请求转发给后端服务器。使用 proxy_pass 命令

FastCGI:一种常见的反向代理方式,通过将CGI程序从网络上收到的大量请求和应答保存在内存中来提高性能。使用 fastcgi_pass 命令

uwsgi:一种Python的WSGI服务器,它支持WebSocket协议,并且可以与nginx一起使用作为反向代理。使用 muwsgi_pass  命令

SCGI:一种简单的CGI协议,它可以在nginx中用作反向代理,通常用于处理大量小文件请求。使用 scgi_pass 命令

memcached:一种内存对象缓存系统,nginx可以通过反向代理将请求转发到memcached服务器来获取缓存的数据。使用 memcached_pass 命令

gRPC:一种高性能、开源和通用的 RPC(远程过程调用)框架,nginx可以通过反向代理将请求转发到支持gRPC的后端服务器。使用 grpc_pass 命令

负载均衡策略

轮询-round-robin-Nginx默认策略

对应用服务器的请求以轮询方式分发。

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

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

加权轮询-weight

如下所示,假设有5个请求,则3个请求被定向到srv1,1个请求被定向到srv2,1个请求被定向到srv3

 upstream myapp1 {
        server srv1.example.com weight=3;
        server srv2.example.com;
        server srv3.example.com;
    }

最少连接-least-connected

下一个请求被分配给具有最少活动连接数的服务器。 使用 least_conn 命令

upstream myapp1 {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

ip-hash

使来自同一个客户端(基于客户端IP)的请求始终定向至某一个服务器

upstream myapp1 {
    ip_hash;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

实验

192.168.28.158 nginx 实现反向代理
192.168.28.160 tomcat web1服务器
192.168.28.162 tomcat web2服务器

配置nginx

[root@nginx ~]# yum -y install yum-utils
[root@nginx ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[root@nginx ~]# yum makecache
upstream tomcat {    指定后台服务器
        server 192.168.28.160:8080;
        server 192.168.28.162:8080;
}
server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
#        root   /usr/share/nginx/html;
#        index  index.html index.htm;
         proxy_pass http://tomcat;    指定upstream组名
    }
...

配置web,web1和web2两者配置一致

[root@web1 ~]# ls
anaconda-ks.cfg  apache-tomcat-7.0.42.tar.gz  jdk-8u151-linux-x64.tar.gz  original-ks.cfg
[root@web1 ~]# tar -zx -f jdk-8u151-linux-x64.tar.gz -C /usr/local/
[root@web1 ~]# ln -s /usr/local/jdk1.8.0_151/ /usr/local/java
[root@web1 ~]# sed -i '$a \export JAVA_HOME=/usr/local/java\nexport PATH=$PATH:$JAVA_HOME/bin' /etc/profile
[root@web1 ~]# source /etc/profile
[root@web1 ~]# java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

[root@web1 ~]# tar -zx -f apache-tomcat-7.0.42.tar.gz -C /usr/local/
[root@web1 ~]# ln -s /usr/local/apache-tomcat-7.0.42/ /usr/local/tomcat
[root@web1 ~]# sed -i '$a \export CATALINA_HOME=/usr/loca/tomcat' /etc/profile
修改tomcat默认主页,改为 /usr/local/tomcat/webapps/ROOT/index.html
[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
...
      
        
...
      
[root@web1 ~]# bash /usr/local/tomcat/bin/startup.sh

[root@web1 ~]# echo "This is tomcat web1" > /usr/local/tomcat/webapps/ROOT/index.html
[root@web2 ~]# echo "This is tomcat web2" > /usr/local/tomcat/webapps/ROOT/index.html

测试,访问nginx,实际访问的是tomcat,刷新,在web1和web2之间轮番替换

Nginx(五)_第1张图片

Nginx(五)_第2张图片

你可能感兴趣的:(#,Nginx,服务器,运维)