此文僅做入門學習,以及記錄下配置中遇到的坑。首先nginx+tomcat主要爲了實現負載均衡 (分發請求)。爲了解釋清楚負載均衡,這裏假設www.test.com採用這種配置,當咱們去訪問www.test.com這個網址的時候,請求是傳到了nginx服務器,而後由nginx分發到tomcat,假設咱們啓動了10個tomcat,nginx根據咱們的配置分發請求給指定的tomcat,減輕服務器壓力。css
nginx-1.8.0html
apache-tomcat-6.0.20nginx
apache-tomcat-8.0.30apache
解壓後在nginx-1.8.0\conf\中找到Nginx配置文件nginx.conf進行配置。後端
server { listen 8080; server_name localhost; #location / { # proxy_pass http://backend_tomcat; #} }
先找到配置文件中server{},這裏listen 8080監聽8080端口緩存
若是啓動了nginx,輸入http://localhost:8080會看見tomcat
接下來取消註解location / {
proxy_pass http://backend_tomcat;
}這裏標示將請求轉發給backend_tomcat(名字隨意),而後在http裏配置backend_tomcat,與server同一級。服務器
http{ upstream backend_tomcat{ server 127.0.0.1:80 weight=1; server 127.0.0.1:8888 weight=1; } server { } }
這裏配置兩個server對應兩個tomcat,一個80端口的tomcat6,一個8888端口的tomcat8,weight表示訪問的權重。負載均衡
配置好後,啓動tomcat6和tomcat8,啓動nginx,訪問http://localhost:8080一直刷新,會看見在tomcat6和tomcat8界面切換。實現分發請求jsp
這裏主要說在使用nginx時,因爲咱們的請求是轉發的,因此對於靜態的文件沒法直接加載,這裏須要配置靜態分離,即將js,css,image等靜態資源放在nginx服務器,jsp,do,action等去分發請求。
操做以下
server { listen 8080; server_name localhost; location ~ .*\.(css|js|gif|jpg|png|bmp|swf)$ #由nginx處理靜態頁面 { expires 10d; #使用expires緩存模塊,緩存到客戶端30天 root html; } location ~ \.(jsp|action)$ { proxy_pass http://backend_tomcat; } }
這裏貼出代碼注意,此時須要將第二點處的location /(以下圖) 改成location ~ \.(jsp|action)$(如上圖),第一個表示全部請求,第二個表示攔截以.jsp或者.action結尾的請求
root html表示攔截到的靜態文件去html文件夾找,這裏的html文件夾表示安裝目錄\nginx-1.8.0\html文件夾,能夠在html裏放一個test文件夾,放一個圖片test.png,啓動nginx,輸入http://localhost:8080/test/test.png,此時能夠訪問
server { listen 8080; server_name localhost; location / { proxy_pass http://backend_tomcat; } }
若是按上述配置將請求轉發到項目位置,並將項目靜態文件放到html文件夾下,此時發現報錯,查看文件時發如今服務器的jsp頁面中的basePath會被解析爲backend_tomcat加上端口+項目名,系統找不到backend_tomcat,此時須要在添加proxy_set_header Host, proxy_set_header,這裏做用及時重寫請求頭,防止後端服務器處理時認爲全部請求都來自反向代理服務器。
server { listen 8080; server_name localhost; #location / { # proxy_pass http://backend_tomcat; #} location ~ .*\.(css|js|gif|jpg|png|bmp|swf)$ #由nginx處理靜態頁面 { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; expires 10d; #使用expires緩存模塊,緩存到客戶端30天 root filetest; } location ~ \.(jsp|action)$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://backend_tomcat; }
如圖,配置後,重跑ngnix,發現請求地址對了,可是對於nginx中的靜態文件未顯示端口,加載不出靜態文件。此時再加上host中的端口,以下圖
location ~ .*\.(css|js|gif|jpg|png|bmp|swf)$ #由nginx處理靜態頁面 { proxy_set_header Host $host:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; expires 10d; #使用expires緩存模塊,緩存到客戶端30天 root filetest; } location ~ \.(jsp|action)$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://backend_tomcat;
從新啓動nginx,配置完成,正常訪問