ngnix 詳解

4?Nginxrpm軟件包安裝

4.1?安裝包在位置

D:\講課內容--\新巴巴運動網\nginx高并發解決\nginx安裝包

4.2?此種安裝方式不用安裝gcc等編譯工具

4.3?安裝命令如下

rpm –ivh nginx

?

5?配置虛擬主機

5.1?什么是虛擬主機

虛擬主機是一種特殊的軟硬件技術,它可以將網絡上的每一臺計算機分成多個虛擬主機,每個虛擬主機可以獨立對外提供www服務,這樣就可以實現一臺主機對外提供多個web服務,每個虛擬主機之間是獨立的,互不影響的。

如下圖:

?

?

通過nginx可以實現虛擬主機的配置,nginx支持三種類型的虛擬主機配置,1、基于ip的虛擬主機, 2、基于域名的虛擬主機 3、基于端口的虛擬主機

?

5.2?基于域名的虛擬主機配置

5.2.1?需求

兩個域名指向同一臺服務器,用戶訪問不同的域名顯示不同的網頁內容。

兩個域名是aaa.test.combbb.test.com

一臺服務器還使用虛擬機192.168.101.3代替

?

5.2.2?創建工程目錄

創建/usr/local/aaa_html,此目錄為aaa.test.com域名訪問的目錄

創建/usr/local/bbb_html,此目錄為bbb.test.com域名訪問的目錄

目錄中的內容使用nginx自帶的html文件,將/usr/local/nginx/html中的內容拷貝分別拷貝到上邊兩個目錄中,并且將aaa_html目錄中的index.html內容改為:“Welcome to aaa nginx!”

將bbb_html目錄中的index.html內容改為“Welcome to bbb?nginx!”

?

5.2.3?虛擬主機配置

修改/usr/local/nginx/conf/nginx.conf文件,添加兩個虛擬主機,如下:

#配置虛擬主機aaa.test.com?

server {

#監聽的ip和端口,配置本機ip和端口

????????listen 192.168.101.3:80; ?

#虛擬主機名稱是aaa.test.com,請求域名aaa.test.com的url將由此server配置解析

????????server_name aaa.test.com; ?

#所有的請求都以/開始,所有的請求都可以匹配此location

????????location / {

#使用root指令指定虛擬主機目錄即網頁存放目錄

#比如訪問http://ip/test.html將找到/usr/local/aaa_html/test.html

#比如訪問http://ip/item/test.html將找到/usr/local/aaa_html/item/test.html

????????????????root /usr/local/aaa_html;

????#指定歡迎頁面,按從左到右順序查找

????????????????index index.html index.htm;

????????}

????}

?

#配置虛擬主機bbb.test.com

????server {

????????listen 192.168.101.3:80;

????????server_name bbb.test.com;

????????location / {

????????????????root /usr/local/bbb_html;

????????????????index index.html index.htm;

????????}

????}

?

6?nginx反向代理

6.1?什么是反向代理

通常的代理服務器,只用于代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,并將本來要直接發送到Web服務器上的http請求發送到代理服務器中由代理服務器向Internet上的web服務器發起請求,最終達到客戶機上網的目的。

而反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。

?

如下圖:

?

6.2?nginx+tomcat反向代理

6.2.1?需求

兩個tomcat服務通過nginx反向代理,本例子使用三臺虛擬機進行測試,

nginx服務器:192.168.101.3

tomcat1服務器:192.168.101.5

tomcat2服務器:192.168.101.6

如下圖:

?

?

?

6.2.2?啟動tomcat

tomcat使用apache-tomcat-7.0.57版本,在192.168.101.5192.168.101.6虛擬機上啟動tomcat

?

6.2.3?nginx反向代理配置

根據上邊的需求在nginx.conf文件中配置反向代理,如下:

?

#配置一個代理即tomcat1服務器

upstream tomcat_server1 {

????????????server 192.168.101.5:8080;

????????}

#配置一個代理即tomcat2服務器

????upstream tomcat_server2 {

????????????server 192.168.101.6:8080;

????????}

?

#配置一個虛擬主機

????server {

????????listen 80;

????????server_name aaa.test.com;

????????location / {

#域名aaa.test.com的請求全部轉發到tomcat_server1tomcat1服務上

????????????????proxy_pass http://tomcat_server1;

#歡迎頁面,按照從左到右的順序查找頁面

????????????????index index.jsp index.html index.htm;

????????}

?

????}

?

????server {

????????listen 80;

????????server_name bbb.test.com;

?

????????location / {

?#域名bbb.test.com的請求全部轉發到tomcat_server2tomcat2服務上

??????????????????proxy_pass http://tomcat_server2;

??????????????????index index.jsp index.html index.htm;

????????}

????}

?

6.2.4?測試

分別修改兩個tomcat下的webapps/ROOT/index.jsp的內容,使用tomcat1tomcat2兩個服務首頁顯示不同的內容,如下:

tomcat1下的index.jsp修改后:

tomcat2下的index.jsp修改后:

?

分別訪問aaa.test.combbb.test.com測試反向代理。

請求訪問aaa.test.com通過nginx代理訪問tomcat1,請求訪問bbb.test.com通過nginx代理訪問tomcat2

7?負載均衡

7.1?什么是負載均衡

負載均衡 建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。

負載均衡,英文名稱為Load Balance,其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。

?

7.2?nginx實現負載均衡

7.2.1?需求

nginx作為負載均衡服務器,用戶請求先到達nginx,再由nginx根據負載配置將請求轉發至 tomcat服務器。

nginx負載均衡服務器:192.168.101.3

tomcat1服務器:192.168.101.5

tomcat2服務器:192.168.101.6

?

7.2.2?配置

根據上邊的需求在nginx.conf文件中配置負載均衡,如下:

?

upstream tomcat_server_pool{

????????server 192.168.101.5:8080 weight=10;

????????server 192.168.101.6:8080 weight=10;

????????}

?

????server {

????????listen 80;

????????server_name aaa.test.com;

????????location / {

?????????????????proxy_pass http://tomcat_server_pool;

?????????????????index index.jsp index.html index.htm;

????????}

????}

?

7.2.3?測試

請求aaa.test.com,通過nginx負載均衡,將請求轉發到tomcat服務器。

通過觀察tomcat的訪問日志或tomcat訪問頁面即可知道當前請求由哪個tomcat服務器受理。

?

8?nginx負載均衡高可用

8.1?什么是負載均衡高可用

nginx作為負載均衡器,所有請求都到了nginx,可見nginx處于非常重點的位置,如果nginx服務器宕機后端web服務將無法提供服務,影響嚴重。

為了屏蔽負載均衡服務器的宕機,需要建立一個備份機。主服務器和備份機上都運行高可用(High Availability)監控程序,通過傳送諸如“I am alive”這樣的信息來監控對方的運行狀況。當備份機不能在一定的時間內收到這樣的信息時,它就接管主服務器的服務IP并繼續提供負載均衡服務;當備份管理器又從主管理器收到“I am alive”這樣的信息時,它就釋放服務IP地址,這樣的主服務器就開始再次提供負載均衡服務。

?

8.2?keepalived+nginx實現主備

8.2.1?什么是keepalived

keepalived是集群管理中保證集群高可用的一個服務軟件,用來防止單點故障。

? Keepalived的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,并將有故障的web服務器從系統中剔除,當web服務器工作正常后Keepalived自動將web服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器。

?

8.2.2?keepalived工作原理

keepalived是以VRRP協議為實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協議。

虛擬路由冗余協議,可以認為是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backupmaster上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到VRRP包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backupmaster。這樣的話就可以保證路由器的高可用了。

keepalived主要有三個模塊,分別是corecheck和VRRP。core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。VRRP模塊是來實現VRRP協議的。

?

8.2.3?keepalived+nginx實現主備過程

8.2.3.1?初始狀態

8.2.3.2?主機宕機

8.2.3.3?主機恢復

8.2.4?高可用環境

兩臺nginx,一主一備:192.168.101.3192.168.101.4

兩臺tomcat服務器:192.168.101.5192.168.101.6

?

8.2.5?安裝keepalived

?

分別在主備nginx上安裝keepalived

D:\講課內容--\新巴巴運動網\nginx高并發解決\高可用\keepalived\安裝包

安裝命令:

查看openssl的版本:要求必須是openssl-1.0.1e以上才行、如果版本已經符合、不用再安裝openssl

?(非必須)Rpm –Uvh openssl-1.0.1e-30.el6.8.i686.rpm

安裝keepalived軟件

?rpm –ivh keepalived-1.2.13-5.el6_6.i686.rpm

?

8.2.6?配置keepalived

8.2.6.1?主nginx

修改主nginx下/etc/keepalived/keepalived.conf文件

?

! Configuration File for keepalived

?

#全局配置

global_defs {

???notification_email { ?#指定keepalived在發生切換時需要發送email到的對象,一行一個

?????XXX@XXX.com

???}

???notification_email_from XXX@XXX.com ?#指定發件人

???#smtp_server XXX.smtp.com ????????????????????????????#指定smtp服務器地址

???#smtp_connect_timeout 30 ??????????????????????????????#指定smtp連接超時時間

???router_id LVS_DEVEL ???????????????????????????????????#運行keepalived機器的一個標識

}

?

vrrp_instance VI_1 {

????state MASTER ??????????#標示狀態為MASTER 備份機為BACKUP

????interface eth0 ????????#設置實例綁定的網卡

????virtual_router_id 51 ??#同一實例下virtual_router_id必須相同

????priority 100 ??????????#MASTER權重要高于BACKUP 比如BACKUP99 ?

????advert_int 1 ??????????#MASTERBACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

????authentication { ??????#設置認證

????????auth_type PASS ????#主從服務器驗證方式

????????auth_pass 8888

????}

????virtual_ipaddress { ???#設置vip

????????192.168.101.100 ??????#可以多個虛擬IP,換行即可

????}

}

?

8.2.6.2?備nginx

修改備nginx下/etc/keepalived/keepalived.conf文件

配置備nginx時需要注意:需要修改stateBACKUP , priorityMASTER低,virtual_router_idmaster的值一致

?

! Configuration File for keepalived

?

#全局配置

global_defs {

???notification_email { ?#指定keepalived在發生切換時需要發送email到的對象,一行一個

????XXX@XXX.com

???}

???notification_email_from XXX@XXX.com?? ? ?#指定發件人

???#smtp_server XXX.smtp.com ???????????????????????????? #指定smtp服務器地址

???#smtp_connect_timeout 30 ??????????????????????????????#指定smtp連接超時時間

???router_id LVS_DEVEL ???????????????????????????????????#運行keepalived機器的一個標識

}

?

vrrp_instance VI_1 {

????state BACKUP ??????????#標示狀態為MASTER 備份機為BACKUP

????interface eth0 ????????#設置實例綁定的網卡

????virtual_router_id?51 ??#同一實例下virtual_router_id必須相同

????priority 99 ???????????#MASTER權重要高于BACKUP 比如BACKUP99 ?

????advert_int 1 ??????????#MASTERBACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

????authentication { ??????#設置認證

????????auth_type PASS ????#主從服務器驗證方式

????????auth_pass 8888

????}

????virtual_ipaddress { ???#設置vip

????????192.168.101.100 ??????#可以多個虛擬IP,換行即可

????}

}

?

8.2.7?測試

主備nginx都啟動keepalivednginx

service keepalived start

./nginx

?

8.2.7.1?初始狀態

查看主nginxeth0設置:

vip綁定在主nginxeth0上。?

查看備nginxeth0設置:

vip沒有綁定在備nginxeth0上。?

訪問ccc.test.com,可以訪問。

?

8.2.7.2?主機宕機

將主nginxkeepalived停止或將主nginx關機(相當于模擬宕機),查看主nginxeth0

eth0沒有綁定vip

?

注意這里模擬的是停止 keepalived進程沒有模擬宕機,所以還要將nginx進程也停止表示主nginx服務無法提供。

?

查看備nginxeth0

vip已經漂移到備nginx

訪問ccc.test.com,可以訪問。

?

8.2.7.3?主機恢復

將主nginxkeepalivednginx都啟動。

查看主nginxeth0

?

查看備nginxeth0

vip漂移到主nginx。?

查看備nginxeth0

eth0沒有綁定vip

訪問:ccc.test.com,正常訪問。

注意:主nginx恢復時一定要將nginx也啟動(通常nginx啟動要加在開機啟動中),否則即使vip漂移到主nginx也無法訪問。

?

8.2.8?解決nginx進程和keepalived不同時存在問題

8.2.8.1?問題描述

keepalived是通過檢測keepalived進程是否存在判斷服務器是否宕機,如果keepalived進程在但是nginx進程不在了那么keepalived是不會做主備切換,所以我們需要寫個腳本來監控nginx進程是否存在,如果nginx不存在就將keepalived進程殺掉。

?

8.2.8.2?nginx進程檢測腳本

在主nginx上需要編寫nginx進程檢測腳本(check_nginx.sh),判斷nginx進程是否存在,如果nginx不存在就將keepalived進程殺掉,check_nginx.sh內容如下:

#!/bin/bash

# 如果進程中沒有nginx則將keepalived進程kill

A=`ps -C nginx --no-header |wc -l` ?????## 查看是否有 nginx進程 把值賦給變量A

if [ $A -eq 0 ];then ???????????????????## 如果沒有進程值得為 零

???????service keepalived stop ?????????## 則結束 keepalived 進程

fi

?

將check_nginx.sh拷貝至/etc/keepalived下,

腳本測試:

將nginx停止,將keepalived啟動,執行腳本:sh /etc/keepalived/check_nginx.sh

從執行可以看出自動將keepalived進程kill掉了。

?

8.2.8.3?修改keepalived.conf

修改主nginx的keepalived.conf,添加腳本定義檢測:

注意下邊紅色標識地方:

?

#全局配置

global_defs {

???notification_email { ?#指定keepalived在發生切換時需要發送email到的對象,一行一個

?????XXX@XXX.com

???}

???notification_email_from miaoruntu@itcast.cn ?#指定發件人

???#smtp_server XXX.smtp.com ????????????????????????????#指定smtp服務器地址

???#smtp_connect_timeout 30 ??????????????????????????????#指定smtp連接超時時間

???router_id LVS_DEVEL ???????????????????????????????????#運行keepalived機器的一個標識

}

vrrp_script check_nginx {

????script "/etc/keepalived/check_nginx.sh" ????????##監控腳本

????interval 2 ?????????????????????????????????????##時間間隔,2

????weight 2 ???????????????????????????????????????##權重

}

vrrp_instance VI_1 {

????state MASTER ??????????#標示狀態為MASTER 備份機為BACKUP

????interface eth0 ????????#設置實例綁定的網卡

????virtual_router_id 51 ??#同一實例下virtual_router_id必須相同

????priority 100 ??????????#MASTER權重要高于BACKUP 比如BACKUP99

????advert_int 1 ??????????#MASTERBACKUP負載均衡器之間同步檢查的時間間隔,單位是秒

????authentication { ??????#設置認證

????????auth_type PASS ????#主從服務器驗證方式

????????auth_pass 8888

????}

???track_script {

????????check_nginx ???????#監控腳本

???}

????virtual_ipaddress { ???#設置vip

????????192.168.101.100 ??????#可以多個虛擬IP,換行即可

????}

?

}

?

修改后重啟keepalived

?

8.2.8.4?測試

回到負載均衡高可用的初始狀態,保證主、備上的keepalivednginx全部啟動。

停止主nginx服務

觀察keepalived日志:

tail -f /var/log/keepalived.log

查看keepalived進程已經不存在。

查看eth0已經沒有綁定vip

?

9?nginx實現web緩存

9.1?什么是nginxweb緩存

httprequestresponse過程即客戶端發起一個url請求到web服務器,web服務器向客戶端響應,如果讓客戶端先請求給一個緩存服務器由緩存服務器中間轉發請求至web服務器,web服務器向客戶端響應也是通過緩存服務器給客戶端響應這個就是nginx的代理功能,nginx不僅有代理功能還有緩存功能,它可以將web服務器響應的信息緩存至內存或磁盤中,當用戶再次發起相同的urlnginx就不用請求緩存服務器而直接從緩存中取出響應給客戶端,從而大大提高請求響應的效率。如下圖:

9.2?proxy_cache緩存過程

proxy_cachenginx內置的一個緩存模塊,它用于反向代理時對后端web服務的內容進行緩存。這里需要注意proxy_cache只在使用反向代理proxy_pass時進行緩存

?

proxy_cache緩存過程如下:

1、客戶端第一次請求url,比如請求ccc.test.com/index.html

2nginx計算url的哈希值?

md5(url)

即:MD5('ccc.test.com/index.html'),得到b5ac8d82f6ef789fe7081ef4a43f9230

3、創建緩存目錄,寫入緩存數據

如果緩存目錄的規則設置為 levels=1:2,創建目錄如下:

取出b5ac8d82f6ef789fe7081ef4a43f9230的最后一位0作為目錄名創建目錄,再取出0前邊的兩位23作為目錄名在0目錄下邊創建目錄,即一級目錄為0,二級目錄名為23,最后將代理獲得的http響應數據存儲在緩存數據文件中,緩存文件命名為b5ac8d82f6ef789fe7081ef4a43f9230寫入0/23目錄下。

4、客戶端再次請求相同的url,對url進行哈希得到緩存數據文件的地址,如果找到緩存數據則直接返回給客戶端不再請求web服務器。

?

9.3?需求

1、對靜態文件進行緩存:html,js,css,png,gif,jpg,jpeg,bmp,swf

2、對符合url規則的請求進行緩存。

3、針對某個url進行清除緩存。

?

9.4?安裝ngx_cache_purge

ngx_cache_purge是第三方開發的一個nginx模塊,不包含在 Nginx 的源碼發布版,它的作用是清理nginx緩存,對FastCGIproxySCGI uWSGI緩存進行清除。

9.4.1?解壓ngx_cache_purge

將ngx_cache_purge-2.3.tar.gz拷貝至/usr/local/下,

tar -zxvf ngx_cache_purge-2.3.tar.gz

?

9.4.2?nginx添加ngx_cache_purge模塊

解壓nginx-1.8.0/usr/local/

cd /usr/local/

tar -zxvf nginx-1.8.0.tar.gz

進入nginx-1.8.0目錄

cd nginx-1.8.0

下邊的配置參數注意最后一行添加add-module=/usr/local/ngx_cache_purge-2.3

?

./configure \

--prefix=/usr/local/nginx \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/temp/nginx/client \

--http-proxy-temp-path=/var/temp/nginx/proxy \

--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \

--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \

--http-scgi-temp-path=/var/temp/nginx/scgi \

--add-module=/usr/local/ngx_cache_purge-2.3

?

編譯、安裝

make

make install

?

9.5?緩存配置

http {

????include ??????mime.types;

????default_type ?application/octet-stream;

?

????#log_format ?main ?'$remote_addr - $remote_user [$time_local] "$request" '

????# ?????????????????'$status $body_bytes_sent "$http_referer" '

????# ?????????????????'"$http_user_agent" "$http_x_forwarded_for"';

?

????#access_log ?logs/access.log ?main;

?

????sendfile ???????on;

????#tcp_nopush ????on;

?

????#keepalive_timeout ?0;

????keepalive_timeout ?65;

?

????#gzip ?on;

???

????upstream tomcat_server_pool{

server 192.168.101.5:8080 weight=10;

server 192.168.101.6:8080 weight=10;

}

#proxy_temp_path代理臨時目錄

proxy_temp_path /var/temp/nginx/proxy;

#proxy_cache_path代理緩存目錄,和proxy_temp_path必須在同一個分區

#/var/temp/nginx/proxy_cache_dir緩存目錄

#levels指定該緩存空間有兩層hash目錄,第一層目錄名是1個字母或數字長度,第二層目錄名為2個字母或數字長度

#keys_zone=cache_one:50m緩存區名稱為cache_one,在內存中的空間是50Minactive=1d表示1天清空一次緩存 ,max_size指定磁盤空間大小為500M

proxy_cache_path /var/temp/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=500m;

????server {

listen 80;

server_name ccc.test.com;

?

#清空緩存配置,注意必須放在最上邊,當在請求的url前加/purge/時將此url的緩存清空

location ~ /purge(/.*)

????????{

????????????#安全設置,指定請求客戶端的IPIP段才可以清除URL緩存,這里為了方便測試設置為all

????????????#allow ?????????127.0.0.1;

????????????allow ??????????all;

????#指定清空緩存的區域名稱cache_one(要和上邊proxy_cache_path緩存配置中指定的緩存區域名稱一致)

????#指定緩存的key規則$host$1$is_args$args,要和下邊設置緩存的key一致$host$uri$is_args$args

????#注意$host$1$is_args$args中的$1表示當前請求的uri$host$1$is_args$args=$host$uri$is_args$args

????????????proxy_cache_purge cache_one $host$1$is_args$args;

????????}

#所有的location規則都不滿足走/,使用proxy_pass將請求轉發給tomcat

location /{

?????????????????proxy_pass http://tomcat_server_pool;

?????????????????index index.jsp index.html index.htm;

????????}

#請求url/item/開頭的進行緩存,使用此location

location ~?/item(/.*){

#指定緩存區域名稱

proxy_cache cache_one;

#以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希

proxy_cache_key $host$uri$is_args$args;

#請求頭中添加請求的主機名

proxy_set_header Host ?$host;

#請求頭中添加真實的客戶端ip,通過X-Forwarded-For可獲取

proxy_set_header X-Forwarded-For ?$remote_addr;

#代理訪問后端tomcat

#請求item從緩存中找,如果緩存中沒有則向tomcat請求

#$1表示取出正則表達式(/.*)所匹配的內容,使用$1的效果例如請求http://ccc.test.com/item/100010.html則請求tomcat服務器 http://ip:port/100010.html

#如果不使用$1則會將/item/...加在tomcat服務地址之后訪問,即http://ip:port/item/100010.html

????????proxy_pass http://tomcat_server_pool$1;

}

?

#請求url.htmljscsspnggif結尾和此location匹配成功

location ~ \.( html|js|css|png|gif|jpg|jpeg|bmp|swf)$ { ??

#如果后端的服務器返回502504、執行超時等錯誤,自動將請求轉發到 upstream負載均衡池中的另一臺服務器,實現故障轉移。

???????proxy_next_upstream http_502 http_504 error timeout invalid_header;

???????proxy_cache cache_one;

???????#對不同的HTTP狀態碼設置不同的緩存時間

???????proxy_cache_valid 200 10m;

???????proxy_cache_valid 304 1m;

???????proxy_cache_valid 301 302 1h;

???????proxy_cache_valid any 1m;

??????#以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希

??????proxy_cache_key $host$uri$is_args$args;

??????proxy_set_header Host ?$host;

??????proxy_set_header X-Forwarded-For ?$remote_addr;

??????#如果沒有緩存則通過proxy_pass轉向tomcat請求

??????proxy_pass http://tomcat_server_pool;

}

????}

?

9.6?測試

9.6.1?第一次請求

http://ccc.test.com/item/docs/

觀察后臺tomcat的訪問日志?

9.6.2?第二次請求

http://ccc.test.com/item/docs/

觀察后臺tomcat的訪問日志,沒有發現請求日志

?

9.6.3?清空緩存

在瀏覽器請求:http://ccc.test.com/purge/item/docs/

?

說明清除緩存成功,當再次刷新此地址則報404說明沒有找到要清除的緩存文件:

?

?

9.6.4?清除緩存后再次請求

請求:http://ccc.test.com/item/docs/

觀察后臺tomcat的訪問日志

根據預期基本正確又請求了/docs/,但是為什么沒有第一次請求日志中的:

因為在nginx.conf中配置了對靜態資源文件的緩存,所以/docs/images/asf-logo.gif也被緩存,剛才清除緩存只是清除了http://ccc.test.com/item/docs/的緩存沒有清除/docs/images/asf-logo.gif的緩存。

?

9.6.5?圖片緩存清除

下邊對/docs/images/asf-logo.gif的緩存清除:

請求http://ccc.test.com/purge/item/docs/images/asf-logo.gif

?

9.6.6?再次請求

請求:http://ccc.test.com/item/docs/

觀察后臺tomcat的訪問日志

思考下這次怎么沒有/docs/的請求日志??

?

10?附錄

10.1?nginx編譯參數

--prefix= 指向安裝目錄

--sbin-path 指向(執行)程序文件(nginx

--conf-path= 指向配置文件(nginx.conf

--error-log-path= 指向錯誤日志目錄

--pid-path= 指向pid文件(nginx.pid

--lock-path= 指向lock文件(nginx.lock)(安裝文件鎖定,防止安裝文件被別人利用,或自己誤操作。)

--user= 指定程序運行時的非特權用戶

--group= 指定程序運行時的非特權用戶組

--builddir= 指向編譯目錄

--with-rtsig_module 啟用rtsig模塊支持(實時信號)

--with-select_module 啟用select模塊支持(一種輪詢模式,不推薦在高載環境下使用)禁用:--without-select_module

--with-poll_module 啟用poll模塊支持(功能與select相同,與select特性相同,為一種輪詢模式,不推薦在高載環境下使用)

--with-file-aio 啟用file aio支持(一種APL文件傳輸格式)

--with-ipv6 啟用ipv6支持

--with-http_ssl_module 啟用ngx_http_ssl_module支持(使支持https請求,需已安裝openssl

--with-http_realip_module 啟用ngx_http_realip_module支持(這個模塊允許從請求標頭更改客戶端的IP地址值,默認為關)

--with-http_addition_module 啟用ngx_http_addition_module支持(作為一個輸出過濾器,支持不完全緩沖,分部分響應請求)

--with-http_xslt_module 啟用ngx_http_xslt_module支持(過濾轉換XML請求)

--with-http_image_filter_module 啟用ngx_http_image_filter_module支持(傳輸JPEG/GIF/PNG 圖片的一個過濾器)(默認為不啟用。gd庫要用到)

--with-http_geoip_module 啟用ngx_http_geoip_module支持(該模塊創建基于與MaxMind GeoIP二進制文件相配的客戶端IP地址的ngx_http_geoip_module變量)

--with-http_sub_module 啟用ngx_http_sub_module支持(允許用一些其他文本替換nginx響應中的一些文本)

--with-http_dav_module 啟用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL:創建集合,COPYMOVE方法)默認情況下為關閉,需編譯開啟

--with-http_flv_module 啟用ngx_http_flv_module支持(提供尋求內存使用基于時間的偏移量文件)

--with-http_gzip_static_module 啟用ngx_http_gzip_static_module支持(在線實時壓縮輸出數據流)

--with-http_random_index_module 啟用ngx_http_random_index_module支持(從目錄中隨機挑選一個目錄索引)

--with-http_secure_link_module 啟用ngx_http_secure_link_module支持(計算和檢查要求所需的安全鏈接網址)

--with-http_degradation_module ?啟用ngx_http_degradation_module支持(允許在內存不足的情況下返回204444碼)

--with-http_stub_status_module 啟用ngx_http_stub_status_module支持(獲取nginx自上次啟動以來的工作狀態)

--without-http_charset_module 禁用ngx_http_charset_module支持(重新編碼web頁面,但只能是一個方向--服務器端到客戶端,并且只有一個字節的編碼可以被重新編碼)

--without-http_gzip_module 禁用ngx_http_gzip_module支持(該模塊同-with-http_gzip_static_module功能一樣)

--without-http_ssi_module 禁用ngx_http_ssi_module支持(該模塊提供了一個在輸入端處理處理服務器包含文件(SSI)的過濾器,目前支持SSI命令的列表是不完整的)

--without-http_userid_module 禁用ngx_http_userid_module支持(該模塊用來處理用來確定客戶端后續請求的cookies

--without-http_access_module 禁用ngx_http_access_module支持(該模塊提供了一個簡單的基于主機的訪問控制。允許/拒絕基于ip地址)

--without-http_auth_basic_module禁用ngx_http_auth_basic_module(該模塊是可以使用用戶名和密碼基于http基本認證方法來保護你的站點或其部分內容)

--without-http_autoindex_module 禁用disable ngx_http_autoindex_module支持(該模塊用于自動生成目錄列表,只在ngx_http_index_module模塊未找到索引文件時發出請求。)

--without-http_geo_module 禁用ngx_http_geo_module支持(創建一些變量,其值依賴于客戶端的IP地址)

--without-http_map_module 禁用ngx_http_map_module支持(使用任意的鍵/值對設置配置變量)

--without-http_split_clients_module 禁用ngx_http_split_clients_module支持(該模塊用來基于某些條件劃分用戶。條件如:ip地址、報頭、cookies等等)

--without-http_referer_module 禁用disable ngx_http_referer_module支持(該模塊用來過濾請求,拒絕報頭中Referer值不正確的請求)

--without-http_rewrite_module 禁用ngx_http_rewrite_module支持(該模塊允許使用正則表達式改變URI,并且根據變量來轉向以及選擇配置。如果在server級別設置該選項,那么他們將在 location之前生效。如果在location還有更進一步的重寫規則,location部分的規則依然會被執行。如果這個URI重寫是因為location部分的規則造成的,那么 location部分會再次被執行作為新的URI。 這個循環會執行10次,然后Nginx會返回一個500錯誤。)

--without-http_proxy_module 禁用ngx_http_proxy_module支持(有關代理服務器)

--without-http_fastcgi_module 禁用ngx_http_fastcgi_module支持(該模塊允許Nginx FastCGI 進程交互,并通過傳遞參數來控制FastCGI 進程工作。 )FastCGI一個常駐型的公共網關接口。

--without-http_uwsgi_module 禁用ngx_http_uwsgi_module支持(該模塊用來醫用uwsgi協議,uWSGI服務器相關)

--without-http_scgi_module 禁用ngx_http_scgi_module支持(該模塊用來啟用SCGI協議支持,SCGI協議是CGI協議的替代。它是一種應用程序與HTTP服務接口標準。它有些像FastCGI但他的設計更容易實現。)

--without-http_memcached_module 禁用ngx_http_memcached_module支持(該模塊用來提供簡單的緩存,以提高系統效率)

-without-http_limit_zone_module 禁用ngx_http_limit_zone_module支持(該模塊可以針對條件,進行會話的并發連接數控制)

--without-http_limit_req_module 禁用ngx_http_limit_req_module支持(該模塊允許你對于一個地址進行請求數量的限制用一個給定的session或一個特定的事件)

--without-http_empty_gif_module 禁用ngx_http_empty_gif_module支持(該模塊在內存中常駐了一個1*1的透明GIF圖像,可以被非常快速的調用)

--without-http_browser_module 禁用ngx_http_browser_module支持(該模塊用來創建依賴于請求報頭的值。如果瀏覽器為modern ,則$modern_browser等于modern_browser_value指令分配的值;如果瀏覽器為old,則$ancient_browser等于 ancient_browser_value指令分配的值;如果瀏覽器為 MSIE中的任意版本,則 $msie等于1

--without-http_upstream_ip_hash_module 禁用ngx_http_upstream_ip_hash_module支持(該模塊用于簡單的負載均衡)

--with-http_perl_module 啟用ngx_http_perl_module支持(該模塊使nginx可以直接使用perl或通過ssi調用perl

--with-perl_modules_path= 設定perl模塊路徑

--with-perl= 設定perl庫文件路徑

--http-log-path= 設定access log路徑

--http-client-body-temp-path= 設定http客戶端請求臨時文件路徑

--http-proxy-temp-path= 設定http代理臨時文件路徑

--http-fastcgi-temp-path= 設定http fastcgi臨時文件路徑

--http-uwsgi-temp-path= 設定http uwsgi臨時文件路徑

--http-scgi-temp-path= 設定http scgi臨時文件路徑

-without-http 禁用http server功能

--without-http-cache 禁用http cache功能

--with-mail 啟用POP3/IMAP4/SMTP代理模塊支持

--with-mail_ssl_module 啟用ngx_mail_ssl_module支持

--without-mail_pop3_module 禁用pop3協議(POP3即郵局協議的第3個版本,它是規定個人計算機如何連接到互聯網上的郵件服務器進行收發郵件的協議。是因特網電子郵件的第一個離線協議標準,POP3協議允許用戶從服務器上把郵件存儲到本地主機上,同時根據客戶端的操作刪除或保存在郵件服務器上的郵件。POP3協議是TCP/IP協議族中的一員,主要用于支持使用客戶端遠程管理在服務器上的電子郵件)

--without-mail_imap_module 禁用imap協議(一種郵件獲取協議。它的主要作用是郵件客戶端可以通過這種協議從郵件服務器上獲取郵件的信息,下載郵件等。IMAP協議運行在TCP/IP協議之上,使用的端口是143。它與POP3協議的主要區別是用戶可以不用把所有的郵件全部下載,可以通過客戶端直接對服務器上的郵件進行操作。)

--without-mail_smtp_module 禁用smtp協議(SMTP即簡單郵件傳輸協議,它是一組用于由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬于TCP/IP協議族,它幫助每臺計算機在發送或中轉信件時找到下一個目的地。)

--with-google_perftools_module 啟用ngx_google_perftools_module支持(調試用,剖析程序性能瓶頸)

--with-cpp_test_module 啟用ngx_cpp_test_module支持

--add-module= 啟用外部模塊支持

--with-cc= 指向C編譯器路徑

--with-cpp= 指向C預處理路徑

--with-cc-opt= 設置C編譯器參數(PCRE庫,需要指定–with-cc-opt=-I /usr/local/include”,如果使用select()函數則需要同時增加文件描述符數量,可以通過–with-cc- opt=-D FD_SETSIZE=2048”指定。)

--with-ld-opt= 設置連接文件參數。(PCRE庫,需要指定–with-ld-opt=-L /usr/local/lib”。)

--with-cpu-opt= 指定編譯的CPU,可用的值為: pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64

--without-pcre 禁用pcre

--with-pcre 啟用pcre

--with-pcre= 指向pcre庫文件目錄

--with-pcre-opt= 在編譯時為pcre庫設置附加參數

--with-md5= 指向md5庫文件目錄(消息摘要算法第五版,用以提供消息的完整性保護)

--with-md5-opt= 在編譯時為md5庫設置附加參數

--with-md5-asm 使用md5匯編源

--with-sha1= 指向sha1庫目錄(數字簽名算法,主要用于數字簽名)

--with-sha1-opt= 在編譯時為sha1庫設置附加參數

--with-sha1-asm 使用sha1匯編源

--with-zlib= 指向zlib庫目錄

--with-zlib-opt= 在編譯時為zlib設置附加參數

--with-zlib-asm= 為指定的CPU使用zlib匯編源進行優化,CPU類型為pentium, pentiumpro

--with-libatomic 為原子內存的更新操作的實現提供一個架構

--with-libatomic= 指向libatomic_ops安裝目錄

--with-openssl= 指向openssl安裝目錄

--with-openssl-opt 在編譯時為openssl設置附加參數

--with-debug 啟用debug日志

轉載于:https://www.cnblogs.com/chenglc/p/8043968.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252689.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252689.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252689.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iscroll5制作上下拉刷新 tab出現的問題

1.iscoll5插件刷新后如果想改變現實位置如果向下幾px可以用 myScroll.scrollBy(0,0);方法,該值是相對當前位置。 2.iscoll5用到tab的時候,用點擊生成iscoll對象出現取消不了之前的對象的綁定事件,點擊多次后刷新執行多次的問題,解…

初談邏輯讀、物理讀、預讀

前言: 該文并不全是本人原創,里面的某些原理來自于CareySon。 SQL SERVER數據存儲的形式 要理解邏輯讀、物理讀、預讀這三個概念,先要搞懂SQL Server的數據存儲方式。 SQL Server數據庫包括數據文件和日志文件,一個數據庫可以有一…

Makefile常用萬能模板(包括靜態鏈接庫、動態鏈接庫、可執行文件)

1、生成可執行文件的makefile2、生成靜態鏈接庫的makefile3、生成動態鏈接庫的makefile 本文把makefile 分成了三份:生成可執行文件的makefile,生成靜態鏈接庫的makefile,生成動態鏈接庫的makefile。 這些makefile都很簡單,一般都…

TSQLDBServerHttpApi使用工作線程池

TSQLDBServerHttpApi使用工作線程池 TSQLDBServerHttpApi創建時,默認是使用單線程模式,且只使用一個數據庫連接,服務端要應對眾多的客戶端只靠一個工作線程(主線程)和一個數據庫連接, 服務端主線程不忙死才…

hibernate

Hibernate是一個開放源代碼的對象關系映射框架,他對JDBC進行了輕量級的封裝,使Java開發員可以隨心所欲的使用對象編程思維操作數據庫。 SessionFactory接口負責初始化Hibernate.他充當數據儲存源的代理,并負責創建Session對象。 Session&…

Python數據分析之pandas入門

一、pandas庫簡介 pandas是一個專門用于數據分析的開源Python庫,目前很多使用Python分析數據的專業人員都將pandas作為基礎工具來使用。pandas是以Numpy作為基礎來設計開發的,Numpy是大量Python數據科學計算庫的基礎,pandas以此為基礎&#x…

激光雷達和毫米波雷達的區別

什么是激光雷達 激光雷達,是以發射激光束探測目標的位置、速度等特征量的雷達系統。其工作原理是向目標發射探測信號(激光束),然后將接收到的從目標反射回來的信號(目標回波)與發射信號進行比較&#xff0c…

Git—使用方法

1、:插件的安裝(eclipse LUNA版本之后已經自動集成,不需要安裝插件)、 * 先打開該網頁提供了對應版本的EGit,自己選擇相應的版本。(http://wiki.eclipse.org/EGit/FAQ#Where_can_I_find_older_releases_of_EGit.3F&…

激光雷達與毫米波雷達對比

激光雷達是一種采用非接觸激光測距技術的掃描式傳感器,其工作原理與一般的雷達系統類似,通過發射激光光束來探測目標,并通過搜集反射回來的光束來形成點云和獲取數據,這些數據經光電處理后可生成為精確的三維立體圖像。采用這項技…

安全可靠國產系統下的應用怎么搭建?

據國家信息安全漏洞共享平臺(CNVD)統計數據,2016年我國共收錄通用軟硬件漏洞 10822個,漏洞來源涵蓋了眾多知名的國外廠商。應用軟件的不安全性對我國信息技術發展產生了重大威脅,近年來我國頻繁發布信息安全相關政策&a…

Win10 + Python + MXNet + VS2015配置

項目需要使用MTCNN來檢測、對齊、剪切出人臉,它是使用MXNet作為框架的,但是我自己的Ubuntu里各種框架亂成一團,不想再添亂就鐵了心要在windows里配一個。無奈網上的資料不多,掙扎了幾天之后決定留下這么一份文檔。 首先我們使用的…

bzoj 3224 Tyvj 1728 普通平衡樹

題目大意: 您需要寫一種數據結構(可參考題目標題),來維護一些數,其中需要提供以下操作: 1. 插入x數 2. 刪除x數(若有多個相同的數,因只刪除一個) 3. 查詢x數的排名(若有多個相同的數&#xff0c…

不懂毫米波雷達?5分鐘讀懂毫米波雷達的那些事兒

2019年是毫米波風生水起的一年,也是毫米波名聲大噪的一年。毫米波應用范圍廣泛,如毫米波雷達、毫米波天線等。而本文,將向大家介紹毫米波雷達,主要內容包括:毫米波雷達原理、毫米波雷達主要特點、毫米波雷達優勢以及毫…

飛鴿傳書(IPMSG)協議(翻譯稿)

協議聲明: 本協議是由日本人Shirouzu Hiroaki (白水 啟章)先生編寫。 wanpengcoder翻譯于Mr.Kanazawa英文文檔,轉載請注明出處。 http://www.cnblogs.com/wanpeng/ 如有翻譯不當之處望提出,以便改進,衷心感…

redis集群的搭建

########環境######### centos 7.2 , gcch 環境ruby 2.0.0 redis 3.2.8 redis-3.3.3gem 公司要求搭建redis集群, 本來覺得挺好搞的,沒想到弄到現在.... 1, 環境準備 gcc , ruby 等環境準備 yum -y install gcc ruby ruby-devel rubygems rpm-build zlib redis-ruby接口安裝, 我…

2017-2018-1 20155227 《信息安全系統設計基礎》第十三周學習總結

2017-2018-1 20155227 《信息安全系統設計基礎》第十三周學習總結 找出全書你認為最重要的一章,深入重新學習一下,要求(期末占10分): 完成這一章所有習題詳細總結本章要點給你的結對學習搭檔講解你的總結并獲取反饋我選…

進程間五種通信方式

進程間通信(IPC,InterProcess Communication)是指在不同進程之間傳播或交換信息。 IPC的方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket、Streams等。其中 Socket和Streams支持不同主機…

電子書下載:Silverlight 5 in Action

下載:http://www.ctdisk.com/file/8447319

git 的使用方法

git 的使用有3個主要步驟: 1.1 工作區域操作: 在自己的git賬號下構建一個工作目錄, 并往工作目錄里添加文件內容(cp /root/data/VIP_Amount_prediction/* ./)。 cd 當前工作目錄, git init, 初始…

Codeforces 898E Squares and not squares

題目大意 給定 $n$($n$ 是偶數,$2\le n\le 2\times 10^{5}$)個非負整數 $a_1,\dots, a_n$($a_i\le 10^9$)。 要求將其中 $n/2$ 個數變成平方數,另外 $n/2$ 個數變成非平方數,變化后的數必須仍是…