背景:四台机器(防火墙关闭)
kvm1:nginx代理
kvm2:tomcat多实例,放动态网页
kvm3:nginx配置多个虚拟主机,放静态网页
chen:客户端,用于访问测试,已经做好域名解析。
一、做tomcat多实例
1.1、三个实例的规划
实例一:工作端口 8081 (相当于原本的8080) 实例本身端口 8091(相当于8005)
网页位置 :/webapps1/ROOT/index.jsp
实例目录:/usr/local/tomcat/instance1
实例二:工作端口 8082 (相当于原本的8080) 实例本身端口 8092(相当于8005)
网页位置 :/webapps2/ROOT/index.jsp
实例目录:/usr/local/tomcat/instance2
实例三:工作端口 8083 (相当于原本的8080) 实例本身端口 8093(相当于8005)
网页位置 :/webapps3/ROOT/index.jsp
实例所在目录:/usr/local/tomcat/instance3
1.2、准备网页如下
[root@kvm2 ~]# cat /webapps1/ROOT/index.jsp
webapp1
[root@kvm2 ~]# cat /webapps2/ROOT/index.jsp
webapp2
[root@kvm2 ~]# cat /webapps3/ROOT/index.jsp
webapp3
1.3、分别修改各实例配置
在各配置文件目录下创建新目录:logs,temp,conf,work
创建后如下(此时):
[root@kvm2 tomcat]#mkdir instance1/{temp,conf,logs,work}
[root@kvm2 tomcat]#mkdir instance2/{temp,conf,logs,work}
[root@kvm2 tomcat]# mkdir instance3/{temp,conf,logs,work}
[root@kvm2 instance1]# ls /usr/local/tomcat/instance1
conf logs temp work
[root@kvm2 instance1]# ls /usr/local/tomcat/instance2
conf logs temp work
[root@kvm2 instance1]# ls /usr/local/tomcat/instance3
conf logs temp webapps3 work
找到tomcat原本的配置文件分别放到个实例里并修改
[root@kvm2 ~ ]#cp /usr/local/tomcat/conf/* /usr/local/tomcat/instance1/conf/ -r
[root@kvm2 ~]#vim /usr/local/tomcat/instance1/conf/server.xml
<Server port="8091" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Host name="localhost" appBase="/webapps1"
unpackWARs="true" autoDeploy="true">
#按规划修改Server port,Connector port和appBase
#实例二和实例三也照此修改
1.4、分别在各实例目录下给实例写启动脚本
#实例一的启动脚本
[root@kvm2 instance1]# cat ins1.sh
#!/bin/bash
#instace1 script
export JAVA_OPTS='-Xms64m -Xmx128m'
#tomcat实例启动时最小分配的内存为64M,最大为128M
export CATALINA_HOME=/usr/local/tomcat
#tomcat的安装目录
export CATALINA_BASE=/usr/local/tomcat/instance1
#实例1的目录
case $1 in
start)
$CATALINA_HOME/bin/startup.sh
;;
stop)
$CATALINA_HOME/bin/shutdown.sh
;;
restart)
$CATALINA_HOME/bin/shutdown.sh
sleep 3
$CATALINA_HOME/bin/startup.sh
;;
esac
#实例二、三的脚本与一相同,照情况修改CATALINA_BASE(实例目录)即可。
给脚本执行权限
[root@kvm2 ~]#chmod +x /usr/local/tomcat/instance1/ins1.sh
[root@kvm2 ~]#chmod +x /usr/local/tomcat/instance2/ins2.sh
[root@kvm2 ~]#chmod +x /usr/local/tomcat/instance3/ins3.sh
[root@kvm2 ~]#/usr/local/tomcat/instance1/ins1.sh start
[root@kvm2 ~]#/usr/local/tomcat/instance2/ins2.sh start
[root@kvm2 ~]#/usr/local/tomcat/instance3/ins3.sh start
#查看启动情况
[root@kvm2 ~]#ss -antp | grep java | grep :80
[root@kvm2 ~]#ss -antp | grep java | grep :80
[root@kvm2 ~]# ss -antp | grep java | grep :80
LISTEN 0 100 :::8009 :::* users:(("java",pid=25264,fd=55))
LISTEN 0 100 :::8080 :::* users:(("java",pid=25264,fd=50))
LISTEN 0 100 :::8081 :::* users:(("java",pid=26321,fd=50))
LISTEN 0 100 :::8082 :::* users:(("java",pid=26278,fd=50))
LISTEN 0 100 :::8083 :::* users:(("java",pid=26426,fd=50))
LISTEN 0 100 :::8085 :::* users:(("java",pid=26071,fd=50))
#可以看到8081,8082,8083端口都已经启动,表示成功。
客户端测试:
[root@chen ~]# links --dump http://kvm2:8081
webapp1
[root@chen ~]# links --dump http://kvm2:8082
webapp2
[root@chen ~]# links --dump http://kvm2:8083
webapp3
#tomcat多实例成功
二、部署nginx虚拟主机(二进制nginx)
#如果使用httpd做html,本次实验中,需要要在httpd配置文件里监听非80端口
共部署三台,访问端口分别是9091,9092,9093
2.1、准备虚拟主机网页,内容如下
[root@kvm3 ~]# cat /web1/html/index.html
html1
[root@kvm3 ~]# cat /web2/html/index.html
html2
[root@kvm3 ~]# cat /web3/html/index.html
html3
2.2、在/etc/nginx/conf.d/目录下配置虚拟主机
[root@kvm3 ~]# cat /etc/nginx/conf.d/web1.conf
server {
listen 9001;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /web1/html;
index index.html index.htm;
}
}
[root@kvm3 ~]# cat /etc/nginx/conf.d/web2.conf
server {
listen 9002;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /web2/html;
index index.html index.htm;
}
}
[root@kvm3 ~]# cat /etc/nginx/conf.d/web3.conf
server {
listen 9003;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /web3/html;
index index.html index.htm;
}
}
#重新加载配置文件使虚拟主机生效
[root@kvm3 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@kvm3 ~]# nginx -s reload
客户端测试:
[root@chen ~]# links --dump http://kvm3:9001
html1
[root@chen ~]# links --dump http://kvm3:9002
html2
[root@chen ~]# links --dump http://kvm3:9003
html3
三、配置nginx代理
#修改配置文件
[root@kvm1 ~]# vim /etc/nginx/nginx.conf
#在http里设置upstream
upstream httpdsrv {
server 192.168.122.185:9001 weight=1 max_fails=2;
server 192.168.122.185:9002 weight=1 max_fails=2;
server 192.168.122.185:9003 weight=1 max_fails=2;
}
# kvm3的ip:192.168.122.185
kvm2的ip:192.168.122.56
upstream tomcatsrv {
server 192.168.122.56:8081 weight=1 max_fails=2;
server 192.168.122.56:8082 weight=1 max_fails=2;
server 192.168.122.56:8083 weight=1 max_fails=2;
}
#在/etc/nginx/conf.d/default.conf中配置代理,主要修改如下
[root@kvm1 ~]# vim /etc/nginx/conf.d/default.conf
location / {
root /usr/share/nginx/html;
index index.html;
}
location ~* \.html$ {
proxy_pass http://httpdsrv;
proxy_set_header x-real-ip $remote_addr;
}
location ~* \.jsp$ {
proxy_pass http://tomcatsrv;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto $schema;
}
[root@kvm1 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@kvm1 ~]# nginx -s reload
客户端访问测试:
[root@chen ~]# links --dump http://kvm1/index.html
html1
[root@chen ~]# links --dump http://kvm1/index.html
html2
[root@chen ~]# links --dump http://kvm1/index.html
html3
[root@chen ~]# links --dump http://kvm1/index.jsp
webapp1
[root@chen ~]# links --dump http://kvm1/index.jsp
webapp2
[root@chen ~]# links --dump http://kvm1/index.jsp
webapp3
默认的调度算法是rr,如果想要访问同一个网页,可用ip_hash
[root@kvm1 ~]# vim /etc/nginx/nginx.conf
upstream httpdsrv {
ip_hash;
server 192.168.122.185:9001 weight=1 max_fails=2;
server 192.168.122.185:9002 weight=1 max_fails=2;
server 192.168.122.185:9003 weight=1 max_fails=2;
}
[root@kvm1 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@kvm1 ~]# nginx -s reload
#客户端测试
[root@chen ~]# links --dump http://kvm1/index.html
html3
[root@chen ~]# links --dump http://kvm1/index.html
html3
[root@chen ~]# links --dump http://kvm1/index.html
html3