设置ngxin服务器虚拟主机
- 虚拟主机
- 2025-09-09
- 35
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”) { …
