遠端 PHP-FPM Server 架設設定

Nginx + PHP-FPM (FastCGI Process Manager) 是很常見的設定方式,但是 Nginx + 遠端的 PHP-FPM 的設定有些不太一樣的地方。

遠端 PHP fpm Server 架設設定

環境

  • Nginx IP:192.168.1.1
  • PHP-FPM IP:192.168.1.200
    • Webroot 的環境:/var/www/blog.longwin.com.tw
    • Library 的環境:/var/www/php

Nginx 和 PHP-FPM 的設定參考範例在下面有全部列出來,在此先把設定需要注意的部份說明一下。

PHP-FPM 的 chroot、chdir 和 Nginx 的 root ($document_root)、fastcgi_param SCRIPT_FILENAME 的關係。

  • PHP-FPM chroot:限制檔案存取目錄,要注意 Library 的環境 需要在 chroot 的範圍內,不然會無法存取
  • PHP-FPM chdir:切換到哪個目錄(Chdir to this directory at the start.),此目錄的位置是由 chroot 之後開始計算。意思就是 (chroot + chdir)
  • Nginx root ($document_root):由 PHP-FPM chroot 之後的路徑(同 PHP-FPM 的 chdir)
  • Nginx fastcgi_param SCRIPT_FILENAME:設定路徑 和 執行的程式 (路徑前面可寫死或者直接用 $document_root,建議使用 $document_root)
  • 註:chdir 可設可不設,這是程式啟動切換到的資料夾,下述是設定標準應該要這樣子設定的意思。

範例1

PHP-FPM

  • ; chroot / # 不設定 chroot,全部開放
  • chdir /var/www/blog.longwin.com.tw

Nginx

  • fastcgi_param SCRIPT_FILENAME /var/www/blog.longwin.com.tw/$fastcgi_script_name;

  • root /var/www/blog.longwin.com.tw
  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

範例2

PHP-FPM

  • chroot /var
  • chdir /www/blog.longwin.com.tw

Nginx

  • root /www/blog.longwin.com.tw
  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

範例3

PHP-FPM

  • chroot /var/www/blog.longwin.com.tw
  • chdir /
  • 註:程式若有使用到 /var/www/php,將無法存取,會有錯誤產生

Nginx

  • root /
  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

遠端的 PHP-FPM、Nginx 的設定 與 安裝

PHP-FPM 安裝

  • sudo apt-get install php5-fpm

PHP-FPM 設定

於 PHP-FPM Server 設定參考

sudo vim /etc/php5/fpm/pool.d/www.conf

; 這些是 debug 方便使用
access.log = /var/log/$pool.access.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
slowlog = /var/log/$pool.log.slow
pm.status_path = /status
catch_workers_output = yes ; 設定此為 yes,下面的 error_log 才會開始紀錄
php_admin_value[error_log] = /var/log/nginx/fpm-php.www.log

; 設定 IP / Port 和 allow 存取的 Client IP
; listen = 192.168.1.1:9000
listen = 9000
listen.allowed_clients = 127.0.0.1,192.168.1.1

; chroot 和 chdir 與 Nginx 的 root (document_root) 設定有關,等等在詳述
chroot = /var/www

;chdir = /
chdir = /blog.longwin.com.tw
;chdir = /var/www/blog.longwin.com.tw

Nginx 設定

於 Nginx 設定參考

sudo vim /etc/nginx/sites-enabled/blog.longwin.com.tw.conf

server {
    listen   80;
    server_name  blog.longwin.com.tw;

    access_log  /var/log/nginx/blog.access.log;
    error_log   /var/log/nginx/blog.error.log crit;

    # 此是由 php-fpm 的 chroot 之後開始設定起
    root    /blog.longwin.com.tw;

    location / {
        fastcgi_pass 192.168.1.200:9000;
        fastcgi_index  index.php;
        include fastcgi_params;
        #fastcgi_param SCRIPT_FILENAME /var/www/blog.longwin.com.tw/$fastcgi_script_name;
        #fastcgi_param SCRIPT_FILENAME /blog.longwin.com.tw/$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    }
}

測試

  • curl -vvv "https://blog.longwin.com.tw/" # 404 就代表路徑有設定錯誤,500 可能是 PHP 錯誤

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料