lnmp编辑的虚拟主机指定项目目录
- 虚拟主机
- 2025-08-23
- 5
lnmp vhost add
命令添加虚拟主机并手动指定项目目录,若未自动指向public目录则需自行调整配置
环境准备与基础概念
LNMP(Linux + Nginx/Apache + MySQL/MariaDB + PHP)架构中,虚拟主机的核心作用是通过同一台服务器运行多个独立网站,每个虚拟主机需绑定域名或IP+端口组合,并关联对应的项目根目录(文档根目录),该目录存储了网站的所有可公开访问文件(如HTML、CSS、JS、图片等)。
配置步骤详解(以Nginx为例)
创建项目目录结构
假设要部署名为myproject
的网站,首先在文件系统中创建其专属目录:
sudo mkdir -p /data/wwwroot/myproject # 主站点根目录 sudo chown -R www-data:www-data /data/wwwroot/myproject # 设置所有者为Web服务用户(如www-data)
注意:权限必须正确,否则会导致“403 Forbidden”错误;建议避免直接使用
/var/www
等默认路径以防混淆。
编写Nginx配置文件
进入Nginx站点启用目录(通常为/etc/nginx/sites-available/
),新建一个以域名命名的配置文件(如myproject.conf
):
server { listen 80; # 监听HTTP端口(生产环境建议改用HTTPS) server_name myproject.example.com; # 绑定的域名(支持多域名用空格分隔) root /data/wwwroot/myproject; # 关键配置:指定项目物理路径 index index.html index.php; # 默认首页文件优先级 location / { try_files $uri $uri/ @rewrites; # 优先尝试静态资源,失败则跳转重写规则 } location ~ .php$ { # PHP解析规则 fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 根据实际PHP版本调整UnixSocket路径 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # 引入预定义参数集 } error_page 404 /errors/404.html; # 自定义错误页路径(需存在于root内) }
关键点:①
root
指令直接决定请求映射到哪个文件系统路径;②try_files
配合后端语言处理动态请求;③ 若使用SSL,需额外添加listen 443 ssl
及证书相关配置。
软链接激活配置
通过符号链接将新配置文件加载到主配置文件列表:
sudo ln -s /etc/nginx/sites-available/myproject.conf /etc/nginx/sites-enabled/
随后重启Nginx使生效:
sudo systemctl restart nginx && sudo systemctl status nginx
可通过curl http://myproject.example.com
或浏览器验证是否成功指向目标目录。
多站点管理对比表
属性 | 单站点模式 | 虚拟主机模式 |
---|---|---|
端口占用 | 仅监听80/443 | 可复用同一端口的不同域名 |
目录隔离性 | 全局共用单一目录 | 每个站点独立物理路径 |
日志分离 | 混合记录所有请求 | 按站点生成独立访问日志(如/var/log/nginx/myproject_access.log ) |
故障影响范围 | 崩溃导致全站不可用 | 单个站点异常不影响其他站点 |
常见问题与解答
Q1: 如果修改了root
路径但页面仍显示旧内容怎么办?
A: 可能原因包括:①浏览器缓存未刷新(强制刷新Ctrl+F5);②Nginx进程未重新加载配置(执行sudo nginx -s reload
);③新目录权限不足(检查ls -l /data/wwwroot/myproject
确认归属用户为Web服务账户),建议依次排查这三方面。
Q2: 如何快速定位某个虚拟主机的实际生效配置?
A: 使用命令sudo nginx -T 2>&1 | grep 'server_name myproject.example.com'
过滤出关联该域名的配置块;或查看运行时动态信息:sudo curl -I http://myproject.example.com
观察响应头中的Server
字段及X-Nginx-Config
自定义变量(需预先在配置文件中添加`add_header X-Nginx-Config