为什么你应该总是使用Nginx与微型缓存
每个人都知道尽可能多地从您的网络服务器推出。 在我作为托管工程师的日常职业中,这意味着我经常得到同样的问题,“哇,很酷的网站,但它能应付大量的流量吗?
“正常”的情况
在Apache下使用mod_php运行的“正常”网站应该能够轻松推出20个请求,但是如果您每秒收到50个请求(对于某些网站,如政党网站等,不奇怪)呢? 在我看来,答案是放弃Apache,因为现在,Apache只是不再削减它了。
是! Nginx!
来了Nginx! 那么你所做的就是在Nginx上设置你的网站,并运行一个快速的loadtest(例如,一个1000个并发用户的1000个请求),你看到你不会比Apache更多,但是如何呢? 这真的很简单,这是因为Nginx没有内置的PHP模块,所以你需要一个fastcgi处理器来处理php页面(我建议使用php-fpm,因为它比spawn-cgi好)。 那么现在你应该怎么用? 使用microcaching!
什么是Microcaching?
什么是微型缓存? 那么理论就是你在短时间内缓存你的文件等(例如1秒)。 这是什么意思是当用户请求缓存它的页面,所以下一个请求的任何其他将来自缓存,并且100个用户在5秒内请求只有20个用户中的1将不得不建立整个页面(并与Nginx和一个很好的结构化网站这没有任何问题)。
我不相信!
你最好相信它! 让我举个例子,看看你现在在这个网站上。 假设我们对200个并发用户的1000个请求进行了负载测试。 如果你在Apache下运行这个网站,你将得到10-40个请求,最多! 而且您的网络服务器将受到一些严重的负载,您将被迫扩展您的环境。 在没有microcaching的php-fpm下,Nginx是一样的(可能有更多的请求,但你的服务器会运行很多php-fpm进程来处理请求)。 使用微型缓存,您将获得高达300-450次的请求!
好的,给我吧!
Microcaching实际上很容易设置,下面是一个可以为使用PHP制作的任何网站运行的示例配置(在这种情况下,它是特定于Wordpress的)。 看一看:
# # your website # server { listen 80; server_name <your hostnames>; access_log <your access log> main; error_log <your error log>; root <your root folder>; location / { index index.php index.html index.htm; } if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; } location ~ \.php$ { # Setup var defaults set $no_cache ""; # If non GET/HEAD, don't cache & mark user as uncacheable for 1 second via cookie if ($request_method !~ ^(GET|HEAD)$) { set $no_cache "1"; } # Drop no cache cookie if need be # (for some reason, add_header fails if included in prior if-block) if ($no_cache = "1") { add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/"; add_header X-Microcachable "0"; } # Bypass cache if no-cache cookie is set if ($http_cookie ~* "_mcnc") { set $no_cache "1"; } # Bypass cache if flag is set fastcgi_no_cache $no_cache; fastcgi_cache_bypass $no_cache; fastcgi_cache microcache; fastcgi_cache_key $server_name|$request_uri; fastcgi_cache_valid 404 30m; fastcgi_cache_valid 200 10s; fastcgi_max_temp_file_size 1M; fastcgi_cache_use_stale updating; fastcgi_pass localhost:9000; fastcgi_pass_header Set-Cookie; fastcgi_pass_header Cookie; fastcgi_ignore_headers Cache-Control Expires Set-Cookie; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; #fastcgi_intercept_errors on; include fastcgi_params; } }
您还应该在nginx.conf
中放置缓存格式和缓存区域,将这些行添加到您的http {}
块:
fastcgi_cache_path /var/cache/nginx2 levels=1:2 keys_zone=microcache:5m max_size=1000m; log_format cache '$remote_addr - $remote_user [$time_local] "$request" ' '$status $upstream_cache_status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
尝试一下!
我鼓励大家自己尝试,看看表现有所改善! 我知道这是从Apache到Nginx(配置方式)的一个重大转变,但是你会很快得到它的挂起!
查看http://livebyt.es更多的文章即将推出!