2017/04/23

[nginx] 如何設定簡易 PHP Web Server 於 Windows 10 來跑 Laravel 專案 (用 nginx + PHP 7.1)


輕量 nginx 網頁伺服器,在之前曾寫過一篇超簡易的 nginx 設置上手文

今天來加點料,加上可執行 PHP 的環境,並設置 Laravel 的專案環境

設置環境

準備檔案

  1. nginx
  2. Visual C++ 可轉散發套件
  3. PHP

至於 Visual C++ 可轉散發套件要選什麼版本,是依照 PHP 下載的版本來決定要用哪個。

如果像下圖 php-7.1.4-nts-Win32-VC14-x86 則需要裝 vc_redist_x86.exe (下載的是 Microsoft Visual C++ 2015 的 x86 版本)




安裝 nginx


下載 nginx 並解壓縮至任何資料夾 (e.g. C:\ngnix)

只要在命令提示字元開啟,並輸入 .\nginx 就完成 nginx 啟用,這個太簡單了厚?
好,先跳過,來設點複雜一點點的 PHP 設定

安裝 Visual C++ 2015 可轉散發套件 (x86 / x64)


直接執行下載下來的 vc_redist_x86.exe / vc_redist_x64.exe 一直執行下一步至安裝完成

安裝 PHP 7.1.4


下載下來的壓縮檔,將它解壓至目標目錄 (e.g. E:\_devlib\php)

複製 php.ini-development 另存成 php.ini (若要實際佈署用請複製 php.ini-production)

設置 php.ini

基本需要設定的部分,用編輯器的搜尋功能去找會比較快

extension_dir = "ext"
cgi.fix_pathinfo = 1
date.timezone = Asia/Taipei

要開啟的外掛就依需求修改,目前先依 Laravel 專案的需求開啟以下外掛

extension=php_curl.dll
extension=php_fileinfo.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_mbstring.dll
extension=php_openssl.dll
extension=php_pdo_mysql.dll
extension=php_pdo_sqlite.dll

設置 nginx.conf


再回來到 nginx 的設定部分,我們要來讓它可以執行 PHP

在 nginx/conf 的資料夾中,編輯 nginx.conf

其中在 location / 區塊的 index 部分加上 index.php,PHP 預設索引檔就設好了

再來是 location ~ \.php$  區塊,原本 nginx 就很貼心的先幫我們預留,只需要做點修改

在 fastcig_param 的部分改成下方的設定

fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;

設定快完成了,只差 PHP-CGI 怎麼執行呢?在命名提示字元輸入以下指令

E:\_devlib\php\php7.1.4\php-cgi -b 127.0.0.1:9000 -c E:\_devlib\php\php7.1.4\php.ini

127.0.0.1:9000 是對應我們剛剛在 nginx.conf 中 fastcgi_pass 的值,當然 port 也可以隨自己的喜好做設定

這時再啟用 nginx 即完成最基本 PHP Server 設定!!

如果 nginx 已經在執行中,可以輸入 nginx -s reload 來重啟

設定 start-nginx.bat 及 stop-nginx.bat


nginx 跟 php-cgi 都要透過命名列來開啟,但視窗需要常駐不能關掉,那麼就把這些索碎的事自動化吧

有網友寫好的設定傳送門,這只是結合上述的命令綜合起來,就不多佔篇幅,繼續設定 Laravel 專案的環境

Laravel 的 URL rewrite 設定


重點只在於來自客戶端的 Request,而 Route URL 要怎麼解析就很重要啦
另外記得 root 是要指到 Laravel 專案的 public 目錄喔

location / {
    root      E:/projects/laravel-demo/public;
    index     index.php index.html;
    try_files $uri $uri/ /index.php?$query_string;
}

完整的 Laravel nginx.conf 設定範例


重啟 nginx,輸入 http://localhost 看到 Laravel 專案了嗎?

沒有留言: