ApacheMariaDBPHP 獨立安裝於 Windows

  早年使用 AppServ 架的網站遭入侵一直查不出原因想要更新 ApachePHPMySQL 的版本卻又受限於 Joomla 套件的相容性問題而無法進行之後又要遇到需要另外新增一個網站的需求本打算改使用 XAMPP但在閱讀 XAMPP 官方文件時赫然看到官方並不建議將此軟體用於正式環境若非得使用官方雖有建議調整部份設定值以提高安全性但又提醒你這只能稍微增加一點點安全性而已 (好直白的官方啊~哈),因此便動手研究獨立安裝 ApacheMariaDBPHP 及 phpMyAdmin

各套件安裝流程如下

【Apache】

  • 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区别歪麦博客提到

None Thread Safe就是非线程安全在执行时不进行线程(thread)安全检查

Thread Safe就是线程安全执行时会进行线程(thread)安全检查以防止有新要求就启动新线程耗尽系统资源

FastCGI执行方式是以单一线程来执行操作所以不需要进行线程的安全检查除去线程安全检查的防护反而可以提高执行效率

而线程安全检查是为ISAPI方式的PHP准备的也就是为IIS准备的因为有许多php模块都不是线程安全的所以需要使用Thread Safe的PHP

所以如果是以 FastCGI 执行 PHP都建议用 Non Thread Safe 的 PHP (zip安装包)

PS. 建議前往該篇文章查看完整說明

 

PHP Thread Safe and Non-Thread Safe for WindowsStack 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 Safe

PHP 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 的兩種設定方式

 

【PHPNon Thread Safe】(推薦)

  • 官方頁面 下載 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"
    # 建議要設,避免部份網站程式的時間有時差。
  • Apache Haus 下載「Mod FCGID for Apache 2.4.x x64」
  • 解壓縮後將 mod_fcgid.so複製到 Apache 的 Modules 底下
  • 開啟 Apache 的 httpd.conf加入下面內容
  • 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 設定。
    
  • 開啟 Apache 的 httpd.conf修改下面內容
  • # 搜尋 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 的權限。
    
  • FastCGI 設定完成後可新增一 index.php 檔 (測試用),放D:\Web\Apache24\htdocs內容如下
  • <?php
    phpinfo();
    ?>
  • 以瀏覽器開啟 index.php確認可看到 php 資訊
  • 提醒如果在執行 httpd.exe 時有跳出路徑錯誤可檢查 httpd.conf 的絕對路徑的斜線方向請以斜線(/)取代反斜線(\)。我原本使用 D:\Web\php-7.4.6 會跳錯改成 D:/Web/php-7.4.6 才 OK

     

    【PHPThread Safe】

    • 官方頁面 下載 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"
      # 建議要設,避免部份網站程式的時間有時差。
    • 開啟 Apache 的 httpd.conf加入下面內容
    • 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
    • 新增一 index.php 檔 (測試用),放D:\Web\Apache24\htdocs內容如下
    • <?php phpinfo(); ?>
    • 以瀏覽器開啟 index.php確認可看到 php 資訊

     


    【MariaDB】

    • 官方頁面 下載 msi(x64),直接安裝
    • 設 root 密碼
    • 取消勾選【Enable access from remote machines for ‘rootuser】以降低風險
    • 勾【Use UTF8 as default server’s character set】

     


    【phpMyAdmin】

    • 下載壓縮檔解壓縮複製到 Apache24\htdocs
    • 打開 PHP 的 php.ini
    • 拿掉 #extension_dir =ext # 註解,”ext改成D:\Web\php-7.1.5\ext”。
    • 拿掉 #extension=php_mbstring.dll 的 # 註解
    • 拿掉 #extension=php_mysqli.dll 的 # 註解

    –2019/01/05 更新

    • 將 config.sample.inc.php 更名為 config.inc.php
    • 打開 config.inc.php找到 $cfg[‘blowfish_secret’]在後面單引號內填入 32 位數的密碼可直接找密碼產生器產生就好
    • 加入一行 $cfg[‘PmaNoRelation_DisableWarning’] = ‘true’;以避免 phpMyAdmin 跳出錯誤訊息要求建立資料表

     
    【參考連結】

    1 則留言

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    This site uses Akismet to reduce spam. Learn how your comment data is processed.