場景:在單機環境下,使用一個web服務器運行多個項目,不同的項目使用不同版本的PHP。
前提:運行環境中已經安裝了多個版本的PHP(本篇文章使用的是寶塔搭建的環境)。基於寶塔搭建的環境,nginx和PHP的安裝目錄均在/www/server/下。
首先看下nginx配置文件所在位置,nginx.conf(主配置文件)在/www/server/nginx/conf/下。各個項目的配置文件在/www/server/panel/vhost/nginx/目錄下。拿其中一個項目的配置文件舉例,其內容如下:
server { listen 8081; server_name skxxwms.com; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/skxx/public; #SSL-START SSL相關配置,請勿刪除或修改下一行帶注釋的404規則 #error_page 404/404.html; #SSL-END #ERROR-PAGE-START 錯誤頁配置,可以注釋、刪除或修改 #error_page 404 /404.html; #error_page 502 /502.html; #ERROR-PAGE-END #PHP-INFO-START PHP引用配置,可以注釋或修改 include enable-php-56.conf; #PHP-INFO-END #REWRITE-START URL重寫規則引用,修改后將導致面板設置的偽靜態規則失效 include /www/server/panel/vhost/rewrite/skxxwms.com.conf; #REWRITE-END #禁止訪問的文件或目錄 location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return 404; } #一鍵申請SSL證書驗證目錄相關設置 location ~ \.well-known{ allow all; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; error_log off; access_log /dev/null; } location ~ .*\.(js|css)?$ { expires 12h; error_log off; access_log /dev/null; } access_log /www/wwwlogs/skxxwms.com.log; error_log /www/wwwlogs/skxxwms.com.error.log; }
上面文件中的內容重點關注 include enable-php-56.conf;
這一項。
找到enable-php-56.conf配置文件:
cd /www/server/nginx/conf/
ls | grep enable-php-56.conf
返回結果: enable-php-56.conf
打開文件,看到如下內容:
location ~ [^/]\.php(/|$) { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi-56.sock; fastcgi_index index.php; include fastcgi.conf; include pathinfo.conf; }
看到這里,我們就明白了。nginx和php之間是怎么進行運行的:
首先當一個http請求過來之后,nginx將請求路由到網站根目錄下的index.php---->加載nginx的fast-cgi模塊---->請求到達/tmp/php-cgi-56.sock---->php-fpm監聽/tmp/php-cgi-56.sock---->php-fpm接收到請求,啟用worker進程處理請求---->php-fpm處理完請求,返回給nginx---->nginx將結果通過http返回給瀏覽器。(對於fastcgi_pass這項配置來說,還可以使用127.0.0.1:9000這樣的方式,意思就是nginx將http請求丟給9000端口,php-fpm監聽9000端口來處理請求。保持fastcgi_pass的配置內容和php-fpm.conf里的listen配置項一致就行了)
我們再來看php-fpm.conf中的內容:cd /www/server/php/56/etc/
vim php-fpm.conf
如下所示: listen項的配置和fastcgi_pass的配置是一致的!!
[global]
pid = /www/server/php/56/var/run/php-fpm.pid error_log = /www/server/php/56/var/log/php-fpm.log log_level = notice [www] listen = /tmp/php-cgi-56.sock listen.backlog = -1 listen.allowed_clients = 127.0.0.1 listen.owner = www listen.group = www listen.mode = 0666 user = www group = www pm = dynamic pm.status_path = /phpfpm_56_status pm.max_children = 200 pm.start_servers = 15 pm.min_spare_servers = 15 pm.max_spare_servers = 30 request_terminate_timeout = 100 request_slowlog_timeout = 30 slowlog = var/log/slow.log
上面location塊里面的fastcgi_pass配置項就是指定不同php版本的地方。只不過寶塔給用戶封裝了一下,放到了/www/server/nginx/conf/目錄下。該目錄下有多個enable-php.conf這樣的文件。
於是,如果我們想讓不同的項目使用不同版本的PHP的話,只需要在項目的配置文件中更改 include enable-php-56.conf;
這項配置就行了。重啟nginx服務器之后就可以使用了。