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

【Nginx开荒攻略】深度解析基于域名的虚拟主机配置:从域名解析到实战部署

目录

引言

1 基于域名的虚拟主机基础概念

1.1 什么是基于域名的虚拟主机?

1.2 基于域名虚拟主机的特点

1.3 三种虚拟主机配置方式对比

1.4 基于域名虚拟主机的应用场景

2 域名解析与网络基础

2.1 DNS解析原理

2.2 DNS配置

2.3 本地hosts文件配置

2.4 验证域名解析

3 Nginx基于域名的虚拟主机配置基础

3.1 Nginx配置文件结构

3.2 server_name指令详解

3.3 基础配置示例

3.4 创建网站目录和测试文件

3.5 重启Nginx服务

3.6 测试访问

4 域名匹配规则详解

4.1 server_name匹配优先级

4.2 精确匹配

4.3 通配符匹配

4.4 正则表达式匹配

4.5 默认虚拟主机配置

4.6 域名匹配实战示例

5 高级配置技巧

5.1 多域名配置

5.2 泛域名配置

5.3 HTTPS配置

5.4 反向代理配置

5.5 负载均衡配置

6 总结


引言

在现代Web服务器架构中,虚拟主机技术是实现多站点托管的核心技术之一。Nginx作为业界领先的高性能Web服务器,提供了灵活多样的虚拟主机配置方案。其中,基于域名的虚拟主机配置是最常用、最灵活的方式,特别适合互联网环境下的多网站托管需求。
基于域名的虚拟主机通过不同的域名来区分不同的虚拟主机,多个域名可以指向同一个IP地址,通过Nginx的server_name指令进行匹配和路由。这种配置方式不仅节省了IP地址资源,还能为每个网站提供独立的配置和运行环境。

1 基于域名的虚拟主机基础概念

1.1 什么是基于域名的虚拟主机?

基于域名的虚拟主机是指通过不同的域名来区分不同的虚拟主机。多个域名可以指向同一个服务器的IP地址,Nginx根据客户端请求中的Host头部字段,将请求路由到对应的虚拟主机进行处理。

1.2 基于域名虚拟主机的特点

特点描述:
  • 资源高效:多个域名共享同一个IP地址,节省IP资源
  • 配置灵活:每个虚拟主机拥有独立的配置文件和根目录
  • 用户友好:用户通过熟悉的域名访问网站,无需记忆端口号
  • SEO友好:每个域名有独立的SEO优化空间

1.3 三种虚拟主机配置方式对比

配置方式

区分依据

适用场景

优势

劣势

基于域名

域名

外部网站、互联网应用

用户友好、利于SEO

需要域名解析

基于IP

IP地址

独立IP需求、SSL绑定

完全隔离、独立SSL

需要多个IP

基于端口

端口号

内部服务、测试环境

简单易用、无需额外IP

用户需记忆端口

1.4 基于域名虚拟主机的应用场景

  • 企业多站点:企业官网、产品站、博客等独立站点
  • 多租户系统:SaaS平台中不同租户的独立站点
  • 电商平台:主站、商城、社区等不同功能模块
  • 内容分发:不同语言版本、不同地区版本的网站

2 域名解析与网络基础

2.1 DNS解析原理

  • 用户输入域名:用户在浏览器中输入要访问的域名
  • 检查本地DNS缓存:浏览器首先检查本地是否有该域名的DNS缓存记录
  • 本地DNS缓存查询:如果本地缓存中有,直接返回IP地址
  • 询问本地DNS服务器:如果本地缓存没有,询问本地DNS服务器(如路由器、ISP提供的DNS)
  • 本地DNS服务器查询:如果本地DNS服务器有记录,直接返回IP地址
  • 询问根DNS服务器:如果本地DNS服务器没有,询问根DNS服务器
  • 询问顶级DNS服务器:根DNS服务器返回顶级域名服务器地址
  • 询问权威DNS服务器:顶级域名服务器返回权威DNS服务器地址
  • 返回IP地址:权威DNS服务器返回域名的IP地址
  • 建立连接:浏览器获取IP地址后,建立TCP连接访问网站

2.2 DNS配置

# Linux系统DNS配置
vim /etc/resolv.conf# 添加DNS服务器
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 114.114.114.114

2.3 本地hosts文件配置

# Linux/Mac系统hosts文件
vim /etc/hosts# 添加域名解析记录
192.168.1.100    www.site1.com
192.168.1.100    www.site2.com
192.168.1.100    www.site3.com

2.4 验证域名解析

# 查看域名解析
nslookup www.site1.com
dig www.site1.com
ping www.site1.com# 查看DNS缓存
systemd-resolve --statistics  # Linux

3 Nginx基于域名的虚拟主机配置基础

3.1 Nginx配置文件结构

# 主配置文件:nginx.conf
http {# 全局配置include       /etc/nginx/mime.types;default_type  application/octet-stream;# 虚拟主机配置include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
}

3.2 server_name指令详解

# server_name指令语法
server_name name1 name2 ...;
参数说明:
  • name1 name2 ...:一个或多个域名,用空格分隔
  • 支持的域名类型:
    • 精确域名:www.example.com
    • 通配符域名:*.example.com、www.example.*
    • 正则表达式:~^www\d+\.example\.com$

3.3 基础配置示例

# 虚拟主机1:www.site1.com
server {listen 80;server_name www.site1.com;root /var/www/site1;index index.html;location / {try_files $uri $uri/ =404;}
}# 虚拟主机2:www.site2.com
server {listen 80;server_name www.site2.com;root /var/www/site2;index index.html;location / {try_files $uri $uri/ =404;}
}# 虚拟主机3:www.site3.com
server {listen 80;server_name www.site3.com;root /var/www/site3;index index.html;location / {try_files $uri $uri/ =404;}
}

3.4 创建网站目录和测试文件

# 创建网站目录
mkdir -p /var/www/{site1,site2,site3}# 设置权限
chown -R www-data:www-data /var/www
chmod -R 755 /var/www# 创建测试页面
echo "<h1>Site 1 - www.site1.com</h1><p>Welcome to Site 1</p>" | tee /var/www/site1/index.html
echo "<h1>Site 2 - www.site2.com</h1><p>Welcome to Site 2</p>" | tee /var/www/site2/index.html
echo "<h1>Site 3 - www.site3.com</h1><p>Welcome to Site 3</p>" | tee /var/www/site3/index.html

3.5 重启Nginx服务

# 测试配置文件语法
nginx -t# 重启Nginx服务
systemctl restart nginx

3.6 测试访问

# 测试各个虚拟主机
curl -H "Host: www.site1.com" http://192.168.1.100
curl -H "Host: www.site2.com" http://192.168.1.100
curl -H "Host: www.site3.com" http://192.168.1.100

4 域名匹配规则详解

4.1 server_name匹配优先级

  • 精确匹配:完全匹配请求的域名
  • 通配符匹配:支持*.example.com或www.example.*格式
  • 正则表达式匹配:使用正则表达式进行匹配
  • 默认server块:如果都没有匹配,使用默认的server块

4.2 精确匹配

# 精确匹配示例
server {listen 80;server_name www.site1.com;  # 精确匹配root /var/www/site1;index index.html;
}server {listen 80;server_name site1.com;  # 精确匹配root /var/www/site1-alt;index index.html;
}

4.3 通配符匹配

# 通配符匹配示例
server {listen 80;server_name *.site1.com;  # 匹配所有site1.com的子域名root /var/www/site1-wildcard;index index.html;
}server {listen 80;server_name www.site.*;  # 匹配www.site.anydomainroot /var/www/site-wildcard;index index.html;
}

4.4 正则表达式匹配

# 正则表达式匹配示例
server {listen 80;server_name ~^www\d+\.site1\.com$;  # 匹配www1.site1.com, www2.site1.com等root /var/www/site1-regex;index index.html;
}server {listen 80;server_name ~^(?<subdomain>\w+)\.site1\.com$;  # 捕获子域名root /var/www/site1-capture;index index.html;# 使用捕获的变量location / {echo "Subdomain: $subdomain";}
}

4.5 默认虚拟主机配置

# 默认虚拟主机
server {listen 80 default_server;listen [::]:80 default_server;server_name _;root /var/www/default;index index.html;location / {try_files $uri $uri/ =404;}
}# 普通虚拟主机
server {listen 80;server_name www.site1.com;root /var/www/site1;index index.html;location / {try_files $uri $uri/ =404;}
}

4.6 域名匹配实战示例

# 多域名配置
server {listen 80;server_name www.site1.com site1.com;  # 多个精确域名root /var/www/site1;index index.html;
}# 通配符域名
server {listen 80;server_name *.site2.com;  # 匹配所有site2.com的子域名root /var/www/site2;index index.html;
}# 正则表达式域名
server {listen 80;server_name ~^blog\d+\.site3\.com$;  # 匹配blog1.site3.com, blog2.site3.com等root /var/www/site3-blog;index index.html;
}# 默认域名
server {listen 80 default_server;server_name _;root /var/www/default;index index.html;
}

5 高级配置技巧

5.1 多域名配置

# 一个server块处理多个域名
server {listen 80;server_name www.site1.com site1.com api.site1.com;root /var/www/site1;index index.html;# 根据路径处理不同功能location / {try_files $uri $uri/ =404;}location /api {proxy_pass http://localhost:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

5.2 泛域名配置

# 泛域名配置
server {listen 80;server_name *.site1.com;  # 匹配所有site1.com的子域名# 根据子域名设置不同的根目录set $subdomain "";if ($host ~* ^(?<subdomain>\w+)\.site1\.com$) {set $root_path "/var/www/site1/$subdomain";}root /var/www/site1/default;index index.html;location / {try_files $uri $uri/ =404;}
}

5.3 HTTPS配置

# HTTPS虚拟主机配置
server {listen 443 ssl;server_name www.site1.com;root /var/www/site1;index index.html;ssl_certificate /etc/nginx/ssl/site1.crt;ssl_certificate_key /etc/nginx/ssl/site1.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;location / {try_files $uri $uri/ =404;}
}# HTTP重定向到HTTPS
server {listen 80;server_name www.site1.com;return 301 https://$host$request_uri;
}

5.4 反向代理配置

# 反向代理配置
server {listen 80;server_name api.site1.com;location / {proxy_pass http://localhost:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 超时设置proxy_connect_timeout 30s;proxy_send_timeout 30s;proxy_read_timeout 30s;}
}

5.5 负载均衡配置

# 负载均衡配置
upstream backend {least_conn;server 192.168.1.101:3000;server 192.168.1.102:3000;server 192.168.1.103:3000 backup;
}server {listen 80;server_name www.site1.com;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

6 总结

基于域名的虚拟主机配置是Nginx的重要功能之一,掌握这一技能对于Web服务器管理和运维工作具有重要意义。

http://www.dtcms.com/a/469347.html

相关文章:

  • 互联网网站样式坪山建设网站建站
  • 全链路智能运维中的业务影响度评估与资源动态优化机制
  • 微信小程序学习(五)
  • Jmeter接口的负载测试概念
  • Linux-CentOS 7 上安装 MySQL 8.0.43(保姆级教程)
  • 视频分辨率4K,比特率50000kbps,电脑播放时卡顿的原因
  • 使用aspx做电影网站网站建设专用术语
  • Linux内核网络优化:两个网络调优解决方案
  • day7_vite 啊哈哈啊哈哈哈哈哈
  • 化妆品产品的自建网站哟哪些能想到的域名都被注册了
  • 网络协议的零拷贝 和 操作系统的零拷贝异同
  • Apache Drill:一款开源的分布式SQL查询引擎
  • 八年磨一剑:中品维度如何用“分布式电商”为商家打开增长新通路?
  • Linux下的Rust 与 C 的互操作性解析
  • 从“用框架”到“控系统”———架构通用能力(模块边界、分层设计、缓存策略、事务一致性、分布式思维)
  • 云南省建设厅网站舉報十大购物网站排行榜
  • 做网站什么空间比较好短视频运营方案
  • golang 读写锁 RWMutex
  • centos系统将/home分区的空间分配给/
  • Kafka系列之:Kafka事务、幂等生产者、事务生产者
  • sftpgo汉化处理
  • Java打包时,不将本地Jar打包到项目的最终 JAR 中
  • Go语言泛型全面解析:从基础到高级应用
  • 在css里优雅地使用if函数
  • 中国建设银行个人网站银行欧美在线做视频网站
  • 2018年网站开发语言如何加强英文网站建设
  • Pandas:机器学习数据处理的核心利器
  • ECharts + AWS 服务联动的揭示板(Dashboard)开发示例
  • 运动控制教学——5分钟学会PRM算法!
  • RK平台Uniapp自启动缓存问题解决