1,
我nginx镜像现成的, 我打算开四个容器,我们先确认下四个未占用的端口。
lsof -i:8001
lsof
-i:8002
lsof
-i:8003
lsof
-i:8004
都是未被占用。
然后我用脚趾头想了一下, 所谓的负载均衡,就是修改下配置文件就行了, 其实我们现在改配置文件都有点原始了,各大运营商都有现成的后台,去点点按钮就搞定的事儿。
所以我们开容器时要映射不同的配置文件,在我的php文件夹里新建了一个conf.d文件夹,里面放配置文件。
docker run -itd -p 8001:80 -v/Users/guanliyang/php:/usr/share/nginx/html -v /Users/guanliyang/php/conf.d/nginx1.conf:/etc/nginx/nginx.conf --name nginx1 nginx
这条命令又折腾了好几分钟哈, 主要是想映射报错日志, 日志映射出来的话, nginx没有写宿主机文件的权限,那以后看日志就只能进容器看了,
路径是我在nginx.conf里面自己配置的哈,error_log
/var/log/nginx/error.log;
然后http://localhost:8001/ 访问成功。
这里两个nginx指向的目录, 真实情况下当然是本机的目录, 即线上部署是有多套代码的, 但我这里指向的都是本地目录,docker的挂载功能。-v
mac上,宿主机是不能访问docker容器的ip的, 但centos上可以。
所以要在vxbox上的centos上折腾了。
run -itd -p 8001:80 -v /data/www:/usr/share/nginx/html-v /data/www/nginx1.conf:/etc/nginx/nginx.conf -v /data/www/log:/usr/share/nginx/log --name nginx1 nginx
两台都可以访问了, 由于访问的同一个文件,看不出区别,我们输出服务器ip
echo $_SERVER['SERVER_ADDR'] ;
再开一个容器
docker run -itd -p 8002:80 -v /data/www:/usr/share/nginx/html-v /data/www/nginx1.conf:/etc/nginx/nginx.conf -v /data/www/log:/usr/share/nginx/log --name nginx2 nginx
看到一个是172.17.0.4,
另一个是:172.17.0.5
另一个是:172.17.0.6
给我报 *6 upstream timed out (110: Connection
timed out) while connecting to upstream, client: 192.168.1.4, server: ,
request: "GET / HTTP/1.1", upstream: "http://192.168.0.15:8002/", host: "192.168.1.15"
错误,搞了半天是我刚开始配置ip写错了。
主机nginx配置如下:
http {
upstream 192.168.1.15{
server 192.168.1.15:8001;
server 192.168.1.15:8002;
}
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
location / {
proxy_passhttp://192.168.1.15;
proxy_set_header Host $host;
proxy_set_header X-Real-IP$remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
}
}
}
这里主要配置两个参数:
Upstream 和 proxy_pass必须相同, 其他参数含义自行google。
默认这样配置,服务器会轮回访问,
2、weight(轮询权值)
3、ip_hash 等算法。
自己画的图,画图技术太一半了。
然后两个nginx1, 和nginx2 就各自连自己的代码,代码连数据库这样子。