nginx+tomcat入門配置

    此文僅做入門學習,以及記錄下配置中遇到的坑。首先nginx+tomcat主要爲了實現負載均衡 (分發請求)。爲了解釋清楚負載均衡,這裏假設www.test.com採用這種配置,當咱們去訪問www.test.com這個網址的時候,請求是傳到了nginx服務器,而後由nginx分發到tomcat,假設咱們啓動了10個tomcat,nginx根據咱們的配置分發請求給指定的tomcat,減輕服務器壓力。css

1.工具

nginx-1.8.0html

apache-tomcat-6.0.20nginx

apache-tomcat-8.0.30apache

2.Nginx+tomcat配置

解壓後在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

3.nginx實現靜態分離

這裏主要說在使用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;
        }
        }

4.nignx配置導向項目

        若是按上述配置將請求轉發到項目位置,並將項目靜態文件放到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,配置完成,正常訪問

相關文章
相關標籤/搜索