Nginx反向代理Tomcat静态资源无法加载以及请求链接错误

时间:2021-06-21 16:31:56

 在使用Nginx实现Tomcat的负载均衡的时候,项目发布到了Tomcat,Nginx也配置好了,

当访问的时候发现了与预期不符

表现为:

  静态资源加载失败

  链接跳转地址错误

下面是我错误的配置文件

#user  nobody;
worker_processes ; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections ;
} http {
include mime.types;
default_type application/octet-stream; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout ;
keepalive_timeout ; #gzip on; upstream dailyLB{
server 169.254.18.25:;
server 169.254.18.25:;
} server {
listen ;
server_name 169.254.18.25; #charset koi8-r; #access_log logs/host.access.log main; location / {
root /home/ftpuser;
} #error_page /.html;
} server {
listen ;
server_name 169.254.18.25; location /{
proxy_pass http://dailyLB;
} } }

Nginx可以访问tomcat

但是启动后,你会发现,可以访问默认的首页,但是没有静态文件

Nginx反向代理Tomcat静态资源无法加载以及请求链接错误

 然后当我点击登录的时候跳转的地址是这样的,根本无法加载

Nginx反向代理Tomcat静态资源无法加载以及请求链接错误

dailylb是我的 upstream的指定地址,但是我的tomcat实际要访问的确是169.254.18.25:8080,这就导致了,访问的地址错误,那么也就无法访问请求

解决方案:

在Nginx的配置文件中nginx.conf里面配置server的地方加上如下配置

location ~ .* {
proxy_pass http://你的upstream配置的名称;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Fonwarded-For $proxy_add_x_forwarded_for;
}

这时我的配置完正确的nginx配置文件供参考,

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

upstream dailyLB{
server 169.254.18.25:8080;
server 169.254.18.25:8081;
}

server {
listen 80;
server_name 169.254.18.25;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root /home/ftpuser;
}

#error_page 404 /404.html;
}

server {
listen 808;
server_name 169.254.18.25;

location /{
proxy_pass http://dailyLB;
}

location ~ .* {
proxy_pass http://dailyLB;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Fonwarded-For $proxy_add_x_forwarded_for;
}
}

}

修改完后,去重新加载nginx的配置文件即可解决问题

/nginx -s reload

注意:

  我的tomcat配置了context所以不需要通过项目名即可直接访问项目,没有配置的情况下是需要这样的  

  http://nginx反向代理访问的地址:port/项目名

  那么如何配置不需要项目名即可访问的呢?

在tomcat的conf/server.xml文件中
Host标签中添加<Context path="/" docBase="/usr/local/soft/n2-tomcat8/webapps/consumer 这里就是你项目名字,在webapps里面可以看到"/> 即可实现免项目名访问

Nginx反向代理Tomcat静态资源无法加载以及请求链接错误