Nginx在Windows环境下的反向代理与负载均衡的配置与验证
首先,相信看这篇文章的同学对于反向代理和负载均衡都已经有了一定的了解。也知道Nginx可以实现,只是想来查看和验证一下配置和实现的。
一 环境:
主机环境: win7操作系统
开发工具:
1、Intellij IDEA 13.0.1
2、apache-tomcat-7.0.67
3、weblogic10
4、nginx-1.8.1(windows版本)
工程项目:
1、UM项目(使用tomcat容器、8080端口)
2、SSO项目(使用weblogic容器、7001端口)
二 基本操作和配置
1、运行nginx。双击nginx.exe。(它会弹出一个cmd窗口,然后一闪而过,用过tomcat的同学肯定都会认为运行失败了。其实不然,可以通过任务管理器看出来,运行成功。)
2、关闭nginx。命令 nginx -s stop(强制停止。)
3、重新加载文件。命令 nginx -s reload
4、配置文件路径。conf\nginx.conf。
三 反向代理配置
server {
#这个表示的是nginx所监听的端口。http默认为80端口。
listen 80;
#这个server的名字。随便取吧
server_name localhost;
#所代理的地址和端头
location / {
#这里是代理的动态的服务。nginx还可以代理静态的内容,这里不做详细的讨论。
proxy_pass http://127.0.0.1:8080;
}
##########以后的省略。
}
这样,在浏览器当中,输入http://localhost 便能够访问到UM项目了。
挖坑与问题
挖坑:
在调试当中,我遇见了一个问题,当时我在方向代理SSO项目的时候,发现了一个问题。起初,我没有隐藏项目名。即访问路径为http://localhost:7001/sso_demo_weblogic。所以我有了如下的配置:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:7001/sso_demo_weblogic;
}
##########以后的省略。
}
项目无法访问到!!!
后来才明白,所代理的,只能够代理到IP和端口这个级别。不能够再代理到项目这个级别。
于是在在项目当中weblogic.xml当中添加了,用于隐藏项目名称:
<weblogic-web-app>
<context-root>/</context-root>
</weblogic-web-app>
所以,正确的应该是:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:7001;
}
##########以后的省略。
}
问题:
但是出现了一个很神奇的问题。我使用如下的配置:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:7001/sso_demo_weblogic/login;
}
##########以后的省略。
}
输入http://localhost 能够访问到登陆页面,但是由于后面路径不正确,所以无法正确登陆上去。
四 负载均衡
先查看配置
#######需要负载均衡的内容#############
upstream localhost_web {
server 10.20.12.29 weight=1;
server 10.12.123.40 weight=2;
}
server {
listen 80;
server_name web_app;
location / {
#此处需要填写的需要负载均衡的名称,且以http的形式表示。
proxy_pass http://localhost_web;
}
}
说明:
weight为权重,数值越大,访问到的概率越大。