设置ngxin服务器虚拟主机
- 虚拟主机
- 2025-09-09
- 5
Nginx服务器,添加虚拟主机指向指定目录与域名即可完成设置
前期准备
安装必要软件包
确保系统已更新至最新状态,执行以下命令安装nginx
及相关依赖:
sudo apt update # Debian/Ubuntu系适用(如Ubuntu Server) sudo yum install epel-release && sudo yum install nginx # CentOS/RHEL系适用
注:若使用旧版系统,可能需要添加第三方源或调整包管理工具。
确认配置文件路径
不同Linux发行版的默认配置位置略有差异:
| 发行版类型 | 主配置文件路径 | 站点启用目录 | 站点停用目录 |
|——————|——————————|———————–|———————–|
| Debian/Ubuntu | /etc/nginx/nginx.conf
| /etc/nginx/sites-enabled/
| /etc/nginx/sites-available/
|
| CentOS/RHEL | /etc/nginx/nginx.conf
| /etc/nginx/conf.d/
| 无独立停用目录 |
创建虚拟主机步骤详解
编写站点配置文件
在对应目录下新建一个以域名命名的文件(例如example.com.conf
示例如下:
server { listen 80; # 监听端口(可改为443实现HTTPS) server_name example.com www.example.com; # 绑定的域名列表 root /var/www/html/example; # 网站根目录路径 index index.html index.php; # 默认首页文件优先级 location / { #try_files $uri $uri/ =404; # 可选:优化URL重写规则 proxy_pass http://localhost:8080; # 若需反向代理后端服务时启用此行 } error_page 500 502 503 504 /50x.html; # 错误页面统一处理方案 }
关键参数说明:
listen
支持多端口绑定(如listen 8080;
)或IPv6地址(listen [::]:80;
);root
必须具有读权限且归属正确的用户组;- 生产环境建议关闭调试日志输出(删除或注释掉
access_log off;
外的多余日志指令)。
建立符号链接激活配置
对于Debian/Ubuntu系统:
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
CentOS/RHEL可直接将文件放入conf.d
目录自动加载。
验证并重启服务
检查语法正确性:
sudo nginx -t -c /etc/nginx/nginx.conf # 指定主配置文件路径进行校验
若无报错,重新加载配置:
sudo systemctl reload nginx # Systemd系统推荐方式 # 或旧版init脚本用法:sudo service nginx restart
高级配置扩展(按需选择)
功能需求 | 实现方法 | 注意事项 |
---|---|---|
HTTPS加密 | 申请Let’s Encrypt证书后添加ssl_certificate 等指令 |
需开放443端口防火墙规则 |
FastCGI支持PHP | 在location ~ .php$ 块中使用fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; |
确保PHP-FPM服务正在运行 |
负载均衡 | 通过upstream 模块定义后端服务器组 |
健康检查机制需额外配置 |
访问控制 | 利用allow /deny 指令限制IP段访问 |
顺序敏感!先允许后拒绝会失效 |
常见问题与解答
Q1:新添加的虚拟主机无法访问怎么办?
A:①检查防火墙是否放行对应端口(如ufw allow 80/tcp
);②确认域名解析已指向服务器公网IP;③查看Nginx错误日志(tail -f /var/log/nginx/error.log
),典型错误包括路径拼写错误、权限不足或SELinux拦截。
Q2:如何让同一个IP下的多个域名共用同一套代码?
A:在server_name
中列出所有别名(如server_name site1.com site2.net;
),并保持其他配置一致即可实现多域名映射到同一目录,若需差异化处理,可通过`if ($host = “specific.domain”) { …