拉取nginx镜像 

docker pull nginx

查看虚拟机内镜像

启动nginx看看是否成功

docker run -d --name "nginx" -p 89:80 nginx

启动后打开浏览器访问一下,确认是否可用

接下来我想修改 default.conf 配置文件,我们需要把我们自己定义的 default.conf挂载在 docker 中的nginx

首先创建挂载目录

mkdir -p /root/nginx/{conf,conf.d,html,log}

自定义 default.conf 文件   并设置负载均衡  8000  和8080   

upstream tornado_server {
        ip_hash;
        server 172.20.1.157:8000;
        server 172.20.1.157:8080;
    }


 server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
              proxy_pass http://tornado_server;
              index  dashboard index;
              proxy_set_header Host       $http_host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
              proxy_read_timeout 150; // 设置代理超时时间150s
            }
}




 server {
        listen       80;
        server_name  V2;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
              proxy_pass http://tornado_server;
              index  dashboard index;
              proxy_set_header Host       $http_host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
              proxy_read_timeout 150; // 设置代理超时时间
            }
}

注意这里的  proxy_pass 不能设置为 127.0.0.1,需要设置为公网IP,否则nginx无法识别,目前不知是什么原因,我猜想是docker无法识别127.0.0.1吧

文件创建成功后,上传到 /root/nginx/conf.d 目录下

现在来通过docker重新启动nginx

docker run --name nginx -d -p 89:80  --restart always  -v /root/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf  -v /root/nginx/log:/var/log/nginx  -v /root/nginx/html:/usr/share/nginx/html nginx

第一个-v:挂载nginx的反向代理配置文件,以方便在宿主机上直接修改容器的配置文件

第二个-v:挂载容器内nginx的日志,容器运行起来之后,可以直接在宿主机的这个目录中查看nginx日志

第三个-v:挂载静态页面目录

http://172.20.1.157:89/api/v1   浏览器查看   项目

所谓负载均衡就是:就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器,从而不会产生集群中大量请求只请求某一台服务器,从而使该服务器宕机的情况。


一:nginx反向代理
实现负载均衡之前我们要先实现反向代理,即请求到某个域名,默认该请求被nginx接收到,然后nginx根据配置,类似DNS解析,nginx会根据配置把特定的请求转发到对应的服务器


我们修改nginx的conf/nginx.conf配置文件如上图的两个地方
实现效果:使用nginx反向代理,访问 www.localhost:80.com 直接跳转到 127.0.0.1:8080
请求的是nginx的地址,代理到tomcat 的 页面
二:nginx负载均衡
实现效果
浏览器地址栏输入地址 http://127.0.0.1/myweb/index.jsp,负载均衡效果,将请求平均分配到8080和9999两台服务器上。
准备工作
(1)准备两台tomcat服务器,一台8080,一台9999
(2)在两台tomcat里面webapps目录中创建一个小项目如:myweb/index.jsp

实现负载均衡的几种方式
声明:实现负载均衡方式有很多,配置完一种后面的大差不差,我们主要讲解第一种


1,轮询(默认)


每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器
down掉,能自动剔除。

 

   # 反向代理配置
    upstream server_list{
       # 这个是tomcat的访问路径
       server localhost:8080;
       server localhost:9999;
    }
    server {
            listen       80;
            server_name  localhost;
    
            location / {
                root   html;
                proxy_pass http://server_list;
                index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }

2,weight 权重


weight 代表权重,默认为1,权重越高被分配的客户端越多
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如

# 反向代理配置

upstream server_list{
# 这个是tomcat的访问路径
server localhost:8080 weight=5;
server localhost:9999 weight=1;
}



3,ip_hash


每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题

upstream backserver { 
        ip_hash; 
        server 127.0.0.1:8080; 
        server 127.0.0.1:9090; 
}


不管刷新多少遍,始终访问的是同一台tomcat服务器


4,最少连接


web请求会被转发到连接数最少的服务器上

upstream backserver { 
    least_conn;
    server 127.0.0.1:8080; 
    server 127.0.0.1:9090; 
}  

 

原文链接:https://blog.csdn.net/zpf1813763637/article/details/109455451

https://segmentfault.com/a/1190000015092063

Docker nginx 反向代理设置 — outmanzzq

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐