当前位置: 首页 > news >正文

Nginx多域名与多证书配置实战指南

1. 项目概述

在Web服务部署实践中,Nginx作为高性能的反向代理服务器,经常需要处理多域名、多证书和多服务的复杂场景。这种配置需求在中小型企业的IT基础设施中尤为常见,比如:

  • 同一台服务器托管多个独立域名的网站
  • 不同服务需要独立的SSL证书
  • 业务系统需要根据域名进行路由分发

我最近在帮一家电商公司部署他们的新系统时就遇到了典型场景:主站(www.domain.com)、管理后台(admin.domain.com)和API接口(api.domain.com)需要共用服务器资源但保持完全隔离。通过Nginx的server_name指令和证书绑定机制,我们完美实现了这个需求。

2. 核心配置原理

2.1 多域名处理机制

Nginx通过server块中的server_name指令实现多域名识别。当请求到达时,Nginx会:

  1. 检查请求头中的Host字段
  2. 匹配server_name配置项
  3. 执行对应server块的配置

典型配置示例:

server { listen 80; server_name www.domain.com; # 主站配置 } server { listen 80; server_name admin.domain.com; # 后台配置 }

2.2 多证书配置方案

HTTPS场景下,每个域名需要绑定独立的SSL证书。关键配置点包括:

  • 每个server块指定自己的证书路径
  • 使用SNI(Server Name Indication)扩展协议
  • 证书文件建议按域名分类存储

证书配置示例:

server { listen 443 ssl; server_name www.domain.com; ssl_certificate /etc/ssl/www_domain_com.crt; ssl_certificate_key /etc/ssl/www_domain_com.key; # 其他SSL参数... }

2.3 多服务路由策略

后端服务路由通常通过location指令实现:

  • 静态资源直接由Nginx处理
  • 动态请求反向代理到应用服务器
  • 不同路径可路由到不同后端

典型路由配置:

location /static/ { root /var/www/html; expires 30d; } location /api/ { proxy_pass http://backend_server; proxy_set_header Host $host; }

3. 完整配置实战

3.1 基础环境准备

  1. 安装Nginx(以Ubuntu为例):
sudo apt update sudo apt install nginx
  1. 证书文件准备:
  • 将各域名的证书文件(.crt)和私钥(.key)存放在/etc/ssl/目录
  • 建议命名规范:域名_类型.key/crt
  • 设置正确的文件权限:
sudo chmod 600 /etc/ssl/*.key

3.2 主配置文件结构

建议采用模块化配置方式:

/etc/nginx/ ├── nginx.conf # 主配置文件 ├── conf.d/ │ ├── main-site.conf # 主站配置 │ ├── admin.conf # 后台配置 │ └── api.conf # API配置 └── ssl/ # 证书目录

nginx.conf基础内容:

user www-data; worker_processes auto; events { worker_connections 1024; } http { include /etc/nginx/mime.types; include /etc/nginx/conf.d/*.conf; }

3.3 多域名配置示例

主站配置(conf.d/main-site.conf):

server { listen 80; server_name www.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.domain.com; ssl_certificate /etc/ssl/www_domain_com.crt; ssl_certificate_key /etc/ssl/www_domain_com.key; root /var/www/main-site; index index.html; location / { try_files $uri $uri/ =404; } }

后台系统配置(conf.d/admin.conf):

server { listen 80; server_name admin.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name admin.domain.com; ssl_certificate /etc/ssl/admin_domain_com.crt; ssl_certificate_key /etc/ssl/admin_domain_com.key; location / { proxy_pass http://localhost:3000; proxy_set_header X-Real-IP $remote_addr; } }

3.4 高级配置技巧

  1. 证书自动续期:
# 使用certbot设置自动续期 sudo certbot renew --dry-run
  1. HTTP/2优化:
listen 443 ssl http2; ssl_prefer_server_ciphers on; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  1. 日志分离:
access_log /var/log/nginx/main-site.access.log main; error_log /var/log/nginx/main-site.error.log warn;

4. 常见问题排查

4.1 证书不生效问题

症状:浏览器提示证书错误 排查步骤:

  1. 检查证书链是否完整
  2. 验证证书与域名匹配
  3. 检查Nginx错误日志
  4. 使用openssl测试:
openssl s_client -connect domain.com:443 -servername domain.com

4.2 域名路由错误

症状:访问A域名却显示B域名内容 解决方案:

  1. 检查server_name配置
  2. 确保没有重复的server块
  3. 设置默认server:
server { listen 80 default_server; return 444; }

4.3 性能优化建议

  1. 启用SSL会话缓存:
ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
  1. OCSP装订配置:
ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 valid=300s;
  1. 调整worker连接数:
events { worker_connections 4096; multi_accept on; }

5. 安全加固措施

5.1 基础安全配置

  1. 禁用不安全的协议和加密套件:
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256';
  1. 添加安全头信息:
add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block";

5.2 访问控制策略

  1. 后台系统IP白名单:
location /admin/ { allow 192.168.1.0/24; deny all; # 其他配置... }
  1. 基础认证保护:
location /private/ { auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.htpasswd; }

5.3 监控与维护

  1. 日志分析设置:
log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
  1. 状态监控页面:
location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }

在实际部署中,我发现最关键的三个经验是:

  1. 证书文件权限必须严格限制
  2. 每个server块应该明确default_server
  3. 长连接超时时间需要根据业务特点调整

对于需要处理数十个域名的场景,建议使用通配符证书或者自动化证书管理工具如Certbot。当配置复杂时,可以使用nginx -t命令测试配置语法,避免直接重启导致服务中断。

http://www.jsqmd.com/news/1340917/

相关文章:

  • 跨平台 DNS 查询方法整理:从 dig 到 DoH
  • 2026苏州审计报告服务甄选指南,口碑优质机构汇总推荐 - 产品评测官
  • LVDT解调电路:从二极管整流到同步解调的原理、仿真与工程实践
  • 2026信阳别墅装修哪家靠谱 本土家装品牌实用参考 - 谁都没有我好看
  • 上海静安区空气净化器租赁公司怎么选?综合对比优选筠郡(上海)环境科技有限公司 - 专注室内空气检测治理
  • XSwitch:3分钟搞定Chrome浏览器请求转发难题
  • 2026口碑好的高清视频会议系统推荐!看看itc保伦股份获奖智能超高清视讯系统 - 品牌速递
  • DDS直接数字频率合成技术:从核心原理到工程选型与调试实战
  • MyBatis流式查询实战:千万级数据导出与性能优化指南
  • 高管离任、业绩下滑!机构正在撤离山西汾酒
  • 福州豪宅装修公司高端家装服务商综合实力深度测评含专家点评 - 全域品牌推荐
  • 2026年河南PPR一体保温管厂家聚氨酯保温管靠谱**单 - 奔跑123
  • 3分钟学会Blender UV Squares插件:一键让复杂UV变规整网格的完整指南
  • 商用洗地机质保政策哪家强?4个评判标准帮你避坑 - 资讯综合
  • 网络安全渗透测试核心概念与实战工具详解
  • 夜班、外勤、高强度岗位员工心理风险怎么管?这10个行业尤其需要 - 衡识人才测评
  • 你的Agent真的安全吗?说说Prompt注入之外的四大威胁
  • VSCode中Vue3项目红色波浪线终极解决方案:从诊断到根治
  • Unity项目YooAsset缓存清理全攻略:提升开发效率与构建稳定性
  • 宣城婚纱照,3家底片免费送 - 商业信息快查
  • KMS_VL_ALL_AIO:3分钟完成Windows与Office智能激活的终极方案
  • 简单快速指南:如何用Python免费批量下载通达信财务数据
  • UE4/UE5摄像机系统避坑指南:PlayerCameraManager与CameraModifier核心原理与实战配置
  • 2026年7月长沙阳光壹佰靠谱语言迟缓机构最新推荐指南 - 奔跑123
  • 金刚石的量子世界是什么?北睿科技带你了解量子材料新应用
  • 船舶与海工增材制造市场迎来规范化新阶段!中国船级社新指南9月1日生效
  • 2026年京师秦皇岛律所盘点 秦皇岛刑事律所挑选攻略整理 - 小范同学a
  • 保界数值方法:确保物理模拟结果不越界的核心算法突破
  • 赏金女王进阶技巧提高触发善用自旋转减少手动节奏避免紊乱
  • 医师节最美/十佳/优秀医师评选投票活动制作方法,天天评选投票平台功能测评 - 微信投票制作工具