首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx反向代理Tomcat静态资源无法加载以及请求链接错误

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

作者头像
Arebirth
发布2020-06-19 15:35:03
4K0
发布2020-06-19 15:35:03
举报

在使用Nginx实现Tomcat的负载均衡的时候,项目发布到了Tomcat,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;
        }

    }

}

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里面可以看到"/> 即可实现免项目名访问
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档