1. 程式人生 > >PHP(三)win7使用IIS7-8作為PHP執行環境

PHP(三)win7使用IIS7-8作為PHP執行環境

在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全域性引數

(1)開啟IIS管理器,開始配置全域性引數。 在這裡插入圖片描述 在這裡插入圖片描述 (2)網站可以覆蓋全域性設定中的同名引數,若網站未覆蓋全域性設定引數,則預設使用全域性設定引數。 (3)雙擊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.com4.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)