tomcat + nginx 配置

之前干的蠢事

之前帮导师部署以前一个学姐的 Java Web 项目,需求是不想输入类似 <ip>:8080 这样。

服务器是tomcat7,系统是 Cent OS 7。

那时候不知道怎么搜的,直接暴力删掉 webapp/ROOT 下的所有东西,然后把war包改成 ROOT.war 放到webapp目录下面,然后端口的问题没有去改 conf/server.xml,而是用了一个我现在都不清楚我当时是怎么想的方法,用firewall去转发 80->8080。当时因为这个还特地查了怎么设置firewall转发端口和开启端口。

现在想想就觉得好麻烦,正好这个项目要当毕设来重做,就干脆把这个部署方式也先改掉。

移除firewall转发规则

首先我把firewall的转发规则给去掉了:firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080

修改tomcat配置文件

然后修改tomcat的配置文件: conf/server.xml, 设置自定义根目录

1
2
3
4
5
6
7
8
9
10
11
12
<Server>
<!-- ... -->
<Service>
<!-- ... -->
<Host>
<!-- 加入 Context 配置, 设置 /data/server/web 是根目录-->
<Context path="" docBase="/data/server/web" reloadable="true" crossContext="true" />
</Host>
</Service>
</Server>

解压war包到自定义根目录

tomcat配置完成之后就可以先去部署tomcat了,解压war包到自定义根目录即可。

1
unzip ROOT.war -d /data/server/web/

配置nginx

安装/启动

安装nginx只需要直接用yum。

1
yum install nginx

启动nginx

1
systemctl start nginx

修改配置文件

设置nginx默认主目录以及默认首页后缀为jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /data/server/web;
# 设置主页
index index.jsp;
location ~ .*\.(js|css)?$ {
# 设置主目录
root /data/server/web/;
access_log off;
expires 0;
}
# 反代tomcat
location / {
proxy_pass http://localhost:8090;
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_read_timeout 30m;
client_max_body_size 30m;
}
}

重启nginx

设置完成之后重启nginx即可:systemctl restart nginx.service

小结

tomcat+nginx反代的设置其实很简单,活用搜索引擎就能找到。
如果是多个tomcat,只需要修改 conf/server.xml 中相关端口不要一样,然后加一份 nginx 配置文件设置server_name映射不同的域名即可。