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

【Nginx开荒攻略】Nginx虚拟主机配置:从域名、端口到IP的完整指南

目录

引言

1 虚拟主机概述

1.1 什么是虚拟主机

1.2 虚拟主机的工作原理

1.3 虚拟主机的类型

1.4 虚拟主机的优势

2 基于域名的虚拟主机

2.1 基于域名虚拟主机概述

2.2 server_name指令详解

2.2.1 基本语法

2.2.2 server_name配置类型

2.2.3 server_name匹配优先级

2.3 基于域名虚拟主机配置示例

2.3.1 基础配置示例

2.3.2 高级配置示例

3 基于端口的虚拟主机

3.1 基于端口虚拟主机概述

3.2 基于端口虚拟主机配置示例

3.2.1 基础配置示例

3.2.2 高级配置示例

4 基于IP的虚拟主机

4.1 基于IP虚拟主机概述

4.2 基于IP虚拟主机配置示例

4.2.1 基础配置示例

4.2.2 高级配置示例

5 总结


引言

在当今的互联网环境中,虚拟主机技术已经成为Web服务部署的标准配置。Nginx作为最受欢迎的Web服务器之一,其强大的虚拟主机功能让管理员可以在单台服务器上托管多个网站,实现资源的最大化利用。虚拟主机不仅能够降低硬件成本,还能简化管理流程,提高运维效率。

1 虚拟主机概述

1.1 什么是虚拟主机

虚拟主机(Virtual Host)是一种特殊的技术,它允许在单台物理服务器上运行多个独立的网站服务。每个虚拟主机在逻辑上都是独立的,拥有自己的域名、配置文件和资源,但共享同一台服务器的硬件资源。
  • 物理服务器:提供硬件资源(CPU、内存、磁盘等)
  • 操作系统:管理硬件资源和软件进程
  • Nginx:作为Web服务器,接收和处理HTTP请求
  • 虚拟主机:每个虚拟主机对应一个独立的网站服务
  • 域名与网站:每个虚拟主机绑定特定的域名和网站内容

1.2 虚拟主机的工作原理

  • 当客户端发起HTTP请求时,Nginx会根据请求中的特定信息来确定应该由哪个虚拟主机来处理该请求:
  • 请求接收:客户端向Nginx服务器发送HTTP请求
  • 信息解析:Nginx解析请求中的关键信息(Host、IP、端口)
  • 虚拟主机匹配:根据配置的匹配规则确定对应的虚拟主机
  • 请求处理:选定的虚拟主机处理请求并返回响应
  • 内容返回:将处理结果返回给客户端

1.3 虚拟主机的类型

  • Nginx支持三种主要的虚拟主机配置方式:

类型

匹配依据

适用场景

优势

劣势

基于域名

HTTP Host头部

外部网站、多域名服务

资源利用率高、配置灵活

需要域名解析

基于IP

目标IP地址

多IP环境、独立服务

完全隔离、无需域名

需要多个IP地址

基于端口

目标端口号

内部服务、管理后台

配置简单、无需额外IP

用户需要记住端口号

1.4 虚拟主机的优势

  • 资源利用率高:多个网站共享同一台服务器的计算资源
  • 成本效益:降低硬件采购和运维成本
  • 管理便捷:集中管理多个网站,简化运维流程
  • 灵活扩展:可以随时添加新的虚拟主机
  • 隔离性好:各网站在逻辑上相互独立,避免相互影响

2 基于域名的虚拟主机

2.1 基于域名虚拟主机概述

基于域名的虚拟主机是最常见和最灵活的虚拟主机配置方式。它通过HTTP请求中的Host头部字段来区分不同的网站,允许多个域名解析到同一个IP地址,从而实现"一机多站"的功能。
基于域名虚拟主机工作原理:
  • 域名解析:多个域名DNS解析到同一个IP地址
  • 请求发送:客户端通过不同域名访问服务器
  • Host头部:HTTP请求中包含Host头部信息
  • 域名匹配:Nginx根据Host头部匹配对应的虚拟主机
  • 内容返回:匹配的虚拟主机返回对应的网站内容

2.2 server_name指令详解

server_name指令是基于域名虚拟主机的核心指令,用于指定虚拟主机处理的域名。

2.2.1 基本语法

server_name name ...;
参数说明:
  • name:域名列表,可以包含多个域名,用空格分隔
  • 支持的域名格式:精确域名、通配符域名、正则表达式域名

2.2.2 server_name配置类型

# 精确匹配
server_name www.example.com;
server_name example.com;# 通配符匹配
# 通配符在开头
server_name *.example.com;
# 通配符在结尾
server_name www.example.*;# 正则表达式匹配
server_name ~^www\d+\.example\.com$;
server_name ~^.*\.example\.com$;# 混合配置
server_name example.com www.example.com *.example.com;

2.2.3 server_name匹配优先级

  • 完全匹配:精确匹配server_name中的域名
  • 通配符前缀匹配:*.example.com格式的匹配
  • 通配符后缀匹配:www.example.*格式的匹配
  • 正则表达式匹配:以~开头的正则表达式匹配
  • 默认虚拟主机:如果没有匹配的server_name,使用default_server标记的虚拟主机

2.3 基于域名虚拟主机配置示例

2.3.1 基础配置示例

# 主配置文件 /etc/nginx/nginx.conf
http {include /etc/nginx/mime.types;default_type application/octet-stream;# 日志格式定义log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# 第一个虚拟主机 - 主网站server {listen 80;server_name www.example.com example.com;root /var/www/example.com/html;index index.html index.htm;access_log /var/log/nginx/example.com.access.log main;error_log /var/log/nginx/example.com.error.log;location / {try_files $uri $uri/ =404;}# 静态文件缓存location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {expires 1y;add_header Cache-Control "public, immutable";}}# 第二个虚拟主机 - 博客网站server {listen 80;server_name blog.example.com;root /var/www/blog.example.com/html;index index.html index.htm;access_log /var/log/nginx/blog.example.com.access.log main;error_log /var/log/nginx/blog.example.com.error.log;location / {try_files $uri $uri/ =404;}# WordPress伪静态规则location / {try_files $uri $uri/ /index.php?$args;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}# 第三个虚拟主机 - 商城网站server {listen 80;server_name shop.example.com;root /var/www/shop.example.com/html;index index.php;access_log /var/log/nginx/shop.example.com.access.log main;error_log /var/log/nginx/shop.example.com.error.log;location / {try_files $uri $uri/ /index.php?$args;}# PHP处理location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}
}

2.3.2 高级配置示例

# HTTPS虚拟主机配置
server {listen 443 ssl http2;server_name www.example.com;root /var/www/example.com/html;index index.html;# SSL配置ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;# 安全头配置add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;location / {try_files $uri $uri/ =404;}
}# HTTP重定向到HTTPS
server {listen 80;server_name www.example.com example.com;return 301 https://$host$request_uri;
}# 通配符域名配置
server {listen 80;server_name *.example.com;# 通配符域名处理set $domain $host;if ($host ~* ^(\w+)\.example\.com$) {set $subdomain $1;}root /var/www/example.com/$subdomain;index index.html;location / {try_files $uri $uri/ =404;}
}# 正则表达式域名配置
server {listen 80;server_name ~^(\w+)\.example\.com$;# 使用捕获的子域名set $subdomain $1;root /var/www/example.com/$subdomain;index index.html;location / {try_files $uri $uri/ =404;}
}

3 基于端口的虚拟主机

3.1 基于端口虚拟主机概述

基于端口的虚拟主机是通过监听不同的端口号来区分不同的网站服务。这种方式不需要额外的IP地址或域名解析,只需要在同一个IP地址上配置不同的端口即可实现多个网站服务。
  • 简单易用:不需要额外的IP地址或域名配置
  • 快速部署:适合临时测试或内部服务
  • 端口冲突:需要确保端口不被其他服务占用
  • 用户体验:用户需要记住端口号

3.2 基于端口虚拟主机配置示例

3.2.1 基础配置示例

# 基于端口虚拟主机配置
http {include /etc/nginx/mime.types;default_type application/octet-stream;# 第一个虚拟主机 - 80端口,主网站server {listen 80;server_name localhost;root /var/www/main-site/html;index index.html index.htm;access_log /var/log/nginx/main-site.access.log;error_log /var/log/nginx/main-site.error.log;location / {try_files $uri $uri/ =404;}}# 第二个虚拟主机 - 8080端口,管理后台server {listen 8080;server_name localhost;root /var/www/admin-panel/html;index index.php;access_log /var/log/nginx/admin-panel.access.log;error_log /var/log/nginx/admin-panel.error.log;location / {try_files $uri $uri/ /index.php?$args;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}# IP访问限制allow 192.168.1.0/24;deny all;}# 第三个虚拟主机 - 8081端口,开发环境server {listen 8081;server_name localhost;root /var/www/dev-site/html;index index.html;access_log /var/log/nginx/dev-site.access.log;error_log /var/log/nginx/dev-site.error.log;location / {try_files $uri $uri/ =404;}# 开发环境调试location ~* \.(log|err)$ {allow all;}}
}

3.2.2 高级配置示例

# 带SSL的端口虚拟主机
server {listen 8443 ssl;server_name localhost;root /var/www/secure-site/html;index index.html;# SSL配置ssl_certificate /etc/nginx/ssl/localhost.crt;ssl_certificate_key /etc/nginx/ssl/localhost.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;# 安全配置add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";location / {try_files $uri $uri/ =404;}
}# 反向代理端口虚拟主机
server {listen 9090;server_name localhost;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;}# WebSocket支持location /ws {proxy_pass http://localhost:3001;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}
}# 负载均衡端口虚拟主机
upstream backend_cluster {server 192.168.1.10:8080;server 192.168.1.11:8080;server 192.168.1.12:8080;
}server {listen 7070;server_name localhost;location / {proxy_pass http://backend_cluster;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 5s;proxy_read_timeout 30s;proxy_send_timeout 30s;}
}

4 基于IP的虚拟主机

4.1 基于IP虚拟主机概述

基于IP的虚拟主机是通过监听不同的IP地址来区分不同的网站服务。这种方式每个虚拟主机都需要独立的IP地址,适用于需要完全隔离的场景。
  • 完全隔离:每个IP地址对应独立的虚拟主机
  • 无需域名:不依赖于HTTP Host头部
  • 资源独占:每个虚拟主机独占IP资源
  • 成本较高:需要多个IP地址

4.2 基于IP虚拟主机配置示例

4.2.1 基础配置示例

# 基于IP虚拟主机配置
http {include /etc/nginx/mime.types;default_type application/octet-stream;# 第一个虚拟主机 - IP1server {listen 192.168.1.100:80;server_name _;root /var/www/site1/html;index index.html index.htm;access_log /var/log/nginx/site1.access.log;error_log /var/log/nginx/site1.error.log;location / {try_files $uri $uri/ =404;}}# 第二个虚拟主机 - IP2server {listen 192.168.1.101:80;server_name _;root /var/www/site2/html;index index.html index.htm;access_log /var/log/nginx/site2.access.log;error_log /var/log/nginx/site2.error.log;location / {try_files $uri $uri/ =404;}}# 第三个虚拟主机 - IP3server {listen 192.168.1.102:80;server_name _;root /var/www/site3/html;index index.html index.htm;access_log /var/log/nginx/site3.access.log;error_log /var/log/nginx/site3.error.log;location / {try_files $uri $uri/ =404;}}
}

4.2.2 高级配置示例

# HTTPS IP虚拟主机配置
server {listen 192.168.1.100:443 ssl;server_name _;root /var/www/secure-site1/html;index index.html;# SSL配置ssl_certificate /etc/nginx/ssl/site1.crt;ssl_certificate_key /etc/nginx/ssl/site1.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;# 安全配置add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";location / {try_files $uri $uri/ =404;}
}# 多端口IP虚拟主机配置
server {listen 192.168.1.101:80;server_name _;root /var/www/site2/html;index index.html;location / {try_files $uri $uri/ =404;}
}server {listen 192.168.1.101:443 ssl;server_name _;root /var/www/site2-secure/html;index index.html;ssl_certificate /etc/nginx/ssl/site2.crt;ssl_certificate_key /etc/nginx/ssl/site2.key;ssl_protocols TLSv1.2 TLSv1.3;location / {try_files $uri $uri/ =404;}
}# 反向代理IP虚拟主机配置
server {listen 192.168.1.102:80;server_name _;location / {proxy_pass http://localhost:8080;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;}location /api/ {proxy_pass http://localhost:8081;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;}
}

5 总结

Nginx虚拟主机技术是现代Web服务部署的核心技术之一。通过合理配置基于域名、端口和IP的虚拟主机,我们可以在单台服务器上托管多个网站,实现资源的最大化利用。记住,虚拟主机配置是一个持续优化的过程。在实际应用中,需要根据业务需求和技术发展不断调整和改进配置。
http://www.dtcms.com/a/464759.html

相关文章:

  • 小杰深度学习(nine)——CUDA与CuDNN安装
  • 鸿蒙NEXT USB Host模式开发完全指南
  • MinerU2.5 windows 本地部署
  • UIkit中使用新版UICollectionViewCompositionalLayout进行复杂布局(二)
  • 网站建设的技术问题苏州吴江建设局招标网站
  • 河南省村镇建设处网站网站配色与布局 教材
  • Prometheus运维之路(ES监控接入)
  • OpenAMP专题(一):一文了解OpenAMP全貌
  • C++ 中 rfind 方法详解
  • SpringBoot 教程(十四) SpringBoot之集成 Redis(优化版)
  • 【Linux】线程同步与互斥(上)
  • 图观 模型编辑器
  • Win11 输入延迟与鼠标卡顿:系统化排查与优化指南
  • 【开题答辩全过程】以 爱运动健身小程序的设计与实现为例,包含答辩的问题和答案
  • Linux 内核IIO sensor驱动
  • 《Linux系统编程之入门基础》【Linux的前世今生】
  • 活动汪活动策划网站龙岗建设网站
  • Apache IoTDB 架构特性与 Prometheus+Grafana 监控体系部署实践
  • LLM时代基于unstructured解析非结构化pdf
  • uniapp tab切换及tab锚点效果(wx小程序及H5端)
  • Hadoop面试题及详细答案 110题 (71-85)-- 集群部署与运维
  • 5-1〔OSCP ◈ 研记〕❘ SQL注入攻击▸SQL注入理论基础
  • 南充市企业网站建设wordpress极客主题
  • 企业做小红书关键词搜索排名推广时,怎么找到小红书上有一定搜索量但竞争度低的蓝海词?
  • 数据仓库与数据挖掘基础知识
  • 鸿蒙:使用Rating组件实现五角星打分评价
  • 外国人可以在中国做网站吗做个网站得花多少钱
  • 双均线策略
  • 【vLLM 学习】Neuron
  • 网站做行业认证好处施工企业在施工过程中发现工程设计图纸存在差错的