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里面可以看到"/>
即可實現免項目名訪問

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM