一、nginx基本配置
nginx開啟文件目錄瀏覽功能(web上顯示目錄)
1location?/?{
2root?/data/www/file//指定實際目錄絕對路徑备绽;???
3autoindexon;//開啟目錄瀏覽功能券坞;???
4autoindex_exact_size?off;//關(guān)閉詳細(xì)文件大小統(tǒng)計,讓文件大小顯示MB肺素,GB單位恨锚,默認(rèn)為b;???
5autoindex_localtimeon;//開啟以服務(wù)器本地時區(qū)顯示文件修改日期倍靡!???
6}
php-fpm配置
1location~?\.php(.*)${
2fastcgi_pass127.0.0.1:9000;
3fastcgi_read_timeout7200;
4fastcgi_indexindex.php;
5fastcgi_split_path_info?^((?U).+\.php)(/?.+)$;
6fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
7fastcgi_paramPATH_INFO$fastcgi_path_info;
8fastcgi_paramPATH_TRANSLATED$document_root$fastcgi_path_info;
9includefastcgi_params;
10}
靜態(tài)資源讀取
1location~?.*\.(js|css|ico|png|jpg|eot|svg|ttf|woff){
2#所有靜態(tài)文件直接讀取硬盤
3root/var/lib/tomcat7/webapps/JieLiERP/WEB-INF?;
4expires30d;#緩存30天
5}
gzip 壓縮
1gzipon;#是否開啟gzip
2gzip_buffers324k猴伶;#內(nèi)存中緩沖幾塊
3gzip_min_length1000;#最小壓縮長度
4gzip_comp_level6;#壓縮級別[1-9](級別越高壓縮的越小,但是越浪費(fèi)cpu)
5gzip_disable;#正則匹配UA什么樣的uri不進(jìn)行壓縮
6gzip_http_version1.1|2.0;?開始壓縮htpp協(xié)議版本
7gzip_proxied#設(shè)置請求者代理服務(wù)器,該如何緩存內(nèi)容?
8gzip_typestext/plain?application/xml;#對哪些類型的文件用壓縮(圖片他挎,mp3這類2進(jìn)制文件壓縮率不高沒必要壓縮)
9gzip_varyon|off#是否傳輸壓縮標(biāo)志
二筝尾、nginx配置https
1.激活所需要的網(wǎng)站的https獲取crt和key證書
2.在nginx配置文件中配置https證書
將http訪問域名重定向為https安全訪問
1server{
2listen80;
3server_namewww.shangbee.com?shangbee.com;
4#重定向shangbee.com到?www.shangbee.com
5#?if??(?$host?!=?'www.shangbee.com'??)??{
6#?rewrite?^/(.*)$?https://www.shangbee.com??permanent;
7#?}
8rewrite?^https://$http_host$request_uri?permanent;#強(qiáng)制將HTTP重定向到HTTPS???permanent永久重定向
9
10}
1server?{
2listen443ssl;
3ssl_certificate?/etc/nginx/ssl/nginx.crt;
4ssl_certificate_key?/etc/nginx/ssl/nginx.key;
5keepalive_timeout70;
6server_name?????www.shangbee.com;
7server_tokens?off;
8#add_header?Strict-Transport-Security?"max-age=31536000;?includeSubdomains";
9fastcgi_param???HTTPS???????????????on;
10fastcgi_param???HTTP_SCHEME?????????https;
11#access_log????/app/logs/nginx/mydomain_access.log;
12#error_log????/app/logs/nginx/mydomain_error.log;
13set????????$root????/data/htdocs/ether/public;
14location?~?.*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
15{
16root?$root;
17}
18location?/?{
19root????$root;
20indexindex.html?index.php;
21if(?-f?$request_filename)?{
22break;
23}
24if(?!-e?$request_filename)?{
25rewrite?^(.*)$?/index.php/$1last;
26break;
27}
28}
29location?~?.+\.php($|/)?{
30fastcgi_pass????unix:/run/php/php7.0-fpm.sock;
31fastcgi_split_path_info?^((?U).+.php)(/
?.+)$;
32fastcgi_param?PATH_INFO?$fastcgi_path_info;
33fastcgi_param?PATH_TRANSLATED?$document_root$fastcgi_path_info;
34fastcgi_param????SCRIPT_FILENAME????$root$fastcgi_script_name;
35include????????fastcgi_params;
36}
37}
永久重定向與臨時重定向的區(qū)別
臨時重定向redirect,永久重定向permanent
301重定向是永久的重定向办桨,搜索引擎在抓取新內(nèi)容的同時也將舊的網(wǎng)址替換為重定向之后的網(wǎng)址筹淫。
302跳轉(zhuǎn)是暫時的跳轉(zhuǎn),搜索引擎會抓取新的內(nèi)容而保留舊的網(wǎng)址呢撞。因為服務(wù)器返回302代碼贸街,搜索引擎認(rèn)為新的網(wǎng)址只是暫時的。
實施301后狸相,新網(wǎng)址完全繼承舊網(wǎng)址,舊網(wǎng)址的排名等完全清零捐川。
實施302后脓鹃,對舊網(wǎng)址沒有影響,但新網(wǎng)址不會有排名古沥。
302每次用戶請求都會訪問一次服務(wù)器瘸右,并返回給用戶,301用戶請求后將永久重定向緩存岩齿,再次請求直接在本地重定向不會經(jīng)過服務(wù)器太颤。
三、負(fù)載均衡與反向代理
反向代理是負(fù)載均衡的一種方式
反向代理可以實現(xiàn)負(fù)載均衡 ?但是負(fù)載均衡不一定通過反向代理的方式來實現(xiàn)
反向代理也可以不做負(fù)載均衡 可以做客戶端與web服務(wù)器之間的緩存服務(wù)器
squid varnish這些反向代理一般做緩存
nginx反向代理一般做負(fù)載均衡
負(fù)載均衡也可以通過LVS非反向代理的方式來實現(xiàn) 通過ip和端口實現(xiàn)負(fù)載均衡
NGINX反向代理緩存
反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求盹沈,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器龄章,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個服務(wù)器乞封。
反向代理的作用
①保護(hù)網(wǎng)站安全:任何來自Internet的請求都必須先經(jīng)過代理服務(wù)器做裙。
簡單來說,就是我們網(wǎng)站的所有的請求都要經(jīng)過反向代理服務(wù)器肃晚,對反向代理服務(wù)器進(jìn)行安全加固就能解決很大一部分的安全問題锚贱。
②通過配置緩存功能加速Web請求:可以緩存真實Web服務(wù)器上的某些靜態(tài)資源,減輕真實Web服務(wù)器的負(fù)載壓力关串;
可以在反向代理的服務(wù)器上緩存某些靜態(tài)資源拧廊,這樣的話在反向代理服務(wù)器上存在的資源就不用去web服務(wù)器上獲取,以減輕web服務(wù)器的壓力晋修。
③實現(xiàn)負(fù)載均衡:充當(dāng)負(fù)載均衡服務(wù)器均衡地分發(fā)請求吧碾,平衡集群中各個服務(wù)器的負(fù)載壓力;
可以通過反向代理服務(wù)器把請求分發(fā)到不同服務(wù)器飞蚓,減輕服務(wù)器的壓力滤港,還能防止網(wǎng)站某一臺服務(wù)器掛掉之后,網(wǎng)站就無法訪問的問題,做到網(wǎng)站的高可用溅漾,減少事故的發(fā)生山叮。
反向代理緩存設(shè)置
一、在反向代理服務(wù)器的配置文件中加入:
位置:
http段內(nèi)
1proxy_temp_path?/data/nginx-temp;#緩存臨時文件路徑
2proxy_cache_path?/data/nginx-cachelevels=1:2keys_zone=nginx-cache:20m
3max_size=50m?inactive=1m;#緩存保存的路徑
levels指定該緩存空間有兩層hash目錄添履,第一層目錄為1個數(shù)字或者字母屁倔,第二層為2個數(shù)字或者字母
keys_zone指的是緩存空間名稱。 20m 為內(nèi)存緩存空間大小
max_size指的是緩存文件可以占用的最大空間暮胧。
inactive指的是如果一個緩存文件多長時間不被訪問锐借,就會被刪除。(天:d往衷、秒:s钞翔、分:m)
?配置的demo
//設(shè)置動態(tài)服務(wù)器的代理 【處理PHP任務(wù)】
1upstreamtest?{
2#ip_hash;????#[?使用ip_hash分發(fā)?]
3server192.168.1.254:81weight=2;#[?設(shè)置這個服務(wù)器的權(quán)重為2?]
4server192.168.1.254:82;
5}
//設(shè)置獲取靜態(tài)文件的代理
1upstreamstatic{
2server192.168.1.254:81;#[?靜態(tài)服務(wù)器?]
3}
設(shè)置緩存目錄
1proxy_temp_path?/data/nginx-temp;#[temp的目錄]
2proxy_cache_path?/data/nginx-cachelevels=1:2keys_zone=nginx-cache:20m?max_size=50m?inactive=1m;
[ 設(shè)置緩存的路徑為 /data/nginx-cache 層級為2級,第一級為1個字幕第二個為2個字母 緩存的空間名為 nginx-cache席舍,緩存的內(nèi)存空間為20M 最大空間為50M 1分鐘內(nèi)沒有訪問刪除這個緩存 ?]
END
1server{
2listen80;
3server_name_;
4access_loglogs/likang.default.access.log??main;
5error_loglogs/error.logerror;
6root/var/www/html/likang/default;
設(shè)置反向代理
1location/{
2proxy_passhttp://test;
3proxy_set_headerHost$host;
4proxy_set_headerX-Real-IP$remote_addr;
5proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
6}
設(shè)置靜態(tài)圖片
1location~.*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*)?{
2#root?/data/nginx-cache;??#[?圖片的根目錄?]
3proxy_redirectoff;#[關(guān)閉跳轉(zhuǎn)]
4proxy_set_headerHost$host;#[?設(shè)置header?]
5proxy_cachenginx-cache;#[?緩存的空間?--?上邊定義的??]
6proxy_cache_valid2003021h;#[?不同http狀態(tài)緩存時間不同?]
7proxy_cache_valid3011d;
8proxy_cache_validany1m;
9proxy_ignore_headersSet-Cookie?Cache-Control;
10proxy_hide_headerCache-Control;
11proxy_hide_headerSet-Cookie;
12expires30d;#[告訴瀏覽器緩存有效期?--?30天內(nèi)可以直接訪問瀏覽器緩存?]
13proxy_passhttp://static;#[文件不存在去那里獲取]
14}
15}
解決不緩存的問題:
nginx不緩存原因
默認(rèn)情況下布轿,nginx是否緩存是由nginx緩存服務(wù)器與源服務(wù)器共同決定的, 緩存服務(wù)器需要嚴(yán)格遵守源服務(wù)器響應(yīng)的header來決定是否緩存以及緩存的時常。header主要有如下:
Cache-control:no-cache来颤、no-store
如果出現(xiàn)這兩值汰扭,nginx緩存服務(wù)器是絕對不會緩存的
Expires:1980-01-01
如果出現(xiàn)日期比當(dāng)前時間早,也不會緩存福铅。
解決不緩存方案
2.1 方法一:
修改程序或者源服務(wù)器web程序響應(yīng)的header
2.2 方法二:
nginx代理直接加上如下一句:
1proxy_ignore_headers?X-Accel-Expires?ExpiresCache-ControlSet-Cookie;
或者:
1proxy_ignore_headersSet-CookieCache-Control;
2proxy_hide_headerCache-Control;
3proxy_hide_headerSet-Cookie;
擴(kuò)展:學(xué)習(xí)nginx的Proxy Cache指令
1 proxy_cache
語法:proxy_cache zone_name;
默認(rèn)值:None
使用字段:http, server, location
設(shè)置一個緩存區(qū)域的名稱萝毛,一個相同的區(qū)域可以在不同的地方使用。
在0.7.48后滑黔,緩存遵循后端的”Expires”, “Cache-Control: no-cache”, “Cache-Control: max-age=XXX”以及其他等笆包。然而,目前nginx會忽略一些緩存控制指令略荡,如:”private”和”no-store”色查,同樣,nginx在緩存過程中不會處理”Vary”頭撞芍,為了確保一些私有數(shù)據(jù)不被所有的用戶看到秧了,后端必須設(shè)置 “no-cache”或者”max-age=0″頭,或者proxy_cache_key包含用戶指定的數(shù)據(jù)如
2 proxy_cache_key
語法:proxy_cache_key line;
默認(rèn)值:httpcookiexxx序无,在proxycachekey中使用一部分cookie的值可以防止緩存私有數(shù)據(jù)验毡,所以可以分別指定location以便分開私有數(shù)據(jù)和公有數(shù)據(jù)。緩存指令依賴代理緩沖區(qū)(buffers)帝嗡,如果proxybuffers設(shè)置為off晶通,緩存不會生效∮寸瑁¨K40K語法:¨C2C默認(rèn)值:schemeproxyostrequest_uri;
使用字段:http, server, location
指令指定了包含在緩存中的緩存關(guān)鍵字狮辽。
復(fù)制代碼 代碼如下:
1proxy_cache_key"$host$request_uri$cookie_user";
2
3proxy_cache_key"$scheme$host$request_uri";
3 proxy_cache_path
語法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
默認(rèn)值:None
使用字段:http
指令指定緩存的路徑和一些其他參數(shù)一也,緩存的數(shù)據(jù)存儲在文件中。緩存的文件名和key為代理URL的MD5 碼喉脖。levels參數(shù)指定緩存的子目錄數(shù)椰苟,例如:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
文件名類似于:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
所有活動的key和元數(shù)據(jù)存儲在共享的內(nèi)存區(qū)域中,這個區(qū)域用keys_zone參數(shù)指定树叽,如果在inactive參數(shù)指定的時間內(nèi)緩存的數(shù)據(jù)沒有被請求則被刪除舆蝴,默認(rèn)inactive為10分鐘。
cache manager進(jìn)程控制磁盤的緩存大小题诵,在max_size參數(shù)中定義洁仗,超過其大小后最少使用數(shù)據(jù)將被刪除。
區(qū)域的大小按照緩存頁面數(shù)的比例進(jìn)行設(shè)置性锭,一個頁面(文件)的元數(shù)據(jù)大小按照操作系統(tǒng)來定赠潦,F(xiàn)reeBSD/i386下為64字節(jié),F(xiàn)reeBSD/amd64下為128字節(jié)草冈,當(dāng)區(qū)域滿了以后key將按照LRU(最近最少使用算法)進(jìn)行處理祭椰。
proxy_cache_path和proxy_temp_path應(yīng)該使用在相同的文件系統(tǒng)上。
4 proxy_cache_methods
語法:proxy_cache_methods [GET HEAD POST];
默認(rèn)值:proxy_cache_methods GET HEAD;
使用字段:http, server, location
GET/HEAD用來裝飾語句疲陕,即你無法禁用GET/HEAD即使你只使用下列語句設(shè)置:
proxy_cache_methods POST;
5 proxy_cache_min_uses
語法:proxy_cache_min_uses the_number;
默認(rèn)值:proxy_cache_min_uses 1;
使用字段:http, server, location
多少次的查詢后應(yīng)答將被緩存,默認(rèn)1钉赁。
6 proxy_cache_valid
語法:proxy_cache_valid reply_code [reply_code ...] time;
默認(rèn)值:None
使用字段:http, server, location
為不同的應(yīng)答設(shè)置不同的緩存時間蹄殃,例如:
復(fù)制代碼 代碼如下:
1proxy_cache_valid20030210m;
2proxy_cache_valid4041m;
3proxy_cache_valid5m;
4proxy_cache_valid20030210m;
5proxy_cache_valid3011h;
6proxy_cache_validany1m;
7 proxy_cache_use_stale
為了防止緩存失效(在多個線程同時更新本地緩存時),你可以指定’updating’參數(shù)你踩,它將保證只有一個線程去更新緩存诅岩,并且在這個線程更新緩存的過程中其他的線程只會響應(yīng)當(dāng)前緩存中的過期版本。
代碼及configure配置:
在ngx_http_proxy_module.c里面定義了每個指令的鉤子(即callback)带膜,它們在讀取配置文件時會被調(diào)用吩谦。在configure的時候只需要把“HTTP_CACHE”設(shè)置為YES(可以找到auto/options里面HTTP_CACHE那行)∠ヅ海“proxy_cache_purge”指令需要下載nginx add-ons里面的“Cache Purge”模塊式廷,并在configure的時候用"--add-module="來加載代碼。