單臺伺服器同時跑多套Php
一套web系統,後臺往往比前臺功能要複雜豐滿許多,但後臺的訪問許可權往往更容易控制,畢竟前臺是給宇宙中所有的生物在使用的。
為了安全起見,我們公司的一套web電商系統開始嘗試做前後臺功能隔離,根據整理出來的報告,後臺功能需要大量的風險高的php內建函式。
前臺基本上db的存存取取,沒有什麼圖片管理,報表匯出,檔案打包等等功能,所以我們需要讓它們分別跑在不同的php安全配置下。
伺服器是一臺AWS EC2,跑著預設提供的免費linux映象,webserver用的是nginx,它使用fastcgi的方式把php交給php-fpm來處理。
所以,我們的方案就很直觀了:
- 為前後臺搭建獨立的虛擬主機;
- 前後臺各自的虛擬主機將php請求分配給各自的php-fpm管理器;
- 執行兩套不同php配置的php-fpm程序。
前兩步關於nginx虛擬主機的內容這裡就不多講了,我們直奔主題:同時執行兩套php-fpm程序
clone一套已有的php-fpm配置(/lib/systemd/system/php-fpm.service
):
[Unit] Description=The PHP FastCGI Process Manager For Honmi Admin System After=syslog.target network.target [Service] Type=notify PIDFile=/run/php-fpm/php-fpm-admin.pid ExecStart=/usr/sbin/php-fpm --nodaemonize -c /etc/php-admin.ini -y /etc/php-fpm-admin.conf ExecReload=/bin/kill -USR2 $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
注意上面我們在ExecStart
項中設定了php-admin.ini和php-fpm-admin.conf,這樣新執行的這套php-fpm程序將會使用獨立的php設定和php-fpm設定。
開啟php-fpm-admin.conf
檔案,我們需要配置它使用的獨立的埠號:
... [www] listen = 127.0.0.1:9001 ...
預設那套跑的在9000埠上,這樣我們現在就完成了第三步。