在Tomcat前端加反向代理服务器,在同一台主机上构建nginx
[root@tomcat ~]# yum install nginx
Installed:
nginx.x86_64 1:1.12.2-1.el7
配置nginx能够把请求反代给Tomcat,两种方式
- 把所有请求都反代过去,无论是静态还是动态,这不是一种理想的方式
- 可以把jsp
java所写的代码,一般有两种资源后缀,.do,另外一种是.jsp,假如运行在Tomcat之上,因此去匹配请求的URL后缀,而后,只把do 和 jsp 结尾的反代给Tomcat,而静态的,都由自己进行处理
假设动静资源都放在一起了,先说一个主机,动静资源都在一起,都在/usr/share/tomcat/webapps/目录下,nginx的根路径也应该指向/usr/share/tomcat/webapps/,假如说主站是在/root目录下,在nginx上还需要专门加一个location,或者是把根直接指向/root目录,也可以
修改nginx配置文件
[root@tomcat /etc/nginx]# vim nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/tomcat/webapps/ROOT/;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
location ~* \.(jsp|do)$ {
proxy_pass http://127.0.0.1:8080;
}
因为nginx自己不会去找ROOT,所以需要写上
127.0.0.1:8080; 使用localhost上的虚拟主机进行请求响应,或者使用本机的IP地址也是一样的,使用本机的IP,也是localhost进行响应的,除非是使用server1才会由后端server1上的虚拟主机进行响应。如果地址写的是server1:8080,那么nginx所在的机器效可以解析server1才可以,否则无法完成代理
启动服务
[root@tomcat /etc/nginx]# systemctl restart nginx
[root@tomcat /etc/nginx]# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::80 :::*
LISTEN 0 100 :::8080 :::*
LISTEN 0 100 :::8009 :::*
访问测试
[root@server2 ~]# curl 192.168.111.101
<html>
<head><title>403 Forbidden</title></head>
注意:对方的默认资源页面是index.jsp
在nginx上配置的时候,没表明.jsp的文件可以当做默认主页面,所以就把index.html请求到后端去了,后端主机就没有
修改配置文件进行适配
[root@tomcat ~]# vim /etc/nginx/nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/tomcat/webapps/ROOT/;
index index.jsp index.html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
location ~* \.(jsp|do)$ {
proxy_pass http://127.0.0.1:8080;
}
重新加载配置文件
[root@tomcat ~]# nginx -s reload
访问测试
[root@server2 ~]# curl 192.168.111.101 -I
HTTP/1.1 200 OK
Server: nginx/1.12.2
点击主页面上的Manager按钮无法跳转过去,因为nginx去找ROOT目录下的host-manager/html文件去了
location需要单独定义,和每个应用程序,在nginx上直接进行代理而且有多个应用,每一个应用都需要单独定义一个location,而且对于manager资源,页面文件还是在html目录下,所以location要定义好,指到manager还不够,还需要指定heml,因为默认资源时静态的,叫做index.html,而且是放在manager目录中的。还需要额外添加location。好在,像这种manager,一般也不应该在前端服务网关代理
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/92691