理解域名与Nginx的关系
在互联网架构中,域名是用户访问服务的入口,而Nginx作为高性能的Web服务器和反向代理服务器,负责将域名请求正确地映射到对应的资源或服务,要让Nginx识别并处理特定域名的请求,需要完成从DNS配置到Nginx服务器配置的一系列步骤,这一过程的核心目标是确保当用户在浏览器中输入域名时,Nginx能够接收请求并根据预设规则返回正确的响应,可能是静态网页、动态应用内容或代理到后端服务。

DNS配置:域名的“导航系统”
Nginx能够处理域名请求的前提是,域名已经通过DNS(域名系统)解析到服务器的IP地址,DNS配置是整个流程的基础,相当于为域名设置了一个“导航地址”,告诉用户的浏览器应该向哪个IP发起请求。
获取域名与服务器IP
首先需要拥有一个注册的域名(例如example.com)和一台具有公网IP地址的服务器,如果尚未注册域名,可通过阿里云、腾讯云、GoDaddy等域名注册商购买;服务器IP可通过云服务商控制台或命令行工具(如ifconfig、ip addr)查看。
配置DNS记录
登录域名注册商的管理后台,找到DNS解析设置,添加A记录或CNAME记录:
- A记录:将域名直接指向服务器的公网IP,格式为
主机记录@(根域名)或www(子域名),记录类型选择A,记录值为服务器IP,将example.com和www.example.com均解析到168.1.1。 - CNAME记录:将子域名指向另一个域名,适用于需要隐藏真实IP的场景,例如将
blog.example.com指向example.com。
配置完成后,DNS解析可能需要几分钟到几小时生效(取决于TTL设置),可通过ping或nslookup命令验证域名是否正确解析到服务器IP。
Nginx服务器配置:让域名“落地”
当DNS解析生效后,用户的请求会发送到服务器的IP,此时Nginx需要根据配置文件识别不同的域名,并执行相应的处理逻辑,Nginx通过server块(虚拟主机配置)实现多域名区分,每个server块对应一个或多个域名。
定位Nginx配置文件
Nginx的主配置文件通常位于/etc/nginx/nginx.conf,但虚拟主机配置一般存放在/etc/nginx/sites-available/或/etc/nginx/conf.d/目录下(不同Linux发行版路径可能略有差异),推荐在sites-available目录下创建独立的配置文件,然后通过软链接到sites-enabled目录启用(Ubuntu/Debian系统常用此方式)。

创建虚拟主机配置文件
以example.com为例,创建配置文件/etc/nginx/sites-available/example.com如下:
server {
listen 80; # 监听HTTP默认端口80
server_name example.com www.example.com; # 绑定域名,多个域名用空格分隔
root /var/www/example.com; # 网站根目录,存放网站文件
index index.html index.htm; # 默认首页文件
# 访问日志配置(可选)
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / { # 根路径配置
try_files $uri $uri/ =404; # 依次尝试访问文件、目录,否则返回404
}
# 其他配置(如重定向、反向代理等)
}
关键参数说明:
listen:指定Nginx监听的端口,80为HTTP,443为HTTPS(需配置SSL证书)。server_name:必须与DNS解析的域名完全一致,支持通配符(如*.example.com)或正则表达式(如~^example\.com$)。root:网站文件的存放路径,需确保Nginx进程对该目录有读取权限(通常设置www-data用户为所有者)。
启用配置并测试
创建配置文件后,需启用并重载Nginx:
- Ubuntu/Debian:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ - CentOS/RHEL:直接将配置文件放入
/etc/nginx/conf.d/目录,文件名以.conf如example.com.conf)
执行sudo nginx -t检查配置语法是否正确,若无错误则重载Nginx:sudo systemctl reload nginx,通过浏览器访问example.com,应能看到/var/www/example.com下的网站内容。
HTTPS配置:加密传输保障安全
现代网站普遍采用HTTPS协议,通过SSL/TLS证书加密数据传输,提升安全性和用户信任度,Nginx支持Let’s Encrypt免费证书,可通过Certbot工具自动申请和配置。
安装Certbot
# Ubuntu/Debian sudo apt update sudo apt install certbot python3-certbot-nginx # CentOS/RHEL sudo yum install epel-release sudo yum install certbot python3-certbot-nginx
申请SSL证书
sudo certbot --nginx -d example.com -d www.example.com
Certbot会自动检测Nginx配置中的域名,申请证书并修改Nginx配置,添加443端口监听和SSL相关参数,完成后,server块会新增如下配置:

listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5;
强制HTTP跳转HTTPS(可选)
为确保所有访问都通过HTTPS,可在HTTP的server块中添加重定向规则:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri; # 永久重定向到HTTPS
}
重载Nginx后,访问HTTP域名会自动跳转至HTTPS。
多域名与子域名配置
若需在同一台服务器上托管多个网站(如example.com和blog.example.com),只需重复上述“创建虚拟主机配置文件”的步骤,为每个域名创建独立的server块,并设置不同的root目录即可。
示例:配置子域名blog.example.com
server {
listen 80;
server_name blog.example.com;
root /var/www/blog.example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
确保/var/www/blog.example.com目录存在且权限正确,重载Nginx后即可通过子域名访问独立网站。
常见问题排查
域名无法访问
- 检查DNS解析是否生效:
nslookup example.com确认IP正确。 - 检查服务器防火墙:确保80、443端口已开放(如
sudo ufw allow 80,443/tcp)。 - 检查Nginx错误日志:
tail -f /var/log/nginx/error.log定位问题(如权限不足、配置语法错误)。
访问域名显示默认页面
- 检查
server_name是否与域名完全一致(包括www子域名)。 - 检查
root路径是否正确,文件是否存在。 - 检查Nginx是否绑定了正确的
server块:sudo nginx -T查看完整配置,确认域名对应的server块未被其他配置覆盖。
HTTPS证书报错
- 确保证书未过期:
sudo certbot certificates查看证书状态。 - 若证书过期,执行
sudo certbot renew --dry-run测试自动续期,然后sudo certbot renew正式续期。
通过DNS配置将域名指向服务器IP,再在Nginx中创建虚拟主机绑定域名,并可选配置HTTPS加密,即可完成Nginx对域名的识别与处理,这一过程涉及网络基础、服务器配置和安全实践,需逐步验证每个环节的正确性,掌握这些操作后,不仅能搭建个人网站,还能为企业级应用提供灵活、高效的多域名托管服务。

















