1. 程式人生 > >【Nginx學習05】nginx 聯合tomcat實現動靜分離

【Nginx學習05】nginx 聯合tomcat實現動靜分離

前言

Nginx動靜分離簡單來說就是把動態跟靜態請求分開,不能理解成只是單純的把動態頁面和靜態頁面物理分離。嚴格意義上說應該是動態請求跟靜態請求分開,可以理解成使用Nginx處理靜態頁面,Tomcat、Resin出來動態頁面。

動靜分離從目前實現角度來講大致分為兩種:

一種是純粹的把靜態檔案獨立成單獨的域名,放在獨立的伺服器上,也是目前主流推崇的方案;這種的實現方案比較簡單,缺點就是需要額外的配置若干臺伺服器。

另外一種方法就是動態跟靜態檔案混合在一起釋出,通過nginx程式碼來分開。這樣也是本次課程要講解的,具體怎麼來實現呢,下面會介紹到,通過location指定不同的字尾名實現不同的請求轉發。

通過expires引數設定,可以使瀏覽器快取過期時間,減少與伺服器之前的請求和流量。具體Expires定義:是給一個資源設定一個過期時間,也就是說無需去服務端驗證,直接通過瀏覽器自身確認是否過期即可,所以不會產生額外的流量。expires的設定時間需要我們根據自身的業務情況來具體設定。

此種方法非常適合不經常變動的資源。(如果經常更新的檔案,不建議使用Expires來快取),假如我們設定為3d,表示在這3天之內訪問這個URL,傳送一個請求,比對伺服器該檔案最後更新時間沒有變化,則不會從伺服器抓取,返回狀態碼304,如果有修改,則直接從伺服器重新下載,返回狀態碼200。


正文

本文預設是在配置好tomcat 和 nginx 的基礎之上的,具體配置方法參照其他博文。

1.配置好 nginx.conf檔案

在http模組模組中加入如下程式碼

	upstream mylocal{
		server 106.12.129.252:8080;
	}

mylocal為反向代理群的名字,一個local下面可以有很多的server

106.12.129.252:8080,為我自己的伺服器的地址,8080位我設定的tomcat的監聽埠

在http模組模組中加入如下程式碼
server程式碼中的其他程式碼我們不列出,下面是為了實現動靜分離而新增的新程式碼。

location /
		{
			proxy_next_upstream http_502 http_504 error timeout invalid_header;
			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 https://mylocal;
		}
		#動態部分,以php或者jsp結尾的
		location ~ .*\.(php|jsp|cgi|shtml)?$
		{
			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  https://mylocal;#跳轉到我們設定的反向代理部分,tomcat部分
		}
		
    #靜態資源部分
		location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
		{
			#靜態資源存放目錄,設定快取時間為3天
			root /usr/share/nginx/html/;
			expires      30d;
		}
	

配置靜態資源
我們在/usr/share/nginx/html/下新增靜態檔案,如下:
在這裡插入圖片描述

重啟nginx伺服器

nginx -s reload #reload方式是平滑的啟動nginx

在瀏覽器輸入域名驗證
在這裡插入圖片描述
此域名是我們106.12.129.252對應的域名,可知,已經成功的被反向代理到了tomcat的8080埠,實現了訪問動態資源跳轉到動態頁面。

在瀏覽器中訪問靜態資源,如下,我們訪問 index.html檔案,出現如下介面
在這裡插入圖片描述

表明已經成功實現訪問靜態資源跳轉到靜態資源頁。


關於我自己

  • 一個正派但不正經的程式設計師

  • 18年計算機專業碩士畢業生,騰訊SNG部門實習生,現加盟快手科技 ,後端研發工程師一枚

  • 喜歡技術,喜歡網際網路

  • 民遙控 ,趙雷、陳粒、宋冬野

  • 公眾號:程式設計美學,時不時寫篇文章,偶爾數羊,其實說到底,只是想和你聊聊
    在這裡插入圖片描述