摘要:場(chǎng)景實(shí)踐篇一作為靜態(tài)資源服務(wù)動(dòng)態(tài)資源和靜態(tài)資源客戶(hù)端請(qǐng)求的頁(yè)面如果是靜態(tài)網(wǎng)頁(yè),那么服務(wù)器會(huì)直接把靜態(tài)網(wǎng)頁(yè)的內(nèi)容響應(yīng)給客戶(hù)端。
Nginx-場(chǎng)景實(shí)踐篇 一、Nginx作為靜態(tài)資源Web服務(wù) 1、動(dòng)態(tài)資源和靜態(tài)資源
客戶(hù)端請(qǐng)求的頁(yè)面如果是靜態(tài)網(wǎng)頁(yè),那么服務(wù)器會(huì)直接把靜態(tài)網(wǎng)頁(yè)的內(nèi)容響應(yīng)給客戶(hù)端。如果客戶(hù)端請(qǐng)求的是動(dòng)態(tài)網(wǎng)頁(yè),服務(wù)器需要先把動(dòng)態(tài)網(wǎng)頁(yè)換成靜態(tài)網(wǎng)頁(yè),然后再把轉(zhuǎn)換后的靜態(tài)網(wǎng)頁(yè)響應(yīng)給客戶(hù)端
靜態(tài)資源的幾種類(lèi)型
瀏覽器渲染:HTML、CSS、JAVASCRIPT
圖片:JPEG、GIF、PNG ...
視頻:FLV、MPEG ...
文件:TXT、等任意下載文件
2、CDN(Content Delivery Network)內(nèi)容分發(fā)網(wǎng)絡(luò)其基本思路是盡可能避開(kāi)互聯(lián)網(wǎng)上有可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié),使內(nèi)容傳輸?shù)母臁⒏€(wěn)定。通過(guò)在網(wǎng)絡(luò)各處放置節(jié)點(diǎn)服務(wù)器所構(gòu)成的在現(xiàn)有的互聯(lián)網(wǎng)基礎(chǔ)之上的一層智能虛擬網(wǎng)絡(luò),CDN系統(tǒng)能夠?qū)崟r(shí)地根據(jù)網(wǎng)絡(luò)流量和各節(jié)點(diǎn)的連接、負(fù)載狀況以及到用戶(hù)的距離和響應(yīng)時(shí)間等綜合信息將用戶(hù)的請(qǐng)求重新導(dǎo)向離用戶(hù)最近的服務(wù)節(jié)點(diǎn)上。其目的是使用戶(hù)可就近取得所需內(nèi)容,解決 Internet網(wǎng)絡(luò)擁擠的狀況,提高用戶(hù)訪(fǎng)問(wèn)網(wǎng)站的響應(yīng)速度。3、配置語(yǔ)法
sendfile(文件讀?。?/p>
配置語(yǔ)法:sendfile on|off;
默認(rèn):無(wú)
Context:http,server,location,if in location
tcp_nopush(sendfile開(kāi)啟的情況下,提高網(wǎng)絡(luò)包的傳輸效率)
配置語(yǔ)法:tcp_nopush on|off;
默認(rèn):無(wú)
Context:http,server,location
tcp_nodelay(keepalive連接下,提高網(wǎng)絡(luò)包的傳輸實(shí)時(shí)性)
配置語(yǔ)法:tcp_nodely on|off;
默認(rèn):無(wú)
Context:http,server,location
gzip(壓縮)
配置語(yǔ)法:gzip on|off;
默認(rèn):無(wú)
Context:http,server,location,if in location
gizp_comp_level(壓縮比)
配置語(yǔ)法:gzip_comp_level level;
默認(rèn):無(wú);
Context:http,server,location
gzip_http_version(gzip的http的版本)
配置語(yǔ)法:gzip_http_version 1.0|1.1;
默認(rèn):無(wú)
Context:http,server,location
gzip_static(預(yù)讀gzip功能)
配置語(yǔ)法:gzip_static on|off|always;
默認(rèn):gzip_static off;
Context:http,server,location
4、瀏覽器緩存HTTP協(xié)議定義的緩存機(jī)制(如:Expires;Cache-control等)
瀏覽器無(wú)緩存:
瀏覽器請(qǐng)求→無(wú)緩存→請(qǐng)求WEB服務(wù)器→請(qǐng)求相應(yīng),協(xié)商→呈現(xiàn)
客戶(hù)端有緩存
瀏覽器請(qǐng)求→有緩存→校驗(yàn)過(guò)期→呈現(xiàn)
校驗(yàn)過(guò)期機(jī)制
校驗(yàn)方式 | 對(duì)應(yīng)頭信息 |
---|---|
校驗(yàn)是否過(guò)期 | Expires、Cache-Control(max-age) |
協(xié)議中的Etag頭信息校驗(yàn) | Etag |
Last-Modified有信息校驗(yàn) | Last-Modified |
第一次請(qǐng)求:
第二次請(qǐng)求:
expires(response的headers添加Cache-Control、Expires)
配置語(yǔ)法:expires [modified] time; expires epoch |max |off;
默認(rèn):expires off;
Context:http,server,location,if in location
5、跨站訪(fǎng)問(wèn)Nginx如何打開(kāi)跨站訪(fǎng)問(wèn)? Access-Controller-Allow-Origin
add_header
配置語(yǔ)法:add_header name value [always];
默認(rèn):無(wú)
Context:http,server,location,if in location
name可以為 Access-Controller-Allow-Origin 和 Access-Controller-Allow-Method6、防盜鏈
基于http_refer防盜鏈配置模塊
配置語(yǔ)法:valid_referers none|blocked|server_names|string...;
默認(rèn):無(wú)
Context:server,location
valid_referers none blocked IP if($invalid_referer) { return 403; }
提醒:可以使用curl來(lái)測(cè)試配置好的防盜鏈:curl -e "http:www.baidu.com" -I IP
正向代理
對(duì)象是客戶(hù)端(比如說(shuō)想訪(fǎng)問(wèn)外網(wǎng),把代理服務(wù)器設(shè)到代理地址,客戶(hù)端可以訪(fǎng)問(wèn)任何網(wǎng)站)
反向代理
對(duì)象是服務(wù)端(并不需要關(guān)心訪(fǎng)問(wèn)的是哪一臺(tái)服務(wù)器,反向代理就放在服務(wù)端。反向代理會(huì)幫我們處理請(qǐng)求)
proxy_pass
配置語(yǔ)法:proxy_pass URL;
默認(rèn):無(wú)
Context:location,if in location,limit_except
其他代理的一些語(yǔ)法補(bǔ)充:
proxy_buffering(緩沖區(qū))
語(yǔ)法配置:proxy_buffering on | off;
默認(rèn):無(wú);
Context:http,server,location
擴(kuò)展:proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size
proxy_redirect(跳轉(zhuǎn)重定向)
配置語(yǔ)法:proxy_redirect default;proxy_redirect off;proxy_redirect redirect replacement;
默認(rèn):無(wú)
Context:http,server,location
proxy_set_header(頭信息)
配置語(yǔ)法:proxy_set_header file value;
默認(rèn):proxy_set_header Host $proxy_host;proxy_set_header Connection close;
Context:http,server,location
擴(kuò)展:proxy_hide_header、proxy_set_body
proxy_connect_timeout(超時(shí))
配置語(yǔ)法:proxy_connect_timeout time;
默認(rèn):無(wú)
Context:http,server,location
擴(kuò)展:proxy_read_timeout、proxy_send_timeout
配置文件中的例子:
proxy_pass http://127.0.0.1:8080; proxy_redirect default; proxy_set_header HOST $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffer_size 32k; proxy_buffering on; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k;三、Nginx作為負(fù)載均衡服務(wù)
負(fù)載均衡:建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價(jià)有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。
負(fù)載均衡,英文名稱(chēng)為L(zhǎng)oad Balance,其意思就是分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行執(zhí)行,例如Web服務(wù)器、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。
upstream
配置語(yǔ)法: upstream name {...}
默認(rèn):無(wú)
Context:http
簡(jiǎn)單配置例子:
upstream ronaldo { server ip:port [param]; server ip:port [param]; server ip:port [param]; } server { location / { proxy_pass http://ronaldo; } }param參數(shù)解釋?zhuān)?/b>
param | 意義 |
---|---|
down | 當(dāng)前的server暫時(shí)不參與負(fù)載均衡 |
weight=num | 權(quán)重,num越大,輪詢(xún)到的概率越大 |
backup | 預(yù)留的備份服務(wù)器 |
max_fails | 允許請(qǐng)求失敗的次數(shù) |
fail_timeout | 經(jīng)過(guò)max_fails失敗后,服務(wù)暫停的時(shí)間(默認(rèn)是10s) |
max_conns | 限制最大的接收的連接數(shù) |
算法 | 意義 |
---|---|
輪詢(xún) | 按時(shí)間順序逐一分配到不同的后端服務(wù)器 |
加權(quán)輪詢(xún) | weight值越大,分配到的訪(fǎng)問(wèn)幾率越高 |
ip_hash | 每個(gè)請(qǐng)求按訪(fǎng)問(wèn)IP的hash結(jié)果分配,這樣來(lái)自同一個(gè)IP就固定訪(fǎng)問(wèn)同一個(gè)后端服務(wù)器 |
least_conn | 最少連接數(shù),哪個(gè)服務(wù)器連接數(shù)少就分發(fā) |
url_hash | 按照訪(fǎng)問(wèn)的URL的hash結(jié)果來(lái)分配請(qǐng)求,是每個(gè)URL定向到同一個(gè)后端服務(wù)器 |
hash關(guān)鍵字值 | hash自定義的key |
ip_hash:
只需要在upstream中加入 ip_hash; 即可
缺陷:如果走代理,那么remote_addr就不是用戶(hù)真實(shí)的ip
url_hash(1.7.2版本以后可用):
配置語(yǔ)法:hash key [consistent];
默認(rèn):無(wú)
Context:upstream
key可以是$request_uri,根據(jù)url進(jìn)行hash四、Nginx作為緩存服務(wù) 1、緩存的類(lèi)型
服務(wù)端緩存。例:memcache、reids
代理緩存。例:Nginx緩存服務(wù)端的數(shù)據(jù)
客戶(hù)端緩存。
2、常用緩存配置
proxy_cache_path
配置語(yǔ)法proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size] [use_temp_path]...
默認(rèn):無(wú)
Context:http
proxy_cache
配置語(yǔ)法:proxy_cache zone | off;
默認(rèn):proxy_cache off;
Context:http,server,location
proxy_cache_valid(緩存過(guò)期周期)
配置語(yǔ)法:proxy_cache_valid [code...] time
默認(rèn):無(wú)
Context:http、server、location
proxy_cache_key(緩存的維度)
配置語(yǔ)法:proxy_cache_key string;
默認(rèn):proxy_cache_key $scheme$proxy_host$request_uri;
Context:http、server、location
常見(jiàn)配置:
proxy_cache_path cache_path levels=1:2 keys_zone=key_name:10m max_size=10g inactive=60m use_temp_path=off; server { loaction / { proxy_pass http://ronaldo; proxy_cache key_name; proxy_cache_valid 200 304 12h; proxy_cache_valid any 10m; proxy_cache_key $host$uri$is_args$args; add_header Nginx-Cache "$upstream_cache_status"; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } }2、清除指定緩存
rm -rf 緩存目錄內(nèi)容
第三方擴(kuò)展模塊:ngx_cache_purge
3、如何讓部分頁(yè)面不緩存
proxy_no_cache
配置語(yǔ)法:proxy_no_cache string ...;
默認(rèn):無(wú)
Context:http,server,location
簡(jiǎn)單示例
if ($request_uri ~ ^/(url_3|login|register|password/reset)) { set $cookie_nocache 1; } location / { proxy_no_cache $cookie_nocache; }4、大文件分片請(qǐng)求
slice
語(yǔ)法配置:slice size;
默認(rèn):slice 0;
Context:http、server,location
優(yōu)勢(shì):每個(gè)子請(qǐng)求收到的數(shù)據(jù)都會(huì)形成一個(gè)獨(dú)立的文件,一個(gè)請(qǐng)求斷了,其他請(qǐng)求不受影響。
缺點(diǎn):當(dāng)文件很大或者slice很小的時(shí)候,可能會(huì)導(dǎo)致文件描述符耗盡等待情況。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39909.html
摘要:場(chǎng)景實(shí)踐篇一作為靜態(tài)資源服務(wù)動(dòng)態(tài)資源和靜態(tài)資源客戶(hù)端請(qǐng)求的頁(yè)面如果是靜態(tài)網(wǎng)頁(yè),那么服務(wù)器會(huì)直接把靜態(tài)網(wǎng)頁(yè)的內(nèi)容響應(yīng)給客戶(hù)端。 Nginx-場(chǎng)景實(shí)踐篇 一、Nginx作為靜態(tài)資源Web服務(wù) 1、動(dòng)態(tài)資源和靜態(tài)資源 客戶(hù)端請(qǐng)求的頁(yè)面如果是靜態(tài)網(wǎng)頁(yè),那么服務(wù)器會(huì)直接把靜態(tài)網(wǎng)頁(yè)的內(nèi)容響應(yīng)給客戶(hù)端。如果客戶(hù)端請(qǐng)求的是動(dòng)態(tài)網(wǎng)頁(yè),服務(wù)器需要先把動(dòng)態(tài)網(wǎng)頁(yè)換成靜態(tài)網(wǎng)頁(yè),然后再把轉(zhuǎn)換后的靜態(tài)網(wǎng)頁(yè)響應(yīng)給客戶(hù)...
摘要:假設(shè)反向代理層是,里能夠配置多個(gè)后端,并且能夠探測(cè)到多個(gè)后端的存活性。以為例,天然支持主從同步,官方也有哨兵機(jī)制,來(lái)做的存活性檢測(cè)。方法論上,高可用是通過(guò)冗余自動(dòng)故障轉(zhuǎn)移來(lái)實(shí)現(xiàn)的。 究竟啥才是互聯(lián)網(wǎng)架構(gòu)高可用 一、什么是高可用 高可用HA(High Availability)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指,通過(guò)設(shè)計(jì)減少系統(tǒng)不能提供服務(wù)的時(shí)間。假設(shè)系統(tǒng)一直能夠提供服...
摘要:一靜態(tài)資源服務(wù)靜態(tài)資源類(lèi)型類(lèi)型文件類(lèi)型瀏覽器端渲染圖片視頻文件等其他下載文件靜態(tài)資源服務(wù)場(chǎng)景二靜態(tài)資源核心配置文件讀取是一種高效傳輸文件的模式設(shè)置為表示啟動(dòng)高效傳輸文件的模式。語(yǔ)法壓縮開(kāi)啟壓縮,可以加快資源響應(yīng)速度,同時(shí)節(jié)省網(wǎng)絡(luò)帶寬資源。 一、靜態(tài)資源web服務(wù) showImg(https://segmentfault.com/img/remote/1460000015873025?w...
閱讀 3049·2021-10-13 09:39
閱讀 1891·2021-09-02 15:15
閱讀 2455·2019-08-30 15:54
閱讀 1814·2019-08-30 14:01
閱讀 2614·2019-08-29 14:13
閱讀 1428·2019-08-29 13:10
閱讀 2741·2019-08-28 18:15
閱讀 3904·2019-08-26 10:20