在現代互聯網服務中,nginx和php都是非常重要的角色。nginx作為一款高性能的Web服務器,常用于構建高可用、高性能的網絡應用。而php則是一門廣泛使用的服務器端腳本語言,可以用來處理Web頁面、構建RESTful API、進行數據處理等各種應用。在一些高流量的Web應用中,為了保證性能,通常會采用nginx + php的架構。那么在這種架構下,nginx如何和php進行交互呢?本文將介紹nginx和php的啟動方式和相關配置。
首先我們來看一下nginx的啟動方式。假設我們已經安裝好了nginx,并且將它的配置文件放在/etc/nginx/nginx.conf中。我們可以通過以下命令啟動nginx:
$ sudo service nginx start
啟動成功后,我們就可以通過訪問http://localhost來驗證nginx是否正常運行。如果我們的Web應用需要PHP支持,我們還需要在nginx的配置文件中加入相應的配置來啟用PHP解析。具體來說,我們需要在server塊中添加以下代碼:location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
上述配置文件中,我們告訴nginx當URL中包含.php時,需要將請求傳遞給PHP FastCGI。通過fastcgi_pass參數設置PHP FastCGI的地址和端口,也可以直接指定sock文件。其他參數可以根據具體需求進行配置。
接下來,我們需要啟動PHP FastCGI進程。PHP的FastCGI進程管理程序通常是php-fpm。我們需要編輯它的配置文件/etc/php-fpm.conf,并根據自己的需求進行配置。例如,如果我們的服務器有4個CPU核心,我們可以將php-fpm.conf中的worker_processes設置為4,以啟用4個worker進程:[global]
pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log
log_level = warning
[www]
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
user = www-data
group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
request_terminate_timeout = 30s
request_slowlog_timeout = 0s
slowlog = /var/log/php-fpm.log.slow
catch_workers_output = yes
上述配置文件中,我們將sock文件路徑指定為/var/run/php-fpm/php-fpm.sock,并將文件權限設置為owner:group為www-data,并禁止所有其他用戶訪問該文件。同時,我們啟用了pm動態進程管理,最多同時運行5個worker進程,且初始啟動時只運行2個進程。如果web應用的請求量增加,pm會自動啟動新的worker進程,最多啟動3個。如果一個請求需要30s才能處理完,則會被php-fpm強制終止。
啟動PHP FastCGI進程需要執行以下命令:$ sudo service php-fpm start
到此為止,我們已經成功啟動了nginx和PHP FastCGI進程。現在可以通過訪問http://localhost/test.php來測試Web應用是否正常工作。在test.php文件中,我們可以輸出phpinfo(),以檢查PHP配置是否正確。
總結來說,nginx和php是構建高性能Web應用的重要組件。在它們的運行中,nginx通過fastcgi_pass參數傳遞PHP請求給FastCGI進程,而PHP FastCGI進程則采用多進程管理,實現對Web請求的高效處理。如果我們的Web應用需要支持PHP,我們需要在nginx配置文件和php-fpm.conf中做相應的配置,從而保證兩者正常工作。下一篇ngnix php部署