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


     在使用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里面可以看到"/>
    即可实现免项目名访问

  • 相关阅读:
    C/C++之指针
    mysql--sql语言之DDL,DML
    mysql--之在Windows上的安装
    mysql--之mysql在linux上的安装
    动态资源和静态资源
    Tomcat文件夹和server配置文件解析
    和 的区别
    个数可变形参
    Java方法里参数的传递机制
    8中基本数据类型
  • 原文地址:https://www.cnblogs.com/arebirth/p/nginxerror02.html
Copyright © 2020-2023  润新知