• Nginx 安装并配置反向代理、负载均衡


    Nginx 安装并配置反向代理、负载均衡

    Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务 。

    1、查看可用版本

    访问 Nginx 镜像库地址: https://hub.docker.com/_/nginx?tab=tags。

    image-20210623104436285

    此外,我们还可以用 sudo docker search nginx 命令来查看可用版本。

    2、拉取最新的版本

    命令如下:

    $ sudo docker pull nginx:latest
    

    查看安装是否成功:

    $ sudo docker images
    

    image-20210623104942107

    3、运行

    安装完成后,我们可以使用以下命令来运行 nginx 容器:

    $ sudo docker run --name nginx-test -p 8080:80 -d nginx
    
    • --name nginx-test:容器名称。
    • -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
    • -d nginx: 设置容器在在后台一直运行。

    执行以下命令查看 nginx 容器是否在运行:

    # 列出所有在运行的容器信息
    $ sudo docker ps
    

    通过浏览器访问8080端口的 nginx 服务:

    image-20210623113416766

    最后想停止 nginx服务,那么可以停止容器或杀掉容器,执行命令如下:

    # 停止容器
    $ sudo docker stop nginx-test
    或
    # 杀掉容器
    $ sudo docker kill nginx-test
    

    4、修改 Nginx 的配置文件

    首先切换成 root 用户登录, 在本机创建nginx的一些文件存储目录

    $ mkdir -p ./nginx/www ./nginx/logs ./nginx/conf
    

    image-20210623171609882

    • www: nginx存储网站网页的目录
    • logs: nginx日志目录
    • conf: nginx配置文件目录

    查看nginx-test 容器 id

    $ docker ps -a 
    

    接着将 nginx-test 容器配置文件 copy 到本地

    # 进入 nginx容器,可查看配置文件
    $ docker exec -it 469d86949fd1 /bin/bash
    
    $ docker cp 469d86949fd1:/etc/nginx/nginx.conf /root/nginx/conf
    

    image-20210623180116619

    创建新 nginx 容器 nginx-web,并将 www,logs,conf 目录映射到本地

    $ docker run -d -p 80:80 --name nginx-web -v /root/nginx/www:/usr/share/nginx/html -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/logs:/var/log/nginx nginx
    

    启动 nginx-web:

    $ docker start nginx-web
    

    在 /root/nginx/www 目录下创建 index.html 内容为:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>docker</title>
    <body>
    <h1>666666</h1>    
    </body>
    </head>   
    </html>
    

    重新访问主机:

    image-20210623204609575

    5、设置反向代理

    进入到/root/conf/nginx.conf 末尾添加以下配置:

    server{
        listen 80;
        charset utf-8;
        server_name 192.168.44.130;
    
        location / {
            proxy_pass http://192.168.44.130:8080;
            proxy_redirect default;
        }
    }
    

    这样 192.168.44.130:8080 便代理了 http://192.168.44.130:8080, 而 http://192.168.44.130:8080 是默认访问 tomcat 的地址,如下:

    image-20210702101658930

    这样就可以用本机80端口访问本机8080端口了。

    浏览器访问80端口:

    image-20210702102527339

    成功代理8080端口,代理设置成功。

    6、负载均衡

    客户端发送的请求先经过 Nginx ,然后通过 Nginx 将请求根据相应的规则分发到相应的服务器。

    nginx负载均衡

    主要配置指令为上一讲的 pass_proxy 指令以及 upstream 指令。负载均衡主要通过专门的硬件设备或者软件算法实现。通过硬件设备实现的负载均衡效果好、效率高、性能稳定,但是成本较高。而通过软件实现的负载均衡主要依赖于均衡算法的选择和程序的健壮性。均衡算法又主要分为两大类:

    • 静态负载均衡算法:主要包括轮询算法、基于比率的加权轮询算法或者基于优先级的加权轮询算法。
    • 动态负载均衡算法:主要包括基于任务量的最少连接优化算法、基于性能的最快响应优先算法、预测算法及动态性能分配算法等。
    • 静态负载均衡算法在一般网络环境下也能表现的比较好,动态负载均衡算法更加适用于复杂的网络环境。

    6.1、普通轮询算法

    这里以 Nginx的默认算法即轮询算法为例,演示下 Nginx 的负载均衡。

    例如有两台 tomcat 服务器,端口号分别为8081和8082,Nginx 第一次将请求分发给 8081服务器,第二次则将请求分发给8082服务器,往返循环。

    为了区分访问的 tomcat 服务器,修改修改 tomcat 首页,首页路径为:webapps/ROOT/index.jsp

    image-20210705163444265

    记住两个 Tomcat 的文件需要先将主机目录挂载到容器,修改才能生效。接着 Docker 运行 8081和8082的两个 tomcat,并在

    nginx.conf 配置文件添加以下配置:

    upstream tomcat-server {
    	server 192.168.44.130:8081;
    	server 192.168.44.130:8082;
    }
    server {
    	listen       80;
    	server_name  192.168.44.130; 
        location / {
        	proxy_pass http://OrdinaryPolling;
            proxy_pass default;         
            }
    }
    

    上面的 ip 地址记得更改为自己的 ip。

    接着启动 nginx,

    浏览器第一次访问:

    image-20210705165047771

    浏览器第二次访问:

    image-20210705165126917

    说明 nginx 已经成功将请求分发给两个 tomcat 了,负载均衡配置成功。其他算法这里就不进行演示了。

    参考资料:

    https://www.runoob.com/docker/docker-install-nginx.html

    https://blog.csdn.net/weixin_40461281/article/details/92586378

    https://www.cnblogs.com/ysocean/p/9392912.html

    自我控制是最强者的本能-萧伯纳
  • 相关阅读:
    Apache Doris 编译
    Jmeter(二十五)
    Jmeter(二十四)
    Jmeter(二十三)
    Jmeter(二十二)
    Jmeter(二十一)
    Jmeter(二十)
    jmeter-“java.net.SocketException: Socket closed“解决方法
    JMeter测试出现java.net.SocketException: Permission denied: connect 解决方案
    jmeter压测org.apache.http.conn.HttpHostConnectException: Connect to 127.0.0.1:8999 [/127.0.0.1] fail
  • 原文地址:https://www.cnblogs.com/CF1314/p/14984821.html
Copyright © 2020-2023  润新知