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 錯誤