PHP(三)win7使用IIS7-8作為PHP執行環境
阿新 • • 發佈:2018-12-16
在Windows Server 2008或2012環境中,nginx和apache都不是最好的web容器。windows自帶的IIS才是最好用的WEB容器。這就意味著,如果我們使用windows server作為WEB伺服器的作業系統,應該使用IIS作為執行php應用的容器。 1、安裝前的準備 請確認伺服器Apache服務已被關閉,且無其他服務或程式佔用HTTP 80埠。 已安裝了PHP。 2、安裝IIS服務 (1)開啟控制面板選擇程式和功能 (2)選擇開啟或關閉windows功能 (5)按照下面的圖片,勾選必要功能。出於安全性考慮,建議不要勾選其他非必要功能!! 3、配置IIS全域性引數
FastCGI
設定,配置FastCgi引數。在IIS7或8中,預設已附帶了FastCgi模組,不需另外安裝。你自己在網上找的FastCgi模組是給IIS6用的,效能太差!
(4)IIS支援多個php版本共存,你可以重複下面的步驟,建立多個php版本使用FastCGI模組管理。
(5)在FastCGI
設定介面,點選右側導航的新增應用程
序按鈕。
(6)設定FastCGI管理的應用程式
完整路徑:選擇或填寫php-cgi.exe
的儲存絕對路徑,該檔案就在php安裝根目錄中。此設定完成FastCGI與php CGI對接。
點選環境變數
...
按鈕,設定引數
Name: PHP_FCGI_MAX_REQUESTS
,phpfastcgi最大處理請求數。
Value: 10000
,表示phpfastcgi最大處理請求數為10000。設定成10000其實是不想讓php自己回收執行緒。
例項最大請求數:指每個php-cgi.exe程序,最多可以處理的請求總數。當一個php-cgi.exe程序累計處理了這個數量的請求,IIS將對其進行回收。
最大例項數:指最多允許有多少個php-cgi.exe程序,預設是4個,對於生產環境是太少了!
如何設定PHP_FCGI_MAX_REQUESTS
、例項最大請求數
、最大例項數
三個引數才能有效提升效能?
例項最大請求數
PHP_FCGI_MAX_REQUESTS
,只有這樣,才能阻止php自主回收php-cgi.exe程序。
最大例項數
:每個php-cgi.exe大約使用7-15M記憶體,按照你的記憶體分配情況,設定最大例項數
。
例項最大請求數
:指每個php-cgi.exe程序,最多可以處理的請求總數。當一個php-cgi.exe程序累計處理了這個數量的請求,IIS將對其進行回收,所以此值不要設定的過大,幾百到五千均可,還是看伺服器壓力情況決定。
(7)設定預設頁面。
若不新增index.php
作為預設頁面,那麼當你的目錄中有index.php時,也必須按照http(s)?/domain.name.com/directory/index.php的方式才能被訪問到。如果你的URL沒有包含index.php,那麼就是404找不到檔案。
新增“index.php”。
4、網站設定
4.1、預設網站的配置
IIS預設有一個預設網站,這個預設網站是指與所有網站都匹配不上,則對外提供預設網站。按照下圖的指示進行配置。
物理路徑:預設網站原始碼的儲存位置
4.2、多網站配置:同IP同埠配置多個域名
多個域名,按照下圖指示重複操作。
網站名稱:便於你記憶的名稱。建議就是網站主機名或域名
物理路徑:網站原始碼的儲存位置
網站主機名:域名。如www.test.com或secondary.name.test.com。
4.3 網站的PHP設定
IIS支援多個網站使用不同的PHP版本。比如A網站使用PHP5.4,B網站使用PHP5.6,C網站使用PHP7.X。這給我們帶來了極大的便利,既能充分使用最新的PHP技術以提高效能,又能相容古老的PHP版本。
配置之前,請注意:你必須已經按照“3、配置IIS全域性引數”的相關步驟,將php-cgi.exe註冊給了FastCGI模組!
預設網站與新建的網站配置方式相同。按照下圖的指示進行配置。
(1)選中要配置的網站,雙擊“處理程式對映”。
(2)按照下圖的指示完成配置
請求路徑:*.php
,表示所有php檔案都使用此處理程式執行處理。
模組:選擇FastCgiModule
,表明使用FastCGI模組處理此類程式。
可執行檔案:選擇php-cgi.exe
的儲存路徑(在php安裝目錄根目錄下)。如果你在目錄中看不到,注意右下角有個檔案過濾,預設是*.dll
,改成*.exe
即可。指明FastCgi模組的掛接程式。這裡你選擇的是那個版本的php-cgi.exe,那麼這個網站就是哪個版本的php進行解析處理。
名稱:填寫一個容易識別的名稱,在列表中顯示,容易找到。推薦寫php版本:如php-5.4或php-7.1等
5、系統環境變數
我們不再使用apache作為PHP的容器,所以要刪除apache服務。
現在IIS通過fastcgi呼叫php的php-cgi.exe進行網路請求處理,在php-cgi.exe執行處理時,php-cgi.exe需要使用其所依賴的其他動態連結庫(dll),這樣就要求我們將php所依賴的動態連結庫放入php的根目錄(與php-cgi.exe在同一個目錄)下,主要包括oracle客戶端的dll,sqlserver客戶端的dll等,不含php的擴充套件(php擴充套件放在php的擴充套件資料夾中,擴充套件資料夾在php.ini中設定)。
6、正式環境下的IIS使用者許可權管理
在生產環境下,我們決不能向IIS提供管理員許可權。安裝IIS後,會自動建立一個IUSER使用者和IIS_IUSRS使用者組。
首先,我們要確認IIS使用的使用者是否為Administrator(不能使用Administrator作為IIS的使用者,只能使用IUSER作為IIS的使用者)。
6.1 更改IIS的預設使用者。
在全域性引數設定和網站(含預設網站)設定中的方式是一致的。只不過全域性設定應用於所有網站,網站設定覆蓋全域性設定,用於本網站。
(1)雙擊“身份驗證”
(2)按照下圖指示,修改“已啟用”的“匿名身份認證”,檢視是否為IUSR
,若非IUSR
,在使用者名稱處填入IUSR
,密碼留空,確認儲存。
7、PHP配置
修改php.ini檔案,開啟cgi功能,按照如下指示修改(本文未介紹與cgi功能無關的其他設定)。
將;cgi.force_redirect = 1
取消註釋,並將值修改為0
,即cgi.force_redirect = 0
將;cgi.fix_pathinfo=1
取消註釋,即cgi.fix_pathinfo=1
將;fastcgi.impersonate = 1
取消註釋,即fastcgi.impersonate = 1
PHP檔案上傳臨時儲存路徑:將upload_tmp_dir = /tmp
修改為一個合適的路徑,此路徑是php上傳檔案的臨時儲存路徑,如upload_tmp_dir = d:/PHPUPLOADTEMP
若PHP使用檔案形式儲存Session資訊,則需要修改PHP Session設定。
session.save_handler = files
,使用檔案儲存Session資訊。
session.save_path =Session
檔案的儲存位置,如session.save_path = "D:/php_session"
若使用檔案記錄PHP日誌,則需要修改PHP的日誌配置
error_log
修改為 error_log = d:/php_log/error.log
,設定日誌檔案的儲存位置
log_errors
修改為 log_errors = On
,設定日誌開啟
error_reporting
按照實際需要修改,正式環境修改為error_reporting = E_ALL
,設定錯誤報告級別。
8、NTFS許可權
向IUSR使用者及IIS_IUSRS使用者組授予以下目錄的列出資料夾內容
、讀取
2項許可權,其他許可權均不得賦予!!!
IIS網站的物理目錄(見 4、網站設定)
程式上傳檔案的儲存目錄(由php程式指定)
PHP上傳檔案的臨時儲存目錄(見 7、PHP配置)
向IUSR使用者及IIS_IUSRS使用者組授予以下目錄的列出資料夾內容
、讀取
、寫入
3項許可權,其他許可權均不得賦予!!!
PHP的Session檔案儲存目錄(見 7、PHP配置)
PHP的日誌檔案儲存目錄(見 7、PHP配置)
9、關閉IIS中的無用但可能有漏洞的內容
刪除經典ASP程式池,按照下圖的指示操作:
將所有PHP程式池的.net framework
版本修改為無託管程式碼
,如下圖所示:
10、已知的問題
PHP使用FastCGI無法正確處理 分塊請求
(請求頭中包含:transfer-encoding: chunked
) ,導致超時。
Request #51191 Request body is 0-size when chunked requests are used
#50210 apache: PHP won’t parse multipart/form-data if it was originally chunk encoded.
更多(開啟http://bugs.php.net,搜尋 chunked fastcgi)