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