Php
跳過站點某些區域的 nginx PHP 記憶體?
我剛剛使用 nginx(我是新手)和 PHP 建立了一個新伺服器。在我的網站上,基本上有 3 種不同類型的文件:
- 靜態內容,如 CSS、JS 和一些圖像(大多數圖像位於外部 CDN 上)
- 主要的 PHP/MySQL 數據庫驅動網站,本質上就像一個靜態網站
- 動態 PHP/MySQL 論壇
我從這個問題和這個頁面了解到,靜態文件不需要特殊處理,將盡快提供。
我按照上述問題的答案為 PHP 文件設置記憶體,現在我有這樣的配置:
location ~ \.php$ { try_files $uri =404; fastcgi_cache one; fastcgi_cache_key $scheme$host$request_uri; fastcgi_cache_valid 200 302 304 30m; fastcgi_cache_valid 301 1h; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /srv/www/example$fastcgi_script_name; fastcgi_param HTTPS off; }
但是,現在我想防止在論壇上記憶體(對於所有人或僅對於登錄使用者 - 尚未檢查後者是否適用於論壇軟體)。我聽說位置塊內有“如果是邪惡的”,所以我不確定如何繼續。如果在 location 塊中,我可能會在中間添加這個:
if ($request_uri ~* "^/forum/") { fastcgi_cache_bypass 1; } # or possible this, if I'm able to cache pages for anonymous visitors if ($request_uri ~* "^/forum/" && $http_cookie ~* "loggedincookie") { fastcgi_cache_bypass 1; }
這會正常工作,還是有更好的方法來實現這一目標?
如果在伺服器塊中,您可以使用它是非常安全的。相關行的工作範例:
server { listen 80; ...skip... if ($uri ~* "/forum" ) {set $no_cache 1;} ...skip... location ~ \.php$ { fastcgi_cache_bypass $no_cache; fastcgi_no_cache $no_cache; ...other fastcgi-php content... }
另一種解決方法是在預設位置塊上方設置一個單獨的位置塊,以擷取並以不同方式處理髮往論壇的內容:
location ~ ^/forum/.*\.php$ { // forum php setup here } location ~ \.php$ { // regular php setup here }
它並不完全是 DRY,但當您在 6 個月後重新閱讀時,它很簡單易讀。