CDN的基本原理是普遍採用各類緩存服務器,將這些緩存服務器分佈到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工做正常的緩存服務器上,由緩存服務器直接響應用戶請求。
css
tcp_nopush 告訴nginx在一個數據包裏發送全部頭文件,而不一個接一個的發送。
tcp_nodelay 告訴nginx不要緩存數據,而是一段一段的發送--當須要及時發送數據時,就應該給應用設置這個屬性,這樣發送一小塊數據信息時就不能當即獲得返回值。html
開啓nginx gzip壓縮後,網頁、css、js等靜態資源的大小會大大的減小,從而能夠節約大量的帶寬,提升傳輸效率,給用戶快的體驗,但會消耗cpu資源.node
http_gzip_static_module
預讀gzip功能nginx
nginx配置,在相應的目錄下添加相應的文件,取消註釋進行檢測查看
web
HTTP協議定義的緩存機制(如: Expires; Cache-control等)算法
無緩存請求
shell
有緩存請求
api
校驗機制
校驗順序
瀏覽器
Expires
緩存
http://nginx.org/en/docs/http/ngx_http_referer_module.html
valid_referers 表明可信referer,此處可信referer的設置將會使變量$invalid_referer的值爲「0」,反之$invalid_referer的值爲「1」,則執行IF條件名並返回相關限制結果。 none是指當referer爲空的時候,好比在連接器中直接打開一個圖片連接,若要禁止用戶直接訪問,則必須省掉none。 blocked 是指通過某些代理或firewall過濾後的referer,好比省略了url前綴等,一樣地,若要禁止用戶直接訪問,則必須省掉blocked。 server_names 是nginx配置文件中的server name項,代指網站域名。
http://nginx.org/en/docs/http/ngx_http_proxy_module.html
正向代理和反向代理的區別在於對象的不一樣
正向代理的對象是客戶端,反向代理的對象是服務器
正向代理: A向C借錢,因爲一些狀況不能直接向C借錢,因而A想了一個辦法,他讓B去向C借錢,這樣B就代替A向C借錢,A就獲得了C的錢,C並不知道A的存在,B就充當了A的代理人的角色。
反向代理: A向B借錢,B沒有拿本身的錢,而是悄悄地向C借錢,拿到錢以後再交給A,A覺得是B的錢,他並不知道C的存在。 (我的搭建的豆瓣api)
豆瓣api代理
location /v2 { proxy_store off; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Referer 'no-referrer-when-downgrade'; proxy_set_header User-Agent 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; proxy_pass https://api.douban.com/v2/; }
負載均衡 創建在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增長吞吐量、增強網絡數據處理能力、提升網絡的靈活性和可用性。
負載均衡,英文名稱爲Load Balance,其意思就是分攤到多個操做單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工做任務。
四層負載均衡: 即在OSI第4層(TCP層)工做。此種Load Balance不理解應用協議(如HTTP/FTP/MySQL等等)。例子:LVS,F5。
七層負載均衡: OSI的最高層,應用層。此時,該Load Balancer能理解應用協議。例子: haproxy,MySQL Proxy。
http://nginx.org/en/docs/http/ngx_http_upstream_module.html
Syntax: upstream name { ... }
Default: —
Context: http
upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; } server { location / { proxy_pass http://backend; } }
調度算法
客戶端緩存, nginx緩存, 服務器緩存
http://nginx.org/en/docs/http/ngx_http_proxy_module.html
Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]; Default: — Context: http Syntax: proxy_cache zone | off; Default: proxy_cache off; Context: http, server, location # 設置不一樣響應代碼的緩存時間 Syntax: proxy_cache_valid [code ...] time; Default: — Context: http, server, location # 緩存維度(鍵) Syntax: proxy_cache_key string; Default: proxy_cache_key $scheme$proxy_host$request_uri; Context: http, server, location
如何清理指定緩存
- rm -rf 緩存目錄
- 第三方擴展模塊ngx_cache_purge
如何讓部分頁面不緩存
Syntax: proxy_no_cache string ...;
Default: —
Context: http, server, location
優點:每一個子請求收到的數據都會造成獨立文件,一個請求中斷了,其餘請求不受影響,本來狀況請求中斷,再次請求文件將從頭開始,而開啓分片請求,就接下去獲取未請求的小文件
劣勢:當文件很大或者slice很小時,可能會致使文件描述符耗盡等狀況
Syntax: slice size; Default: slice 0; Context: http, server, location