文章目录
Tomcat配置
Tomcat的安装就省略了,Tomcat配置主要说一下如果同一台机器的多台Tomcat的部分端口冲突问题,需要注意的地方。如果不同机器的Tomcat则可以直接跳过Tomcat相关的章节了。
配置server.xml
如果是同一台机器多个Tomcat来模拟集群的Session共享,那么server.xml
的端口以及部分脚本中配置的端口都需要修改,保证不冲突。这个例子中,博主使用的是同一台机器的Nginx和两台Tomcat,TomcatA的端口为:8081,TomcatB的端口为:8082,下面只贴出了TomcatA的server.xml的配置,TomcatB基本配置是一样的,只是端口的不同,就不贴出来了。
TomcatA的配置
<?xml version='1.0' encoding='utf-8'?>
<Server port="8006" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector executor="tomcatThreadPool"
port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_tag_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
Tomcat的核心配置都在server.xml
,此外如果是同一台机器配置了多台tomcat,如果Tomcat不在同一台机器上的可以忽略,否则下面几点需要注意,环境变量的配置一般都在startup.sh
,catalina.sh
,setclasspath.sh
和setenv.sh
(推荐)中配置:
第一点,是否配置了远程调试(CATALINA_OPTS环境变量)
如果配置了,则保证多个tomcat间的端口不要冲突,如下的address的值
CATALINA_OPTS="$CATALINA_OPTS -server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9001"
第二点,是否开启了JMX监控,一般都是开启了的
如果配置了,则同样需要保证tomcat间的端口不要冲突,如下的jmxremote.port
配置:
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=9996 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
Nginx的安装和配置
Nginx的安装方式,下面都是基于yum源安装的方式,也可以源码编译安装(未写文档)。
方式一(yum源安装)
1)配置Nginx的Yum源
创建/etc/yum.repos.d/nginx.repo
文件,并在文件用写入下列的内容,接着运行:yum list nginx 应该可以看到Nginx软件包;如果yum报repo有问题,很可能是本机没有配置$releasever
;$releasever
有些系统没有,可以自己定义,例如CentOS6.5则$releasever
值应该为6,另外的方式也可以直接硬编码修改下列连接中的$releasever
为指定的值替代,例如:你的版本是centos6那么则将$releasever
使用“6”替代,替换后则baseurl=http://nginx.org/packages/centos/6/$basearch/
。
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
2)安装Nginx
通过yum
命令安装
#查找安装包
yum list nginx
#安装指定的安装包
yum install -y [指定的安装包名]
方式二(源码安装)
如果想要源码安装,可参考另外的一篇文章:https://blog.csdn.net/strive_or_die/article/details/98667605
Nginx基本命令
启动Nginx
#指定nginx.conf配置文件路径,如下的/path/to/nginx.conf
nginx -c /path/to/nginx.conf 或者 nginx (采用默认配置)
Nginx服务器重启命令,关闭
nginx -s reopen #重新打开日志文件
nginx -t -c /path/to/nginx.conf #测试nginx配置文件是否正确
关闭Nginx
nginx -s stop :快速停止nginx
quit :完整有序的停止nginx
其他的停止Nginx 方式
ps -ef | grep nginx
kill -QUIT 主进程号 :从容停止Nginx
kill -TERM 主进程号 :快速停止Nginx
kill -9 nginx :强制停止Nginx
重新加载配置(修改配置文件后执行,可以让配置生效,不用重启Nginx)
nginx -s reload
Nginx日志
Nginx的日志信息的位置,一般不是自己编译安装的方式,默认的日志配置文件在/var/log/nginx/
目录下,日志对于排查问题很方便。Nginx的日志主要包括error.log
和access.log
,error.log
是错误日志,access.log
是访问日志,这个日志很重要,用于排查错误。
配置Nginx
非自行编译安装的方式,Nginx的配置一般在/etc/nginx
目录下。安装好Nginx,下面主要的工作是针对上游服务器的场景怎么配置Nginx转发。在机器中有两台Tomcat服务器,分别为tomcatA,tomcatB,它们都运行着一个名为nginxdemo
项目名。计划由Nginx监听80端口,然后转发到TomcatA(8081)和Tomcat(8082).
基本的Nginx和Tomcat关系图,如下面的结构图所示
Nginx安装完毕后,一般情况(除了自己编译或自己指定了安装位置),核心的配置文件都在/etc/nginx/config.d
目录下,主要配置了default.conf
、upstream.conf
配置文件。
upstream.conf配置文件
在这个文件主要是配置了所有需要代理的服务器的地址,下面是具体配置,主要定义多组的upstream地址:
#80端口(Nginx)映射为下列的上游服务器
upstream nginxdemoweb{#nginxdemoweb是一组上游服务器的地址,可以指定多台,其中还有许多的参数
server 192.168.x.x:8081;#TomcatA,server 跟着的是具体的服务器地址和端口(默认是80端口)
server 192.168.x.x:8082;#TomcatB
ip_hash;#Nginx提供的一种保证会话共享的实现,同一个ip每次访问都会分配到指定的上游服务器。
}
default.conf配置文件
defalut.conf
主要配置了监听80端口,用于转发HTTP请求到TomcatA和TomcatB服务器,下面是详细的配置:
#默认的配置文件配置的是80的端口的监听,测试端口使用8888先
server {
listen 80;#指定Nginx监听的端口,
server_name test;#指定服务器名字,一般是域名,不同的域名会通过请求头中的HOST字段,匹配到特定的server块,转发到对应的应用服务器中去.
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
#业务平台的系统
location /nginxdemo {# location指定拦截那些请求,/nginxdemo 代表会拦截所有的/nginxdemo开头的请求,所以会拦截到测试的项目的请求。
proxy_pass http://nginxdemoweb;#proxy_pass代表的拦截了的请求,Nginx转发的目标地址,这里的nginxdemoweb就是upstream.conf中定义的nginxdemoweb的服务器组名字。
proxy_redirect default; #默认是default,此外还有指定地址等各种重定向。
proxy_set_header Host $host:$server_port;#决定了上游服务器拿到的host和port,关键
proxy_set_header X-Real-IP $remote_addr;#真实的IP地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Cookie $http_cookie;
proxy_connect_timeout 100;#连接上游服务器的超时时间
proxy_send_timeout 30;#发送数据到上游服务器的超时时间,如果超过了30秒,没有数据发送到上有服务器则会断开连接
proxy_read_timeout 60;#与上面的配置相反,从上有服务器中读取响应的数据,超过60秒都还没响应的数据,则关闭与上游服务器的连接
}
#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 /usr/share/nginx/html;
}
}
执行nginx -s reload
进行重新加载配置,保证启动了TomcatA和TomcatB,然后就可以通过Nginx的监听端口来访问nginxdemo
项目,访问的地址为http://192.168.x.x:80/nginxdemo
,这个IP和项目,需要修改为实际的IP,例子中的IP和项目都只是例子。
总结
Nginx实现转发请求到多台上游服务器,基本的操作步骤,先准备两台Tomcat,可以是同一台机器,如果同一台机器则需要保证端口不要冲突;然后安装Nginx,安装后,进行配置upstrem和location
,完成Nginx端口监听和转发的配置。然后通过Nginx监听端口访问项目能够访问成功,代表配置成功了。在这里的实例中,实现的session共享的方式,是在upstream中配置了ip_hash;
,这个是Nginx提供的处理session会话问题的方式,这种方式保证了指定IP的用户访问的永远都是同一台上游服务器,这样就不会请求到了另外的服务器导致session失效的问题。