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)頁面不常更新,可以設置更長,這樣可以節(jié)省帶寬和緩解服務器的壓力
expires 7d;
}
#配置靜態(tài)圖片頁面
location ~ .*.(gif|jpg|jpeg|png)$ {
expires 24h; #設置瀏覽器過期時間
root /home/picimages/; #指定圖片存放路徑
access_log /usr/local/nginx/logs/picimages.log; #圖片日志路徑
proxy_store on; #開啟緩存機制
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) ##正則表達式,匹配緩存目錄中的文件與源文件是否存在,當訪問的文件和目錄不存在時,重定向到某個網(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)過上一步配置之后,雖然文件被緩存到了本地磁盤上,但每次請求仍會向遠端拉取文件,為了避免去遠端拉取文件,還必須增加:
if ( !-e $request_filename) {
proxy_pass http://127.0.0.1:8082;
}
即改成有條件地去執(zhí)行proxy_pass,這個條件就是當請求的文件在本地的proxy_temp_path指定的目錄下不存在時,再向后端拉取。
$request_filename變量指的就是請求的資源路徑
正則表達式:
= 開頭表示精確匹配
^~ 開頭表示uri以某個常規(guī)字符串開頭,不是正則匹配
~ 開頭表示區(qū)分大小寫的正則匹配;
~* 開頭表示不區(qū)分大小寫的正則匹配
/ 通用匹配, 如果沒有其它匹配,任何請求都會匹配到
flag標志位
last : 相當于Apache的[L]標記,表示完成rewrite
break : 停止執(zhí)行當前虛擬主機的后續(xù)rewrite指令集
redirect : 返回302臨時重定向,地址欄會顯示跳轉后的地址
permanent : 返回301永久重定向,地址欄會顯示跳轉后的地址
因為301和302不能簡單的只返回狀態(tài)碼,還必須有重定向的URL,這就是return指令無法返回301,302的原因了。這里 last 和 break 區(qū)別有點難以理解:
last一般寫在server和if中,而break一般使用在location中
last不終止重寫后的url匹配,即新的url會再從server走一遍匹配流程,而break終止重寫后的匹配
break和last都能組織繼續(xù)執(zhí)行后面的rewrite指令
if指令與全局變量
if判斷指令
語法為if(condition){…},對給定的條件condition進行判斷。如果為真,大括號內的rewrite指令將被執(zhí)行,if條件(conditon)可以是如下任何內容:
當表達式只是一個變量時,如果值為空或任何以0開頭的字符串都會當做false
直接比較變量和內容時,使用=或!=
~正則表達式匹配,~*不區(qū)分大小寫的匹配,!~區(qū)分大小寫的不匹配
-f和!-f用來判斷是否存在文件
-d和!-d用來判斷是否存在目錄
-e和!-e用來判斷是否存在文件或目錄
-x和!-x用來判斷文件是否可執(zhí)行
常用正則
. : 匹配除換行符以外的任意字符
? : 重復0次或1次
+ : 重復1次或更多次
* : 重復0次或更多次
d :匹配數(shù)字
^ : 匹配字符串的開始
$ : 匹配字符串的介紹
{n} : 重復n次
{n,} : 重復n次或更多次
[c] : 匹配單個字符c
[a-z] : 匹配a-z小寫字母的任意一個
小括號()之間匹配的內容,可以在后面通過$1來引用,$2表示的是前面第二個()里的內容。正則里面容易讓人困惑的是轉義特殊字符。