Nginx配置子域名详解
配置前的准备
在动手配置之前,需完成以下基础工作,确保后续步骤顺利推进:

环境检查
- Nginx版本:建议使用 ≥1.20 版本(支持子域名配置的核心功能);
- 模块加载:通过
nginx -V命令确认已加载rewrite、ssl等模块(若缺失需手动编译或启用); - 系统权限:确保当前用户具有
sudo权限,用于修改配置文件和重启服务。
目录结构规划
- 主配置目录:
/etc/nginx/(存放全局配置和虚拟主机文件); - 虚拟主机目录:在
sites-available/下创建子域名配置文件(如sub.example.com.conf),通过软链接启用(ln -s ../sites-available/sub.example.com ../sites-enabled/); - 站点根目录:为每个子域名准备独立的根目录(如
/var/www/sub.example.com),存放网站文件。
文件权限设置
- 配置文件权限需为
-rwxr-xr-x(如chmod 644 /etc/nginx/sites-available/sub.example.com); - 站点根目录权限建议为
755(如chmod 755 /var/www/sub.example.com)。
核心配置步骤
Nginx 配置子域名的核心逻辑是“虚拟主机(Virtual Host)”,通过 server 块匹配子域名并指向对应站点资源,以下是详细流程:
修改主配置文件(/etc/nginx/nginx.conf)
在 http 块下添加虚拟主机配置,示例(以 sub.example.com 为例):
server {
listen 80; # 监听HTTP端口
server_name sub.example.com; # 匹配子域名
root /var/www/sub.example.com; # 站点根目录
index index.html; # 默认索引文件
location / {
try_files $uri $uri/ =404; # 静态资源处理逻辑
}
}创建虚拟主机配置文件
在 sites-available/ 下新建文件(如 sub.example.com.conf与上述示例一致,根据需求调整 root、index 等参数。

启用虚拟主机
执行以下命令创建软链接,使配置生效:
sudo ln -s /etc/nginx/sites-available/sub.example.com /etc/nginx/sites-enabled/ sudo rm /etc/nginx/sites-enabled/default # 删除默认链接(可选)
测试与生效
- 语法检查:
nginx -t命令验证配置无错误; - 重启服务:
sudo systemctl restart nginx使配置立即生效。
配置参数说明(表格)
| 参数 | 说明 | 示例 |
|---|---|---|
listen | 监听端口(HTTP/HTTPS) | 80(HTTP)、443(HTTPS) |
server_name | 子域名匹配规则 | sub.example.com |
root | 站点根目录路径 | /var/www/sub.example.com |
index | 默认索引文件 | index.html |
location / | 静态资源处理 | try_files $uri $uri/ =404 |
常见配置细节与优化
HTTPS(SSL)配置
现代网站需支持 HTTPS,可通过 Let’s Encrypt 自动获取免费证书:
- 安装工具:
sudo apt install certbot python3-certbot-nginx; - 获取证书:
sudo certbot --nginx -d sub.example.com(需确认子域名已解析到服务器IP); - 配置示例:
server { listen 443 ssl http2; server_name sub.example.com; root /var/www/sub.example.com; index index.html; ssl_certificate /etc/letsencrypt/live/sub.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/sub.example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; # HSTS(强制HTTPS) add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; }
性能优化
- 静态资源缓存:
location ~* .(css|js|jpg|png|gif|ico)$ { expires 1y; # 缓存1年 add_header Cache-Control "public, immutable"; } - Gzip压缩:
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
访问控制
限制特定IP访问管理后台:

location /admin/ {
allow 192.168.1.1; # 允许IP
deny all; # 拒绝其他IP
}测试与排查
- 访问测试:通过浏览器访问子域名(如
http://sub.example.com),检查状态码(200 表示成功); - 命令行测试:使用
curl -I http://sub.example.com验证响应头; - 常见错误排查:
- 404:检查
root目录是否存在文件,或server_name匹配错误; - 502:后端服务(如 PHP-FPM)未启动,通过
systemctl status php-fpm查看状态。
- 404:检查
FAQs
如何为子域名配置HTTPS(使用Let’s Encrypt)?
- 解答:首先安装
certbot和python3-certbot-nginx,执行sudo certbot --nginx -d sub.example.com命令,它会自动配置 Nginx 使用 Let’s Encrypt 证书,并设置 HSTS 头,配置中需确保ssl_certificate和ssl_certificate_key指向正确的证书文件路径。
当多个子域名共享同一个后端应用(如PHP-FPM)时,如何高效配置?
解答:使用 Nginx 的
upstream模块配置后端服务器组,在虚拟主机配置中指向该组,示例:upstream php-fpm { server 127.0.0.1:9000; # PHP-FPM 监听地址 keepalive 32; # 连接池大小 } server { listen 80; server_name blog.example.com, news.example.com; root /var/www/app; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass php-fpm; } }通过
upstream实现负载均衡和会话共享,提升多子域名访问性能。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/214125.html


