1,确保将要切换的目标服务使用正常。
2,更改nginx.conf中被代理的虚拟主机地址,将其改为上面的目标服务(可能是测试,可能是线上其他服务器集群中的一台)。
如 vim /opt/nginx/conf/nginx.conf
server {
listen 80;
server_name testing.com www.google.com;
#charset koi8-r;
access_log off;
#access_log /home/google/logs/nginx/access.log google;
location / {
#proxy_pass http://127.0.0.1:8080;
proxy_pass http://192.168.1.99:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 5m;
proxy_connect_timeout 150;
proxy_send_timeout 150;
proxy_read_timeout 150;
proxy_next_upstream error timeout invalid_header http_500;
proxy_buffer_size 32k;
proxy_buffers 32 64k;
proxy_busy_buffers_size 128k;
}
}
更改上面的proxy_pass http://192.168.1.99:80为目标服务器地址如:proxy_pass http://192.168.1.100:80。
然后执行/opt/nginx/sbin/nginx -t测试下,如果出现....successfully 字样,则说明配置文件更改没有问题。
然后执行/opt/nginx/sbin/nginx -s reload , 这个不会有输出信息。
此时,所有访问www.google.com通过dns解析到99机器上80端口的请求,全部被转到100机器上的80端口。
注意:为什么强调dns?如果在本地hosts文件中配置了192.168.1.99:80 www.google.com则不会经过dns返回ip地址,直接访问192.168.1.99:80这个地址。
为什么强调80端口?因为服务器上设置了只有80端口可以被外部访问,请求过来后,机器本地才可以访问自己的任何端口,比如8080,8081...
流量切换成功!
执行ps -ef | grep nginx,查看nginx进程的情况:
google 11366 32142 1 16:47 ? 00:00:06 nginx: worker process is shutting down
google 11367 32142 0 16:47 ? 00:00:00 nginx: worker process is shutting down
google 11368 32142 0 16:47 ? 00:00:03 nginx: worker process is shutting down
google 11369 32142 0 16:47 ? 00:00:05 nginx: worker process is shutting down
google 11370 32142 1 16:47 ? 00:00:06 nginx: worker process is shutting down
google 11371 32142 2 16:47 ? 00:00:15 nginx: worker process is shutting down
google 11372 32142 1 16:47 ? 00:00:07 nginx: worker process is shutting down
google 11373 32142 1 16:47 ? 00:00:07 nginx: worker process is shutting down
google 11787 32142 0 16:57 ? 00:00:00 nginx: worker process
google 11788 32142 0 16:57 ? 00:00:00 nginx: worker process
google 11789 32142 0 16:57 ? 00:00:00 nginx: worker process
google 11790 32142 0 16:57 ? 00:00:00 nginx: worker process
google 11791 32142 0 16:57 ? 00:00:00 nginx: worker process
google 11792 32142 3 16:57 ? 00:00:00 nginx: worker process
google 11793 32142 1 16:57 ? 00:00:00 nginx: worker process
google 11794 32142 0 16:57 ? 00:00:00 nginx: worker process
上面执行/opt/nginx/sbin/nginx -s reload时nginx会启动和原来相等数量的进程,然后等待原来进程执行完操作在测试shut down.
待所有线程都shut down后
开始更新99机器上的服务,在此之前,将99机器上的原来的代码备份!!!切记切记,一定要备份!!!!出现意外情况可以迅速回滚!!!
启动,查看进程,看启动成功与否。
在本地hosts配置192.168.1.99 www.google.com可以直接不经过dns访问99机器的服务,看服务正常与否,若正常,再按以上步骤将流量切回。