正向代理
正向代理也就是傳說中的代理。
比如我們常用的翻牆軟件就是這個代理者。用戶將請求發送至代理服務器,代理服務器向實際請求位置獲取數據,然后打包發送至用戶。
從網站來講,網站是不知道請求者的信息的,只對代理服務器進行記錄,是否知道用戶信息取決於代理服務器是否告訴網站。
結論就是正向代理是一個位於客戶端可服務端之間的服務器,從服務端獲取客戶端需要訪問的內容通過代理服務器返回給客戶端。
反向代理
當用戶訪問的內容在當前服務器上面不存在的時候,剛好該服務器設置了反向代理功能,又剛好在反向代理的服務器列表中的某一台服務器有這個頁面,那么代理者會把這個內容返回給客戶端。但是客戶端卻當做目標服務器上存在該頁面。
通俗一點來講,我們打某某客服電話的時候撥通的是一個固定的電話號碼,但是服務台會幫我們轉接至空閑的客服人員,而對於客戶來講,只要能幫我們解決問題就行了,哪個客服沒有關系。
對於網站優化來講,當面對成千上萬的訪問者時,反向代理會將請求分別分給給不同的服務器實現相同的功能,這樣就能大大的減少服務器的負荷。
Nginx工具的作用以及使用方法
剛剛我們說到了反向代理實現服務器的負載均衡,現在我們來聊一下具體實現。
1. Nginx的安裝
下載Nginx,解壓,安裝到指定目錄。
lap@lap-KVM:~$ wget http://labfile.oss.aliyuncs.com/nginx-1.7.9.tar.gz lap@lap-KVM:~$ tar zxvf nginx-1.7.9.tar.gz lap@lap-KVM:~$ cd nginx-1.7.9 lap@lap-KVM:~/nginx-1.7.9$ ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module lap@lap-KVM:~/nginx-1.7.9$ # make && make install
切換到Nginx的安裝目錄下,啟動Nginx。
lap@lap-KVM:~$ cd /usr/local/nginx/
lap@lap-KVM:/usr/local/nginx$ sudo ./nginx-1.7.9/objs/nginx
此時訪問本機將會看到Nginx的歡迎界面。
安裝好了Nginx之后我們開始具體的配置。
2. 配置nginx.conf文件
nginx.conf里提供了很多調節優化的地方,這里簡述http模塊的幾個常用參數,詳細配置請google一下。
簡單介紹一下紅色方框內的一些配置參數。
第一個方框內的是關於日志的設置:
-
log_format 定義日志格式
-
access_log 設置是否保存訪問日志,設置為off可以降低磁盤IO而提升速度。
第二個方框內的是一些基本設置:
-
sendfile 指向sendfile()函數。sendfile()在磁盤和TCP端口(或者任意兩個文件描述符)之間復制數據。sendfile()直接從磁盤上讀取數據到操作系統緩沖,因此會更有效率。
-
tcp_nopush 配置nginx在一個包中發送全部的頭文件,而不是一個一個發送。
-
tcp_nodelay 配置nginx不要緩存數據,快速發送小數據。
-
keepalive_timeout 指定了與客戶端的keep-alive鏈接的超時時間。服務器會在這個時間后關閉鏈接。
第三個方框內的是關於壓縮功能的設置:
-
gzip 打開壓縮功能可以減少需要發送的數據的數量。
-
gzip_disable 為指定的客戶端禁用 gzip 功能。
-
gzip_proxied 允許或禁止基於請求、響應的壓縮。設置為any,就可以gzip所有的請求。
-
gzip_comp_level 設置了數據壓縮的等級。等級可以是 1-9 的任意一個值,9 表示最慢但是最高比例的壓縮。
- gzip_types 設置進行 gzip 的類型。
接下來看一下http模塊中的子模塊server,以及server中的子模塊location的配置:
其中:
-
listen 表示當前的代理服務器監聽的端口,默認的是監聽80端口。
-
server_name 表示監聽到之后需要轉到哪里去,localhost表示轉到本地,也就是直接到nginx文件夾內。
-
location 表示匹配的路徑。
-
root 表示到指定文件路徑尋找文件,可用於靜態文件。
-
index 表示默認主頁,可以指定多個,按順序查找。
-
deny和allow 是訪問控制設置,禁止或允許某個IP或者某個IP段訪問。也可以指定unix,允許socket的訪問。
-
limit_rate_after 設置不限速傳輸的響應大小。當傳輸量大於此值時,超出部分將限速傳送。
-
limit_rate 限制向客戶端傳送響應的速率限制。參數的單位是字節/秒,設置為0將關閉限速。比如圖片中表示不限速部分為3m,超過了3m后限速為20k/s。
Nginx+Tomcat
在nginx.conf中新建一個location,用正則表達式將所有JSP的請求匹配到該location中:
-
proxy_set_header Host $host; 后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP。
-
client_max_body_size 10m; 允許客戶端請求的最大單文件字節數。
-
client_body_buffer_size 128k; 緩沖區代理緩沖用戶端請求的最大字節數。
-
proxy_connect_timeout 90; Nginx跟后端服務器連接超時時間。
-
proxy_read_timeout 90; 連接成功后,后端服務器響應時間。
-
proxy_buffer_size 4k; 設置代理服務器保存用戶頭信息的緩沖區大小。
-
proxy_buffers 6 32k; proxy_buffers緩沖區。
-
proxy_busy_buffers_size 64k; 高負荷下緩沖大小。
-
proxy_temp_file_write_size 64k; 設定緩存文件夾大小。
對於靜態文件的請求,我們也新建一個location,將常見圖片、css、js等請求匹配到該location中:
配置非常簡單,通過root關鍵字,將匹配到的請求都到tomcat/webapps/ROOT目錄下直接查找。而expires 30d則表示使用expires緩存模塊,緩存到客戶端30天。如果未緩存這些文件,我們訪問的Tomcat主頁將會沒有任何樣式,這樣就不美觀了。
之后就到了最關鍵的負載均衡的配置的,我們在其中加入分攤載荷的服務器列表:
這樣就能將用戶的請求發送到不同的服務器上面了,另外也可以給不同的服務器添加不同的優先級,在server后面加上一個權重weight,權重越大表示訪問到的機會越大,默認為1。
這樣一個完整的反向代理就實現了。