Php
在 Debian Squeeze Apache 2.4.10 + mod_proxy_fcgi + php-fpm 上的 VirtualHost 中設置 php_value?
將我們的伺服器更新到 Debian Jessie (8.3) 後,我將 Apache 2.4.10 從 mpm_worker/mod_php 切換到 mpm_event/proxy_fcgi/php-fpm。我為所有虛擬主機配置了切換,如下所示:
# cat conf-enabled/php5-fpm.conf <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/" </FilesMatch>
我還禁用了 mod_php。因此,apache 不會讓我在 VirtualHosts 文件中有 php_admin_value/php_value/php_flag 指令。
Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration
我已經閱讀了一些關於 .user.ini 文件的資訊,但聽起來我需要設置的指令在那裡不受支持,並且出於性能原因,我剛剛成功地從我的站點中刪除了所有 .htaccess 文件,所以這似乎是一種向後(且不兼容)的方法。
另一個常見的建議是為每個 VirtualHost 創建一個唯一的池,但這讓我擔心有兩個原因:
- 設置的複雜性 - 現在,配置非常簡單
- 從套接字切換到 TCP?我是否正確,我需要每個池一個唯一的 TCP 埠?我是否需要每個池一個唯一的套接字?
- 記憶體分配!該伺服器沒有我想要的那麼多記憶體。為伺服器上訪問量較小的站點創建一堆 php-fpm 實例似乎很浪費。
最後,我只是定義了一些
$$ HOST= $$我的 /etc/php5/fpm/php.ini 配置中的部分。 http://php.net/manual/en/ini.sections.php
這感覺比使用 mod_env 或 .user.ini 更安全。
您可以將環境變數從 Apache 配置文件傳遞到 CGI 池:
SetEnv PHP_ADMIN_VALUE "open_basedir=/path-to-your-doc-root" <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/" </FilesMatch>
mod_env
必須啟用,並且您必須禁用.htaccess
文件處理,如果第三方使用者可以上傳或修改它們 (AllowOverride None
)。如果您需要傳遞多個變數,則必須用換行符 (\n
) 將它們連接起來。
open_basedir
惡意使用者可以disable_functions
使用簡單的.htaccess
. 我不知道是否可以防止這種行為。