搭建PHP虚拟主机环境,首先要分清两种虚拟主机。第一种是直接购买的共享主机,服务商提前装好Apache、PHP、MySQL,使用者只需要在后台面板点击操作。第二种是在自有服务器或者本地电脑上,配置Web服务器支持PHP,同时托管多个独立站点。大部分人询问的配置方法,指的都是第二种。
如果你使用cPanel或者Plesk这类面板,操作会简单很多。登录后台找到MultiPHP Manager或者PHP相关设置,给不同域名单独选定PHP版本。接着在域名或者网站板块新建站点,填写域名与网站根目录,面板自动生成虚拟主机配置。数据库同样在面板内点击创建,账号、密码、权限自动配置。宝塔面板逻辑相近,添加站点填写域名、选定根目录、选择PHP版本,自动生成Nginx或者Apache配置文件,伪静态规则也有现成模板直接套用。这种场景不需要手动修改httpd.conf或者nginx.conf,面板自动处理底层配置。

自己从零搭建LAMP或者LEMP环境,常规顺序为先安装Web服务器,再部署PHP,最后打通两者之间的调用。以Ubuntu搭配Apache举例,安装apache2之后,PHP可以使用libapache2-mod-php模块运行,也可以搭配php-fpm使用proxy_fcgi代理。模块方式配置简单,但并发性能一般;php-fpm更适合正式上线环境。安装完成后,在/etc/apache2/sites-available/目录新建example.com.conf配置文件,写入ServerName、DocumentRoot、Directory权限,同时设置日志路径。执行a2ensite启用站点,a2enmod rewrite开启重写功能,重载Apache服务,站点即可访问。多个站点就新建多个独立conf文件,相互隔离。
Nginx的配置逻辑不一样。Nginx本身不能处理PHP代码,需要把.php请求转发给PHP-FPM。安装nginx与php-fpm之后,在/etc/nginx/conf.d/或者sites-available目录新建server配置块。root参数指向网站目录,index配置项加入index.php。核心部分是location ~ .php$这段配置,fastcgi_pass指向对应的PHP-FPM socket或者端口,SCRIPT_FILENAME参数设置为$document_root$fastcgi_script_name。很多人配置完成打开页面空白,或者浏览器直接下载PHP文件,基本都是这段参数写错。修改配置后先用nginx -t校验语法,校验成功再重载服务。
本地开发环境搭建比服务器简单。Windows系统可以安装XAMPP或者WAMP,macOS选用MAMP,安装程序一路确认,Apache、PHP、MySQL一次性部署完成。项目文件放到htdocs或者www目录,浏览器访问localhost就能运行。想要自定义域名,例如mysite.test,可以修改httpd-vhosts.conf新增VirtualHost,再修改系统hosts文件添加一行127.0.0.1 mysite.test。本地环境就能同时运行多个项目,互不冲突。XAMPP和MAMP都支持切换多版本PHP,不用重复重装。
配置流程里有几处容易卡住。权限是第一个难点,Linux系统Web服务一般以www-data或者nginx账号运行,网站目录属主和权限需要匹配,但不要直接设置777权限,存在安全风险。PHP扩展是第二个障碍,mysqli、curl、gd、mbstring缺少其中任意一个,很多程序运行报错。php.ini里面upload_max_filesize、post_max_size、memory_limit参数也要查看,默认数值通常偏小,传输大文件或者运行较重应用会触发限制。开发环境开启display_errors方便调试,生产环境必须关闭,避免泄露报错信息带来安全隐患。
伪静态是另一高频问题。WordPress、Laravel这类程序需要URL重写,Apache要确认mod_rewrite模块开启,站点配置中AllowOverride设置为All,否则.htaccess不会生效。Nginx不支持.htaccess,重写规则要写在server块内部,常用语句为try_files $uri $uri/ /index.php?$args。规则书写错误,会出现首页正常打开,内页全部返回404的典型情况。
域名解析最后再说。本地或者服务器搭建虚拟主机,域名必须解析到对应机器IP才能生效。服务器环境把域名A记录指向服务器公网IP,本地开发修改hosts文件。解析没有生效的时候,配置文件写得再正确也无法访问。等待DNS解析生效之后,再回头检查Web服务器配置,不要颠倒顺序。