本机ip为10.150.0.88,tomcat1配置不动,tomcat2配置文件中所有监听号+1。nginx中将原始配置文件修改:
http {
upstream servers{
server10.150.0.88:8080;
server10.150.0.88:8081;
}
server {
listen 80;
server_name virtual_server@88;
location / {
proxy_pass http://servers/;
}
}
}
※上面红的部分一样。
※http请求进来后,找到http属性中的server,然后匹配location,匹配成功后在server指向的upstream中找一个server,默认是轮询。
例如url请求为http://10.150.0.88:80/,80后面的这个斜杠和location后面的斜杠匹配成了同一个斜杠。所以由location中的proxy_pass属性设置代理,url被重写为http://10.150.0.88:8080/或者http://10.150.0.88:8081/。由于后面挂的是tomcat,又会自动变成http://10.150.0.88:8080/ROOT/index.jsp 和http://10.150.0.88:8081/ROOT/index.jsp 。
※location和upstream都可以实现匹配,localtion一般是单个tomcat内部的匹配,一般跟业务有关,比如过滤特殊请求。而upstream过滤一般和机器负载有关,属于资源上的调度。也可以很灵活地将location的请求映射到某台机器上,将上面的location改成:
location / {
proxy_pass http://10.150.0.88:8080/;
}
那么被这个location匹配成功的请求将只能访问tomcat1而不能访问tomcat2。