Nginx實現(xiàn)靜態(tài)頁面,圖片分離

nginx(靜態(tài)頁面,圖片分離)

#vi /usr/local/nginx/conf/nginx.conf

user nginx nginx;

worker_processes? 1;

events {

worker_connections? 1024;

}

http {

include? ? ? mime.types;

default_type? application/octet-stream;

? ? sendfile? ? ? ? on;

? ? keepalive_timeout? 65;

upstream webservs {

server 172.16.100.6 weight=1;

server 172.16.100.7 weight=1;

}

server {

listen? ? ? 8082;

server_name? localhost;

index index.html index.htm index.php;

rewrite ^/$ /zabbix/index.php permanent;

location / {

proxy_pass webservs;

proxy_set_header X-Real-IP $remote_addr;

}

location /zabbix {

root /var/www;

fastcgi_pass 127.0.0.1:8000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

#配置Nginx動靜分離,定義的靜態(tài)頁面直接從zabbix發(fā)布目錄讀取(root /opt/nginx-1.4.7/html/resources;)。

location ~* ^/zabbix/.+\.(ico|gif|jpg|jpeg|html|htm|png|css|bmp|js|svg)$ {

root? ? ? ? ? /var/www;

#expires定義用戶瀏覽器緩存的時間為7天,如果靜態(tài)頁面不常更新,可以設(shè)置更長,這樣可以節(jié)省帶寬和緩解服務(wù)器的壓力

expires? ? ? 7d;

}

#配置靜態(tài)圖片頁面

location ~ .*\.(gif|jpg|jpeg|png)$ {

expires 24h;? ? ? #設(shè)置瀏覽器過期時間

root /home/picimages/; #指定圖片存放路徑

access_log /usr/local/nginx/logs/picimages.log; #圖片日志路徑

proxy_store on;? ? ? #開啟緩存機(jī)制

proxy_store_access user:rw group:rw all:rw;? ? #緩存讀寫規(guī)則

proxy_temp_path? ? ? ? /home/picimages/; #代理臨時路徑

proxy_redirect? ? ? ? ? off;

proxy_set_header? ? ? ? Host 127.0.0.1;

client_max_body_size? ? 10m;

client_body_buffer_size 1280k;

proxy_connect_timeout? 900;

proxy_send_timeout? ? ? 900;

proxy_read_timeout? ? ? 900;

proxy_buffer_size? ? ? 40k;

proxy_buffers? ? ? ? ? 40 320k;

proxy_busy_buffers_size 640k;

proxy_temp_file_write_size 640k;

if ( !-e $request_filename)? ? ? ? ##正則表達(dá)式,匹配緩存目錄中的文件與源文件是否存在,當(dāng)訪問的文件和目錄不存在時,重定向到某個網(wǎng)站地址或文件

proxy_pass?http://127.0.0.1:8082;? ? ? #代理訪問地址

}

}

location /citizen {

proxy_pass?http://172.28.3.103:9081;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $host:$server_port;

}

error_page? 500 502 503 504? /50x.html;

location = /50x.html {

root? html;

}

? ? }

}

詳解說明:

其中配置靜態(tài)圖片頁面

proxy_store on? 啟用緩存到本地的功能,

proxy_temp_path? 指定緩存在哪個目錄下,如:proxy_temp_path /var/nginx_cache;

在經(jīng)過上一步配置之后,雖然文件被緩存到了本地磁盤上,但每次請求仍會向遠(yuǎn)端拉取文件,為了避免去遠(yuǎn)端拉取文件,還必須增加:

if ( !-e $request_filename) {

proxy_pass? http://127.0.0.1:8082;

}

即改成有條件地去執(zhí)行proxy_pass,這個條件就是當(dāng)請求的文件在本地的proxy_temp_path指定的目錄下不存在時,再向后端拉取。

$request_filename變量指的就是請求的資源路徑

正則表達(dá)式:

= 開頭表示精確匹配

^~ 開頭表示uri以某個常規(guī)字符串開頭,不是正則匹配

~ 開頭表示區(qū)分大小寫的正則匹配;

~* 開頭表示不區(qū)分大小寫的正則匹配

/ 通用匹配, 如果沒有其它匹配,任何請求都會匹配到

flag標(biāo)志位

last : 相當(dāng)于Apache的[L]標(biāo)記,表示完成rewrite

break : 停止執(zhí)行當(dāng)前虛擬主機(jī)的后續(xù)rewrite指令集

redirect : 返回302臨時重定向,地址欄會顯示跳轉(zhuǎn)后的地址

permanent : 返回301永久重定向,地址欄會顯示跳轉(zhuǎn)后的地址

因為301和302不能簡單的只返回狀態(tài)碼,還必須有重定向的URL,這就是return指令無法返回301,302的原因了。這里 last 和 break 區(qū)別有點(diǎn)難以理解:

last一般寫在server和if中,而break一般使用在location中

last不終止重寫后的url匹配,即新的url會再從server走一遍匹配流程,而break終止重寫后的匹配

break和last都能組織繼續(xù)執(zhí)行后面的rewrite指令

if指令與全局變量

if判斷指令

語法為if(condition){...},對給定的條件condition進(jìn)行判斷。如果為真,大括號內(nèi)的rewrite指令將被執(zhí)行,if條件(conditon)可以是如下任何內(nèi)容:

當(dāng)表達(dá)式只是一個變量時,如果值為空或任何以0開頭的字符串都會當(dāng)做false

直接比較變量和內(nèi)容時,使用=或!=

~正則表達(dá)式匹配,~*不區(qū)分大小寫的匹配,!~區(qū)分大小寫的不匹配

-f和!-f用來判斷是否存在文件

-d和!-d用來判斷是否存在目錄

-e和!-e用來判斷是否存在文件或目錄

-x和!-x用來判斷文件是否可執(zhí)行

常用正則

. : 匹配除換行符以外的任意字符

? : 重復(fù)0次或1次

+ : 重復(fù)1次或更多次

* : 重復(fù)0次或更多次

\d :匹配數(shù)字

^ : 匹配字符串的開始

$ : 匹配字符串的介紹

{n} : 重復(fù)n次

{n,} : 重復(fù)n次或更多次

[c] : 匹配單個字符c

[a-z] : 匹配a-z小寫字母的任意一個

小括號()之間匹配的內(nèi)容,可以在后面通過$1來引用,$2表示的是前面第二個()里的內(nèi)容。正則里面容易讓人困惑的是\轉(zhuǎn)義特殊字符。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容