運維實戰:FastCGI相關調優

運維實戰:FastCGI相關調優


作用

        可以緩存fastcgi生成的內容,很多情況是php生成的動態的內容。簡單來說就是將動態頁面緩存到內存或者硬盤上,如果符合條件則直接讀取緩存,不再與PHP 通信,可以提升訪問速度,提高用戶體驗。一般而言用戶在打開網頁速度在1-2s體驗是非常好的,其頁面中包含其他的資源慢一些都是可以接受。

環境介紹

服務器IP

Nginx版本

域名

192.168.123.36

Nginx1.6.3

www.test.com

                                                                                      圖 1. 基本環境

FastCGI cache配置

         1.nginx.conf配置

user  www www;
worker_processes  8;
worker_rlimit_nofile 51200;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
events {
    worker_connections  40960;
    use epoll;
}
http {
    charset utf-8;
    include       vhosts/*.conf;
    include       mime.types;
    default_type  application/octet-stream;
    sendfile    on;
    tcp_nodelay on;
    tcp_nopush on;
    send_timeout 60;
    client_max_body_size 8m;
    keepalive_timeout  60;
    server_tokens off;
    log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    fastcgi_cache_path /cache/fastcgi_cache levels=1:2 keys_zone=CGI_Cache:10m inactive=5m max_size=1g;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    add_header X-via $server_addr;
    add_header X-Cache $upstream_cache_status;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    server_names_hash_max_size 4096;
    server_names_hash_bucket_size 2048;
    
    gzip off;
    gzip_min_length 1k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/css application/javascript text/xml;
    error_log logs/error.log error;
    
    server {
      listen 80 default;
      return 444;
    }
server {
    listen       80;
    server_name  www.test.com;
    root html/test;
    location / {
        index  index.html index.htm index.php;
    }
    location ~* \.(jpg|gif|jpeg|bmp|png|ico|txt|js|css)$
    {
        expires 7d;
    }
    location ~\.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
        fastcgi_cache CGI_Cache;
        fastcgi_cache_valid 200 302 1h;
        fastcgi_cache_valid 301 1d;
        fastcgi_cache_valid any 1m;
    }
}
    
} 

        2.測試代碼

<html>
 <head>
  <title>TEST PAGE</title>
 </head>
 <body>
 <?php echo '<p>I AM CACHE???</p>'; ?>
 </body>
</html>

       3.參數詳解

fastcgi_cache_path /cache/fastcgi_cache levels=1:2 keys_zone=CGI_Cache:10m inactive=5m max_size=1g;
#inactive 爲非活動時間爲3分鐘
#levels 第一位表示使用1級子目錄,冒號隔開第二位表示使用2級子目錄。最多使用三級。1表示每個一級子目錄的名字只能使用1個字符,內存中找多少空間存儲鍵。

fastcgi_connect_timeout 300;
#Nginx服務器與後端FastCGI服務器連接的超時時間;

fastcgi_send_timeout 300;
#Nginx允許FastCGI服務器返回數據的超時時間,否則Nginx則斷開連接;

add_header X-via $server_addr;
add_header X-Cache $upstream_cache_status;
#自定義響應報文的首部;
#$upstream_cache_status 該變量來顯示緩存的狀態

fastcgi_buffer_size 64k;
#Nginx FastCGI的緩衝區大小,用於讀取從FastCGI收到的第一部分相應信息的緩衝大小;

fastcgi_buffers 4 64k;
#設定本地需要用多少和多大的緩衝區來緩衝FastCGGI的請求。如果一個PHP腳本所產生的頁面爲256KB,那麼就會分配4個64KB的緩衝區來存放數據,大於256的被放置Fastcgi臨時文件目錄,該目錄位於磁盤。

fastcgi_busy_buffers_size 128k;
#用於設置系統繁忙時候的fastcgi_buffers大小;值必須大於fastcgi_buffer,一般爲其2倍;

fastcgi_temp_file_write_size 128k;
#FastCGI臨時文件大小,一般設置爲128 - 256 KB;

server_names_hash_max_size 4096;
server_names_hash_bucket_size 2048;
#設定用於哈希域名的內存空間,Nginx會把server中的域名哈希至內存,當客戶端請求時,會把客戶端的請求結果與內存空間中的域名進行比對,其速度提升顯著;

fastcgi_cache CGI_Cache;
#表示使用哪個內存空間;

fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
#設定各個狀態碼的緩存週期;

ignore_invalid_headers  on;
#如果有首部無法理解就直接忽略;

fastcgi_cache_min_uses 1;
#表示請求幾次將其緩存;

factcgi_store  on;
fastcgi_store_access user:rw group:rw all:r;
fastcgi_temp_path /data/temp;
#暫存fastcgi自己處理的結果,內存空間不夠的時候才這麼用,會導致性能會下降。一般不建議這麼用,應該加大buffer值;

factcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
#SCRIPT_FILENAME 用戶請求的腳本文件名,通過URI的方式向後端傳遞;

#fastcgi_cache_use_stale xxxx;
#指明Nginx在什麼情況下使用過期的緩存,類似於proxy_cache中的參數;

       4.測試緩存效果

如果Nginx重啓失敗,原因可能是沒有權限創建目錄。以www用戶爲例對目錄授權,mkdir /cache/fastcgi_cache && chown -R www. /cache/fastcgi_cache

                                                                                   圖4.1 檢測 cache manager 是否存在

                                                 

                                                                                 圖4.2 第一次請求結果

                                       

                                                                                        圖4.3 緩存結果

                                                

                                                                      圖4.4 再次請求查看結果 - 緩存命中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章