当前位置:

使用docker实现nginx负载均衡

访客 2024-01-05 962 0

Docker部署nginx实现负载均衡

实验环境:
Centos7
Docker
Nginx

利用宿主机和两个nginx容器来实现负载均衡,宿主机无任何内容。只搭载一台nginx服务器,并由此台服务器将请求转发给两个nginx容器来进行处理

不知道什么是nginx负载均衡,请移步nginx负载均衡

一、安装相关环境

1.安装Docker(个人推荐配置阿里云源)
2.宿主机安装Nginx

关闭防火墙和selinux

[root@iZbp18vj2il5rgv6uy66xxZ~]#systemctlstopfirewalld.service//Centos7关闭防火墙命令[root@iZbp18vj2il5rgv6uy66xxZ~]#setenforce0//临时关闭SELinux//如果是宝塔安装,则省略[root@iZbp18vj2il5rgv6uy66xxZ~]#yuminstalldocker-y[root@iZbp18vj2il5rgv6uy66xxZ~]#wgethttp://dl.Fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm[root@iZbp18vj2il5rgv6uy66xxZ~]#yuminstallnginx-y

传送门:
selinux是什么
centos7防火墙命令

用命令测试是否成功安装能否开启服务

//如果是宝塔安装,则省略[root@iZbp18vj2il5rgv6uy66xxZ~]#systemctlstartdocker.service[root@iZbp18vj2il5rgv6uy66xxZ~]#systemctlstartnginx.serviceCentos7启动服务命令与6.x不同哦

测试web页面是否显示成功

完全ok没问题!!!
我们先删除掉nginx默认html,并创建一个空白index.html方便我们配置成功后查看效果

[root@iZbp18vj2il5rgv6uy66xxZ~]#cd/www/server/nginx/html/[root@iZbp18vj2il5rgv6uy66xxZ~]#rmindex.html[root@iZbp18vj2il5rgv6uy66xxZ~]#touchindex.html二、安装Nginx容器
  1. pullnginx镜像
[root@iZbp18vj2il5rgv6uy66xxZwww]#dockerpullnginxUsingdefaulttag:latestlatest:Pullingfromlibrary/nginx07aded7c29c6:Pullcompletebbe0b7acc89c:Pullcomplete44ac32b0bba8:Pullcomplete91d6e3e593db:Pullcomplete8700267f2376:Pullcomplete4ce73aa6e9b0:PullcompleteDigest:sha256:765e51caa9e739220d59c7f7a75508e77361b441dccf128483b7f5cce8306652Status:Downloadednewerimagefornginx:latestdocker.io/library/nginx:latest
  • pull完成使用dockerimages命令查看
  • [root@iZbp18vj2il5rgv6uy66xxZwww]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEnginxlatestf8f4ffc8092c7daysago133MB
  • dockerrun创建容器
  • //容器名:nginx_web1映射容器8080端口到宿主机80端口上dockerrun-p8080:80--namenginx_web1-itnginx/bin/bash

    进入nginx_web1容器的nginx目录下创建一个index.html

    root@9f88cab79ac8:/#cd/usr/share/nginx/html/root@9f88cab79ac8:/usr/share/nginx/html#ls50x.htmlindex.htmlroot@9f88cab79ac8:/usr/share/nginx/html#rmindex.htmlroot@9f88cab79ac8:/usr/share/nginx/html#echohellonginx_web1ninetySeven>index.htmlroot@9f88cab79ac8:/usr/share/nginx/html#exit

    下面创建多一个新的nginx容器

    //容器名:nginx_web2映射容器8080端口到宿主机80端口上dockerrun-p8081:80--namenginx_web2-itnginx/bin/bash

    进入nginx_web2容器的nginx目录下创建一个index.html

    root@f1b7fcac2dad:/#cd/usr/share/nginx/html/root@f1b7fcac2dad:/usr/share/nginx/html#ls50x.htmlindex.htmlroot@f1b7fcac2dad:/usr/share/nginx/html#rmindex.htmlroot@f1b7fcac2dad:/usr/share/nginx/html#echohellonginx_web2ninetySeven>index.htmlroot@f1b7fcac2dad:/usr/share/nginx/html#exit

    先查看容器

    [root@iZbp18vj2il5rgv6uy66xxZwww]#dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESf1b7fcac2dadnginx"/docker-entrypoint.…"4minutesagoUpAboutaminute0.0.0.0:8081->80/tcp,:::8081->80/tcpnginx_web29f88cab79ac8nginx"/docker-entrypoint.…"10minutesagoUp49seconds0.0.0.0:8080->80/tcp,:::8080->80/tcpnginx_web1

    exit退出后容器不运行先启动两个nginx容器再执行启动服务命令

    [root@iZbp18vj2il5rgv6uy66xxZ~]#dockerstartf1b7fcac2dadf1b7fcac2dad[root@iZbp18vj2il5rgv6uy66xxZ~]#dockerstart9f88cab79ac89f88cab79ac8[root@iZbp18vj2il5rgv6uy66xxZ~]#dockerexec-df1b7fcac2dadservicenginxstart[root@iZbp18vj2il5rgv6uy66xxZ~]#dockerexec-d9f88cab79ac8servicenginxstart三、配置宿主机nginx文件

    方式一:命令行操作(推荐)

    [root@iZbp18vj2il5rgv6uy66xxZ/]#cd/www/server/nginx/conf/[root@iZbp18vj2il5rgv6uy66xxZconf]#vimnginx.conf

    方式二:打开宝塔面板找到nginx管理

    在http段加入以下代码

    //nginx.kkcake.cn自己服务器的域名upstreamnginx.kkcake.cn{server101.37.157.104:8080weight=10;server101.37.157.104:8081weight=20;}server{listen80;server_namenginx.kkcake.cn;location/{proxy_passhttp://nginx.kkcake.cn;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;}}

    保存配置并重启宿主机Nginx或者宝塔面板nginx管理重启服务

    [root@iZbp18vj2il5rgv6uy66xxZ~]#systemctlrestartnginx.service

    查看Nginx容器运行状态

    注:如果是线上服务器,则需要在服务器和宝塔界面开启端口

    服务器配置端口

    宝塔配置端口

    五、测试

    再刷新几次?

    web1web2看出来了吧?\

    以上基于docker实现nginx负载成功!!!

    发表评论

    • 评论列表
    还没有人评论,快来抢沙发吧~