首頁 後端開發 php教程 Nginx的Web快取服務與新浪網的開源NCACHE模組

Nginx的Web快取服務與新浪網的開源NCACHE模組

Jul 30, 2016 pm 01:32 PM
cache http location proxy server

<span><span><span>#</span>Nginx的Web缓存服务与新浪网的开源NCACHE模块</span><span></span></span><span><span><span>##</span>什么是web缓存</span><span></span><span> Web缓存位于内容源web服务器和客户端之间,当用户访问一个	URL时,web缓存服务器回去后端web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,web缓存服务器直接输出内容给客户端,而不是像源服务器再次发送请求。web缓存降低了内容源web服务器、数据库的负载,减轻了网络延迟,提高了用户的响应速度,增强了用户体验。</span><span></span><span>最著名的还要数Squid Cache,其主要在Unix一类系统运行。</span><span></span></span><span><span><span>##</span>Nginx的Web缓存服务</span><span></span><span>Nginx从0.7.48后支持类似于Squid的缓存模块。这个缓存是把URL及相关组合当做key,用md5算法对key进行希哈,得到硬盘上对应的希哈路径,从而将缓存内容保存在该目录内。支持任意URL链接。同时也支持404/301/302这样的非200状态码。</span><span></span><span>Nginx的Web缓存服务主要用于proxy_cache相关指令集和fastcgi相关指令集构成,前者用于反向代理时,对后端内容源进行缓存,后者主要用于对FastCDI的动态程序进行缓存。两者功能基本一样。</span><span></span></span><span><span><span>###</span>proxy_cache相关指令集</span><span></span><span><span><span>**</span>1、proxy_cache指令<span>**</span></span></span><span></span><span>语法:proxy<span><span>_</span>cache zone<span>_</span></span>name;</span><span></span><span>默认值:none</span><span></span><span>使用环境:http,server,location</span><span></span><span>该指令用于设置那个缓存区将被应用,zone<span><span>_</span>name的值为proxy<span>_</span></span>cache_path指令创建的缓存区明称。</span><span></span><span><span><span>**</span>2、proxy_cache_path指令<span>**</span></span></span><span></span><span>语法:proxy<span><span>_</span>cache<span>_</span></span>path path<span><span><span>[</span><span>levels=number</span><span>]</span></span>keys_z <span><span>[</span><span>max_size=size</span><span>]</span></span></span>;</span><span></span><span>默认值:none</span><span></span><span>使用环境:HTTP</span><span></span><span><span><span>**</span>eg:<span>**</span></span></span><span></span><span>proxy<span><span>_</span>cache<span>_</span></span>path /data0/proxy<span><span>_</span>cache<span>_</span></span>dir  levels=1:2 keys<span><span>_</span>z>_</span></span>one: 500m inactive=1d max_size=30g;</span><span></span><span>注意该指令只能在http标签内配置,levels指定该缓存有两层hash目录,第一层为1个字母,第二层为2个字母,保存文件名类似于/data0/proxy<span><span>_</span>cache<span>_</span></span>dir/c/29/fdg35415fg35f4gsdf2g1535gh465h;key<span><span>_</span>zone参数用来为缓存区起名,500m指定内存空间大小为500MB;inactive的1d是如果缓存数据在1天之内没有被访问,将被删除;max<span>_</span></span>size的30g是指硬盘的缓存空间为30GB。</span><span></span><span><span><span>**</span>3proxy_cache_methods指令<span>**</span></span></span><span></span><span>语法:proxy<span><span>_</span>cache<span>_</span></span>methods [GET HEAD POST];</span><span></span><span>默认值:proxy<span><span>_</span>cache<span>_</span></span>methods GET HEAD;</span><span></span><span>使用环境:http,server,location</span><span></span><span>该指令用于设置用于缓存那些HTTP方法,默认缓存 HTTP GET/HEAD 方法,不缓存HTTP POST方法。</span><span></span><span><span><span>**</span>4proxy_cache_min_uses指令<span>**</span></span></span><span></span><span>语法:proxy<span><span>_</span>cache<span>_</span></span>min<span><span>_</span>uses the<span>_</span></span>number;</span><span></span><span>默认值:proxy<span><span>_</span>cache<span>_</span></span>min_uses 1;</span><span></span><span>使用环境:http,server,location</span><span></span><span>该指令设置缓存最小的使用次数,默认值是1.</span><span></span><span><span><span>**</span>5、proxy_cache_valid指令<span>**</span></span></span><span></span><span>语法:proxy<span><span>_</span>cache<span>_</span></span>valid reply<span><span>_</span>code [reply<span>_</span></span>code...]time;</span><span></span><span>默认值:none</span><span></span><span>使用环境:http,server,location</span><span></span><span>该指令用于对不同的返回状态码的URL设置不同的缓存时间,例如:</span><span></span><span>proxy<span><span>_</span>cache<span>_</span></span>valid 200 302 10m;</span><span></span><span>proxy<span><span>_</span>cache<span>_</span></span>valid 404      1m;</span><span></span><span>如果不指定状态吗,直接指定时间,则只有200、301、302状态的URL缓存5分钟。</span><span></span><span><span><span>**</span>6、proxy_cache_key指令<span>**</span></span></span><span></span><span>语法:proxy<span><span>_</span>cache<span>_</span></span>key line;</span><span></span><span>默认值:none</span><span></span><span>使用环境:http,server,location</span><span></span><span>该指令用来设置web缓存的key值,Nginx根据key值md5希哈存储缓存。一般根据<span><span>`</span>‘$host(域名)、$request_uri(请求路径)’<span>`</span></span>等组合变量合成proxy<span><span>_</span>cache<span>_</span></span>key.例如:<span><span>`</span>proxy_cache_key "$host:$server_port$uri$is_args$args";<span>`</span></span></span><span></span><span><span><span>##</span>proxy_cache完整示例</span><span><span></span><span></span>	su<span></span>	yum -y install pcre//安装pcre<span></span>	wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz<span></span>	tar zxvf ngx_cache_purge-2.3.tar.gz//获取nginx_cache_purge<span></span>	cd nginx-1.6.3//进入你的nginx文件目录(nginx安装请参考前面的博客)<span></span>	 ./configure --user=www --group=www --addmodule=../ngx_cache_purge-2.3 --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module<span></span></span><span></span><span><span><span>**</span>配置nginx.conf<span>**</span></span></span><span></span><span><span><span>**</span>cd /usr/local/webserver/nginx/conf<span>**</span></span></span><span></span><span></span></span><span><span><span>```</span><span></span>#user  www www;<span></span>worker_processes  1;<span></span><span></span>#error_log  logs/error.log;<span></span>#error_log  logs/error.log  notice;<span></span>#error_log  logs/error.log  info;<span></span><span></span>#pid        logs/nginx.pid;<span></span><span></span><span></span>events {<span></span>    use epoll;<span></span>    worker_connections  1024;<span></span>}<span></span><span></span><span></span>http {<span></span>    include       mime.types;<span></span>    default_type  application/octet-stream;<span></span><span></span>    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '<span></span>    #                  '$status $body_bytes_sent "$http_referer" '<span></span>    #                  '"$http_user_agent" "$http_x_forwarded_for"';<span></span><span></span>    #access_log  logs/access.log  main;<span></span><span></span>    #charset utf-8;<span></span><span></span>    server_name_hash_bucket_size 128;<span></span>    client_header_buffer_size 32k;<span></span>    large_client_header_buffers 4 32k;<span></span><span></span>    sendfile        on;<span></span>    #tcp_nopush     on;<span></span><span></span>    keepalive_timeout  30;<span></span><span></span>    tcp_nodely  on;<span></span><span></span>    proxy_temp_path /data0/proxy_temp_path;<span></span><span></span>    proxy_temp_path /data0/proxy_temp_path levels=1:2 key_z inactive=1d max_size=30g;<span></span>    upstream my_sever_pool{<span></span>    	server 192.168.1.2:80 weight=1 max_fails=2 fail_timeout=30s;<span></span>    	server 192.168.1.3:80 weight=1 max_fails=2 fail_timeout=30s;<span></span>    	server 192.168.1.4:80 weight=1 max_fails=2 fail_timeout=30s;<span></span><span></span>	}<span></span><span></span><span></span><span></span>    #gzip  on;<span></span><span></span>    server {<span></span>        listen       80;<span></span>        server_name  localhost;<span></span><span></span>        #charset koi8-r;<span></span><span></span>        #access_log  logs/host.access.log  main;<span></span><span></span>        location / {<span></span>            proxy_set_header Host $host;<span></span>	    proxy_set_header X-Forward-For $remote_addr;<span></span>	    proxy_pass http://my_server_pool;<span></span>	   # root   html;<span></span>            #index  index.html index.htm;<span></span>        }<span></span>	location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$<span></span>	{<span></span>		#使用web缓存区cache_one<span></span>		proxy_cache cache_one;<span></span><span></span>		#对不同状态码设置不同缓存时间<span></span>		proxy_cache_valid 200 304 12h;<span></span>		proxy_cache_valid 301 302 1m;<span></span>		proxy_cache_valid any im;<span></span>		#设置web缓存的key值,nginx根据key值md5希哈存储缓存,这里根据“域名/URL 参数”组合成key。<span></span>		proxy_cache_key $host$uri$is_args$args;<span></span>		#反向代理,访问后端内容源服务器<span></span>		proxy_set_header Host $host;<span></span>		proxy_set_header X-Forwarded-For $remote_addr;<span></span>		proxy_pass http:my_server_pool;<span></span>	}<span></span>	#用于清除缓存,假设一个URL为http://my.domain.com/text.gif通过访问http://my.domain.com/purge/test.gif可以清除该URK缓存。<span></span>	location ~ /purge(/.*)<span></span>	{<span></span>		#设定只允许指定的IP或IP段才可以清除URL缓存。<span></span>		allow 		127.0.0.1<span></span>		allow		192.168.0.0/16;<span></span>		deny		all;<span></span>		proxy_cache_purge cache_one $shot$1$is-args$args;<span></span>	}<span></span>	access_log 0ff<span></span><span></span>        #error_page  404              /404.html;<span></span><span></span>        # redirect server error pages to the static page /50x.html<span></span>        #<span></span>        error_page   500 502 503 504  /50x.html;<span></span>        location = /50x.html {<span></span>            root   html;<span></span>        }<span></span><span></span>        # proxy the PHP scripts to Apache listening on 127.0.0.1:80<span></span>        #<span></span>        #location ~ \.php$ {<span></span>        #    proxy_pass   http://127.0.0.1;<span></span>        #}<span></span><span></span>        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000<span></span>        #<span></span>        #location ~ \.php$ {<span></span>        #    root           html;<span></span>        #    fastcgi_pass   127.0.0.1:9000;<span></span>        #    fastcgi_index  index.php;<span></span>        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;<span></span>        #    include        fastcgi_params;<span></span>        #}<span></span><span></span>        # deny access to .htaccess files, if Apache's document root<span></span>        # concurs with nginx's one<span></span>        #<span></span>        #location ~ /\.ht {<span></span>        #    deny  all;<span></span>        #}<span></span>    }<span></span><span></span><span></span>    # another virtual host using mix of IP-, name-, and port-based configuration<span></span>    #<span></span>    #server {<span></span>    #    listen       8000;<span></span>    #    listen       somename:8080;<span></span>    #    server_name  somename  alias  another.alias;<span></span><span></span>    #    location / {<span></span>    #        root   html;<span></span>    #        index  index.html index.htm;<span></span>    #    }<span></span>    #}<span></span><span></span><span></span>    # HTTPS server<span></span>    #<span></span>    #server {<span></span>    #    listen       443 ssl;<span></span>    #    server_name  localhost;<span></span><span></span>    #    ssl_certificate      cert.pem;<span></span>    #    ssl_certificate_key  cert.key;<span></span><span></span>    #    ssl_session_cache    shared:SSL:1m;<span></span>    #    ssl_session_timeout  5m;<span></span><span></span>    #    ssl_ciphers  HIGH:!aNULL:!MD5;<span></span>    #    ssl_prefer_server_ciphers  on;<span></span><span></span>    #    location / {<span></span>    #        root   html;<span></span>    #        index  index.html index.htm;<span></span>    #    }<span></span>    #}<span></span><span></span>}<span></span><span>```</span></span><span></span><span></span></span>
登入後複製

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了Nginx的Web缓存服务与新浪网的开源NCACHE模块,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

http狀態碼520是什麼意思 http狀態碼520是什麼意思 Oct 13, 2023 pm 03:11 PM

http狀態碼520是指伺服器在處理請求時遇到了一個未知的錯誤,無法提供更具體的資訊。用於表示伺服器在處理請求時發生了一個未知的錯誤,可能是由於伺服器配置問題、網路問題或其他未知原因導致的。通常是由伺服器配置問題、網路問題、伺服器過載或程式碼錯誤等原因導致的。如果遇到狀態碼520錯誤,最好聯絡網站管理員或技術支援團隊以取得更多的資訊和協助。

Nginx Proxy Manager下的容器與微服務的部署策略 Nginx Proxy Manager下的容器與微服務的部署策略 Sep 27, 2023 pm 01:06 PM

NginxProxyManager下的容器與微服務的部署策略,需要具體程式碼範例摘要:隨著微服務架構的流行,容器化技術成為了現代軟體開發的重要組成部分。而在微服務架構中,NginxProxyManager扮演著很重要的角色,用來管理和代理微服務的流量。本文將介紹如何使用NginxProxyManager來部署和管理容器化的微服務,並提供相關的程式碼示

http狀態碼403是什麼 http狀態碼403是什麼 Oct 07, 2023 pm 02:04 PM

http狀態碼403是伺服器拒絕了客戶端的請求的意思。解決http狀態碼403的方法是:1、檢查身份驗證憑證,如果伺服器要求身份驗證,確保提供正確的憑證;2、檢查IP位址限制,如果伺服器對IP位址進行了限制,確保客戶端的IP位址被列入白名單或未列入黑名單;3、檢查文件權限設置,如果403狀態碼與文件或目錄的權限設置有關,確保客戶端具有足夠的權限訪問這些文件或目錄等等。

如何安裝、解除安裝、重設Windows伺服器備份 如何安裝、解除安裝、重設Windows伺服器備份 Mar 06, 2024 am 10:37 AM

WindowsServerBackup是WindowsServer作業系統自帶的功能,旨在協助使用者保護重要資料和系統配置,並為中小型和企業級企業提供完整的備份和復原解決方案。只有執行Server2022及更高版本的使用者才能使用此功能。在本文中,我們將介紹如何安裝、解除安裝或重設WindowsServerBackup。如何重置Windows伺服器備份如果您的伺服器備份遇到問題,備份所需時間過長,或無法存取已儲存的文件,那麼您可以考慮重新設定WindowsServer備份設定。要重設Windows

Nginx Proxy Manager教學:快速入門指南 Nginx Proxy Manager教學:快速入門指南 Sep 27, 2023 pm 05:39 PM

NginxProxyManager教學:快速入門指南,需要具體程式碼範例引言:隨著網路技術的發展,代理伺服器成為我們日常使用網路的一部分。 NginxProxyManager是一個基於Nginx的代理伺服器管理平台,可以幫助我們快速建立和管理代理伺服器。本篇文章將為大家介紹NginxProxyManager的快速入門指南,以及一些具體的程式碼範例。一

如何使用Nginx Proxy Manager實現多台伺服器的負載平衡 如何使用Nginx Proxy Manager實現多台伺服器的負載平衡 Sep 27, 2023 pm 09:42 PM

如何使用NginxProxyManager實作多台伺服器的負載平衡NginxProxyManager是一個基於Nginx開發的代理伺服器管理工具,它提供了一個簡單易用的Web介面,可以方便地設定和管理Nginx代理伺服器。在實際應用中,我們經常需要將請求分發到多台伺服器上,以實現負載平衡和提高系統的效能和可用性。本文將介紹如何使用NginxProx

瞭解網頁重定向的常見應用場景並了解HTTP301狀態碼 瞭解網頁重定向的常見應用場景並了解HTTP301狀態碼 Feb 18, 2024 pm 08:41 PM

掌握HTTP301狀態碼的意思:網頁重定向的常見應用場景隨著網路的快速發展,人們對網頁互動的要求也越來越高。在網頁設計領域,網頁重定向是一種常見且重要的技術,透過HTTP301狀態碼來實現。本文將探討HTTP301狀態碼的意義以及在網頁重新導向中的常見應用場景。 HTTP301狀態碼是指永久重新導向(PermanentRedirect)。當伺服器接收到客戶端發

HTTP 200 OK:了解成功回應的意義與用途 HTTP 200 OK:了解成功回應的意義與用途 Dec 26, 2023 am 10:25 AM

HTTP狀態碼200:探索成功回應的意義與用途HTTP狀態碼是用來表示伺服器回應狀態的數字代碼。其中,狀態碼200表示請求已成功被伺服器處理。本文將探討HTTP狀態碼200的具體意義與用途。首先,讓我們來了解HTTP狀態碼的分類。狀態碼分為五個類別,分別是1xx、2xx、3xx、4xx和5xx。其中,2xx表示成功的回應。而200是2xx中最常見的狀態碼

See all articles