本文目录导读:

在PHP项目中配置虚拟主机(Virtual Host)主要有两种主流环境:Apache 和 Nginx,下面分别介绍这两种服务器的配置方法,以及一个快速方案(使用 Laravel Valet 或内置服务器)。
本地开发环境(推荐快速方案)
如果你只是为了本地快速开发,不需要完整配置:
使用 PHP 内置服务器(最简单,无需配置)
# 进入项目目录 cd /path/to/your/project # 启动开发服务器 php -S localhost:8000
然后访问 http://localhost:8000 即可。
使用 Laravel Valet(Mac 专用,自动处理虚拟主机)
# 安装 Valet composer global require laravel/valet # 绑定项目目录 valet park /path/to/your/projects
之后所有在该目录下的项目都会自动获得 http://项目名.test 的访问地址。
Apache 服务器配置虚拟主机(生产/正式环境)
前提:确保已安装 Apache 并启用了 mod_rewrite 和 vhost_alias 模块。
步骤 1:开启虚拟主机功能
编辑主配置文件(通常位于 /etc/httpd/conf/httpd.conf 或 /etc/apache2/apache2.conf),确保以下行未被注释:
IncludeOptional /etc/httpd/conf.d/*.conf # 或 IncludeOptional /etc/apache2/sites-enabled/*.conf
步骤 2:创建虚拟主机配置文件
在 /etc/httpd/conf.d/ 或 /etc/apache2/sites-available/ 目录下创建一个新文件,myproject.conf:
<VirtualHost *:80>
# 项目域名(本地测试可用 xxx.test,生产请用真实域名)
ServerName myproject.local
# 网站根目录(指向 PHP 项目的 public 或 web 目录)
DocumentRoot /var/www/myproject/public
# 日志文件
ErrorLog /var/log/httpd/myproject-error.log
CustomLog /var/log/httpd/myproject-access.log combined
<Directory /var/www/myproject/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# 如果使用 HTTPS,再添加一个 *:443 的虚拟主机
</VirtualHost>
步骤 3:启用站点并重启 Apache
# 如果使用 sites-available/sites-enabled 模式 sudo a2ensite myproject.conf sudo systemctl reload apache2 # 或者直接重启 Apache sudo systemctl restart httpd # CentOS/RHEL sudo systemctl restart apache2 # Debian/Ubuntu
步骤 4:配置本地 hosts 文件(本地测试时)
编辑 /etc/hosts 文件,添加:
0.0.1 myproject.local
然后访问 http://myproject.local 即可。
Nginx 服务器配置虚拟主机
Nginx 的配置更简洁、性能更好,推荐用于生产环境。
前提:确保已安装 Nginx。
步骤 1:创建站点配置文件
在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/ 目录下创建文件,myproject.conf:
server {
listen 80;
server_name myproject.local; # 改为你的域名
root /var/www/myproject/public; # PHP 项目的 public 目录
index index.php index.html index.htm;
# 日志
access_log /var/log/nginx/myproject-access.log;
error_log /var/log/nginx/myproject-error.log;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # PHP-FPM 默认地址
# 或使用 socket: fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
}
}
步骤 2:检查语法并重载 Nginx
sudo nginx -t # 测试配置是否正确 sudo systemctl reload nginx # 重载配置
步骤 3:配置 hosts 文件(可选,本地测试)
同上 Apache 部分。
常见问题与注意事项
| 问题 | 解决方法 |
|---|---|
| 访问显示 403 Forbidden | 检查 DocumentRoot 目录权限,确保 PHP 进程用户(如 www-data 或 apache)有读取执行权限。 |
| PHP 文件不被解析(下载而非执行) | 检查 Nginx 的 location ~ \.php$ 块是否正确,或 Apache 是否加载了 mod_php。 |
| 域名无法解析 | 确认 hosts 文件配置正确(本地),或 DNS 记录生效(生产)。 |
| 端口冲突 | 确保 80/443 端口未被其他程序占用(如 IIS、其他 Web 服务器)。 |
快速检查清单(生产环境)
- ✅ 域名解析已指向服务器 IP
- ✅ 防火墙放行 80 (HTTP) 和 443 (HTTPS) 端口
- ✅ 项目文件中
public/或web/目录权限正确 - ✅ PHP-FPM 服务正常运行
- ✅ 配置自动重写(Apache AllowOverride All | Nginx try_files)
- ✅ HTTPS 证书(推荐 Let's Encrypt)
- 本地快速开发:
php -S localhost:8000或 Laravel Valet - Apache 生产环境:
<VirtualHost>+DocumentRoot+AllowOverride All - Nginx 生产环境:
server块 +root+fastcgi_pass
选择哪种方式取决于你的实际部署环境,如果还有具体的错误信息或配置文件问题,欢迎继续提问。