2014-04-15 113 views
4

我已經在我們的網站上實現了FastCGI緩存,並且已經看到了很大的速度提升。然而,FastCGI緩存密鑰似乎不夠獨特。如果我登錄,我的名字會出現在標題中。然而,假設緩存仍然有效,下一個要登錄的人仍然會在頭中看到我的名字。PHP 5.5 FastCGI緩存

有沒有辦法讓每個用戶的緩存密鑰唯一?理想情況下,使用用戶Cookie或PHP會話中的唯一標識符?我嘗試了下面的答案,但Nginx無法重新啓動。

Log in value from Set-Cookie header in nginx

注意我的緩存關鍵是這樣的:

fastcgi_cache_key "$scheme$request_method$host$request_uri"; 

更新: 我的想法是,如果我可以解析發送到Nginx的HTTP頭,那麼我可以搶PHP會話ID和使用它。然而,我無法找到如何在任何地方做到這一點的例子。現在我有這樣的東西,這是行不通的。

http_cookie ~* PHPSESSID=([0-9a-z]+) { 
    set $ses_id $1; 
} 

回答

4

我能用Nginx ngx_http_userid_module解決上述問題。最難的部分實際上是找到模塊,實施解決方案相當簡單。

我用自己的示例配置:

userid   on; 
userid_name uid; 
userid_domain example.com; 
userid_path /; 
userid_expires 365d; 
userid_p3p  'policyref="/w3c/p3p.xml", CP="CUR ADM OUR NOR STA NID"'; 

,然後添加用戶ID到我的FastCGI緩存鍵:

fastcgi_cache_key "$scheme$request_method$host$request_uri$uid_got"; 

希望這個答案可以幫助別人發現這個有用的模塊速度比我做到了。