The website that used the AppServ shelf in the early years was hacked,一直查不出原因,Want to update Apache、PHP、The MySQL version is limited by the compatibility issue of the Joomla package and cannot be performed,之後又要遇到需要另外新增一個網站的需求,Originally planned to use XAMPP,But when reading the official XAMPP documents,赫然看到官方並不建議將此軟體用於正式環境,若非得使用,官方雖有建議調整部份設定值,以提高安全性,但又提醒你,這只能稍微增加一點點安全性而已 (好直白的官方啊~哈),So I started to research and install Apache independently.、MariaDB、PHP and phpMyAdmin。
各套件安裝流程如下:
【Apache】
- To Apache Haus 下載壓縮檔 (x64)。
- 解壓縮,先看 readme_first.html 說明。
- 複製 Apache24 目錄到想要的位置。
- 打開 httpd.conf,設定 Define SRVROOT 路徑,如 D:\Web\Apache24。
- 在 httpd.conf 找到 Options Indexes FollowSymLinks,刪掉 Indexes,避免被瀏覽目錄。
- 直接執行 httpd.exe,看啟動過程有沒有跳出錯誤,之後以瀏覽器瀏覽 localhost,看是否正確。
- CMD 輸入”httpd.exe -k install”,將 Apache 設成服務 (移除指令為 “httpd.exe -k uninstall”)。
【PHP】
PHP 有分成 Non Thread Safe 跟 Thread Safe 兩種版本,這邊引用兩篇文章來說明兩者的選擇方式:
“PHP Non Thread Safe和Thread Safe区别 – 歪麦博客” Mention:
None Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查。
Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新要求就启动新线程,耗尽系统资源。
…略
FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率。
而线程安全检查是为ISAPI方式的PHP准备的,也就是为IIS准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP。
So,如果是以 FastCGI 执行 PHP ,都建议用 Non Thread Safe 的 PHP (zip安装包)。
PS. 建議前往該篇文章查看完整說明。
“PHP Thread Safe and Non-Thread Safe for Windows – Stack Overflow” 的 Crack 提到:
So it really depends on the way that you want to use PHP:
Apache + LoadModule: Thread Safe
Apache + FastCGI: Non-Thread Safe
IIS: Thread Safe
IIS + FastCGI: Non-Thread SafePHP manual has nice installation instructions.
AFAIR running PHP with FastCGI is the preferable way, it performs faster and allows for more fine-grained security configuration.
從上面兩篇可以得知,使用 FastCGI + Non-Thread Safe 的 PHP 會是比較好的選擇。而實際使用的感受,我從原本的 Thread Safe 改成 Non Thread Safe 後,在瀏覽 Joomla 網站時,竟可以感受到頁面開啟速度的提昇,讓我有些驚訝。
下面將列出 Non Thread Safe 跟 Thread Safe 的兩種設定方式。
【PHP – Non Thread Safe】(推薦)
- To 官方頁面 下載 Non Thread Safe 壓縮檔。
- 解壓縮,複製目錄到想要的位置,把 php.ini-production 改 php.ini。
- 開啟 php.ini,修改下面內容:
# 搜尋 extension_dir = "ext",改成: extension_dir = "D:\Web\php-7.4.3\ext" 或 ./ext # 搜尋 file_uploads = On,改成: file_uploads = Off # 如果網站沒有用到檔案上傳功能,建議關閉, # 有需要使用時再開啟,避免被上傳病毒檔案。 # 之前我們 ESET 防毒常攔截到網站伺服器被上傳惡意檔案, # 直到關閉此設定才沒再發生。 # 搜尋 upload_max_filesize = 2M,改成適合的大小: upload_max_filesize = 30M # Joomla 4 的建議值為 30M # 搜尋 allow_url_fopen = On,改成: allow_url_fopen = Off # 如果網站沒有用到檔案上傳功能,建議關閉, # 有需要使用時再開啟,避免被上傳病毒檔案。 # 之前我們 ESET 防毒常攔截到網站伺服器被上傳惡意檔案, # 直到關閉此設定才沒再發生。 # 搜尋 ;date.timezone =,改成: date.timezone ="Asia/Taipei" # 建議要設,避免部份網站程式的時間有時差。
LoadModule fcgid_module modules/mod_fcgid.so # 載入 FastCGI 的模組。 # 搜尋 DirectoryIndex,在後面增加: index.php
接下來有兩個做法,一為標準做法,一為簡易做法。
【FastCGI 設定 – 標準做法】
- 將 FastCGI 目錄裡 conf/extra 底下的 httpd-fcgid.conf,複製到 Apache 的 conf/extra 底下。
- 開啟 httpd-fcgid.conf,修改下面內容:
# 搜尋 FcgidInitialEnv PHPRC "C:\\php",改成: FcgidInitialEnv PHPRC "D:\\Web\\php-7.4.6" # 讓 FastCGI 知道 php.ini 所在目錄。 # 其他的 FcgidInitialEnv 環境參數可視實際環境修正。 FcgidMaxRequestLen 15360000 # 此參數可選擇性增加。 # 根據「壞蛋的密室」文章的說明, # 此參數為用戶端送來的最大長度資料,預設值為 139072 (135K)。 # 搜尋 FcgidWrapper "C:/php/php-cgi.exe" .php,改成: FcgidWrapper "D:/Web/php-7.4.6/php-cgi.exe" .php # FastCGI 設定。
# 搜尋 Include conf/extra/httpd-fcgid.conf, # 將前面的註解井字號拿掉。
【FastCGI 設定 – 簡易做法】
- 開啟 Apache 的 httpd.conf,新增下面內容:
FcgidInitialEnv PHPRC "D:/Web/php-7.4.6" # 讓 FastCGI 知道 php.ini 所在目錄。 AddHandler fcgid-script .php # 設定 FastCGI 處理 php 檔案。 FcgidWrapper "D:/Web/php-7.4.6/php-cgi.exe" .php # FastCGI 設定。 FcgidMaxRequestLen 15360000 # 此參數可選擇性增加。 # 根據「壞蛋的密室」文章的說明, # 此參數為用戶端送來的最大長度資料,預設值為 139072 (135K)。 # 搜尋 Options FollowSymLinks # (或 Options Indexes FollowSymLinks, # 若未在上面 Apache 步驟中去除 Indexes),在後面增加: ExecCGI # 讓網頁目錄有執行 CGI 的權限。
<?php phpinfo(); ?>
提醒:如果在執行 httpd.exe 時,有跳出路徑錯誤,可檢查 httpd.conf 的絕對路徑的斜線方向,請以斜線(/)取代反斜線(\)。我原本使用 D:\Web\php-7.4.6 會跳錯,改成 D:/Web/php-7.4.6 才 OK。
【PHP – Thread Safe】
- To 官方頁面 下載 Thread Safe 壓縮檔。
- 解壓縮,複製目錄到想要的位置,把 php.ini-production 改 php.ini。
- 開啟 php.ini,修改下面內容:
# 搜尋 extension_dir = "ext",改成: extension_dir = "D:\Web\php-7.4.3\ext" # 搜尋 file_uploads = On,改成: file_uploads = Off # 如果網站沒有用到檔案上傳功能,建議關閉, # 有需要使用時再開啟,避免被上傳病毒檔案。 # 之前我們 ESET 防毒常攔截到網站伺服器被上傳惡意檔案, # 直到關閉此設定才沒再發生。 # 搜尋 upload_max_filesize = 2M,改成適合的大小: upload_max_filesize = 30M # Joomla 4 的建議值為 30M # 搜尋 allow_url_fopen = On,改成: allow_url_fopen = Off # 如果網站沒有用到檔案上傳功能,建議關閉, # 有需要使用時再開啟,避免被上傳病毒檔案。 # 之前我們 ESET 防毒常攔截到網站伺服器被上傳惡意檔案, # 直到關閉此設定才沒再發生。 # 搜尋 ;date.timezone =,改成: date.timezone ="Asia/Taipei" # 建議要設,避免部份網站程式的時間有時差。
PHPIniDir "D:\Web\php-7.1.5" # 指定 php.ini 存放的資料夾位置。 LoadModule php7_module "D:\Web\php-7.1.5\php7apache2_4.dll" # 載入 php 的模組。 AddType application/x-httpd-php .php .php3 .phtml .inc # 指定附檔名是 .php .php3 .phtml .inc 的程式都為 php 程式。 AddType application/x-httpd-php-source .phps .phpsource # 指定附檔名是 .phps 時, # 把內容視為 hightlight 的原始碼輸出到網頁。 # 搜尋 DirectoryIndex,在後面增加: index.php
<?php phpinfo(); ?>
【MariaDB】
- To 官方頁面 下載 msi(x64),直接安裝。
- 設 root 密碼。
- 取消勾選【Enable access from remote machines for ‘root’ user】,以降低風險。
- 勾【Use UTF8 as default server’s character set】。
【phpMyAdmin】
- 下載壓縮檔,解壓縮,複製到 Apache24\htdocs。
- 打開 PHP 的 php.ini。
- 拿掉 #extension_dir = “ext” 的 # 註解,”ext” Changed “D:\Web\php-7.1.5\ext”。
- 拿掉 #extension=php_mbstring.dll 的 # 註解。
- 拿掉 #extension=php_mysqli.dll 的 # 註解。
–2019/01/05 Update
- 將 config.sample.inc.php 更名為 config.inc.php。
- 打開 config.inc.php,To find $cfg[‘blowfish_secret’],在後面單引號內填入 32 位數的密碼,可直接找密碼產生器產生就好。
- 加入一行 $cfg[‘PmaNoRelation_DisableWarning’] = ‘true’;,以避免 phpMyAdmin 跳出錯誤訊息,要求建立資料表。
【參考連結】
- Windows 7 安裝 Apache + MySQL + PHP ~ JxL Blog 技術札記
- 手動安裝 Apache、MySQL、PHP 以及相關設定 – OA’s blog
- 在Windows下手動安裝Apache、PHP、MySQL、phpMyAdmin | Beyond The Time
- XYZ的筆記本: windows7 64位元安裝Apache、PHP、MySQL
- 藍海工作室 – 檢視主題 – phpMyAdmin 設置
- phpMyAdmin 設定 blowfish secret
- PHP Non Thread Safe和Thread Safe区别 – 歪麦博客
- multithreading – PHP Thread Safe and Non-Thread Safe for Windows – Stack Overflow
- Windows 上 PHP + Apache mod_fcgid 安裝法 | 壞蛋的密室