反向代理、负载均衡,听起来很高大上的感觉,然而看懂其中原理和配置过程后,发现并不难的,都是纸老虎罢了。之前就听说过反向代理和负载均衡了,这两天抽空,用VMware虚拟机实现了负载均衡的过程。因为条件有限,并没有那么多的主机用来做服务器(qiong.......),只能搭建虚拟机的了。
-
window系统上安装win版nginx服务器
window当做代理,需要下载win版的ngnix
任务列表.png
win版nginx下载
这里我选择的是稳定版本。
下载完后解压到你需要放的任意一个盘下,启动window的cmd命令行界面。进入对应的nginx目录运行start nginx
成功启动nginx后,可以继续运行以下命令,可以查看nginx进程的一些情况
tasklist /fi "imagename eq nginx.exe"
如图,nginx已经启动成功,浏览器地址栏输入localhost即可看到nginx事例页面了
-
window安装VMware,wmware上安装若干个(我这里是3个)linux(centos7)操作系统及nginx网络服务
vmware主机列表.png
下载vmware安装好了,然后下载一个系统镜像,这里我用的是centos7的镜像,然后vmware运行后安装centos7的操作系统,这里我安装了3个系统作为反向代理的服务机
不过,这里是需要使得每个系统都能够网络访问的,我采用的是NAT的联网方式
NAT.png
启动网络服务后,可以ping www.baidu.com
检查是否可以访问网络了。
centos7的话,ipconfig不再适用,如下可以查看到当前主机的ip地址等
ipaddr.png
我的ip地址为192.168.200.129
另外,我们还需要为每一台主机安装nginx服务器
centos7下载nginx
关于centos7安装nginx服务器的过程我重复了,这篇文章描述很详细了 -
window主机当作反向代理的代理
反向代理的配置其实非常简单,你需要的是在代理主机上添加所需的虚拟服务器即可
- 在window的nginx配置目录下,新建proxy.conf文件:
server {
listen 80;
server_name www.a.com;
location / {
proxy_pass http://192.168.200.129; #后端ip地址
proxy_redirect off; #关闭后端返回的header修改
proxy_set_header Host $proxy_host; #修改发送到后端的header的host
proxy_set_header X-Real-IP $remote_addr; #设置真实ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name www.b.com;
location / {
proxy_pass http://192.168.200.128; #后端ip地址
proxy_redirect off; #关闭后端返回的header修改
proxy_set_header Host $proxy_host; #修改发送到后端的header的host
proxy_set_header X-Real-IP $remote_addr; #设置真实ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name www.c.com;
location / {
proxy_pass http://192.168.200.131; #后端ip地址
proxy_redirect off; #关闭后端返回的header修改
proxy_set_header Host $proxy_host; #修改发送到后端的header的host
proxy_set_header X-Real-IP $remote_addr; #设置真实ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
然后修改nginx.conf文件,在最后的‘}’前include反向代理文件proxy.conf
#反向代理配置
include proxy.conf;
接着,需要到window系统的‘C:\Windows\System32\drivers\etc’目录下修改hosts文件,添加所代理的服务器的域名和ip映射,这里我三台服务器的ip地址是192.168.200.129、192.168.200.128、192.168.200.131
192.168.200.129 www.a.com
192.168.200.128 www.b.com
192.168.200.131 www.c.com
用window的浏览器输入'www.a.com'等域名,可显示对应的服务器的主页内容,即是反向代理配置成功了。是不是贼简单哈~~~
- 添加负载均衡查询
上面的步骤把反向代理的环境搭建好了,接下来即可以增加负载均衡功能,分流代理服务器的流量压力。在代理服务器的nginx.conf中添加以下配置
#负载均衡轮询
upstream tomcats {
server www.a.com weight=3; #weight代表权重
server www.b.com weight=2;
server www.c.com;
}
这里我使用了加权轮询的方式,然后修改改文件下的server中的location
location / {
#root html;
#index index.html index.htm;
proxy_pass http://tomcats;
}
以上所有负载均衡配置已经完成,在浏览器处输入localhost,刷新几次能够显示www.a.com、www.b.com、www.c.com服务主机的几个不同网页,即说明负载均衡已经完成了。
代理服务器的nginx.conf全部内容如下:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#反向代理配置
include proxy.conf;
#负载均衡轮询
upstream tomcats {
server www.a.com weight=3;
server www.b.com weight=2;
server www.c.com;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://tomcats;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
本文实现了使用vmware实现反向代理负载均衡的服务功能,负载均衡仅采用了加权轮询,其他查询方式将在下一章详解。。
网友评论