
在实际的网站部署中我们常常会遇到需要在一台服务器上运行多个网站的情况。Nginx 提供的虚拟主机功能就可以很好地解决这个问题。通过虚拟主机配置我们能够在同一台服务器上轻松地管理多个网站实现资源的高效利用。接下来我们就一起深入学习如何在 Nginx 中进行虚拟主机配置实现单服务器多站点的部署。目录虚拟主机配置的核心技术点基于 IP 的虚拟主机配置方法基于端口的虚拟主机配置方法基于域名的虚拟主机配置方法分步骤实现多虚拟主机配置步骤 1准备网站文件步骤 2编辑 Nginx 配置文件步骤 3检查配置文件语法步骤 4重新加载 Nginx完整配置文件示例解决虚拟主机配置冲突和访问异常问题配置冲突问题访问异常问题总结虚拟主机配置的核心技术点基于 IP 的虚拟主机配置方法基于 IP 的虚拟主机配置就是通过不同的 IP 地址来区分不同的虚拟主机。简单来说每个网站都对应一个独立的 IP 地址当客户端访问某个 IP 时Nginx 就知道要将请求导向对应的网站。例如假设我们有两个网站 site1 和 site2分别对应 IP 地址 192.168.1.100 和 192.168.1.101。我们可以在 Nginx 的配置文件中进行如下配置# 配置 site1 server { listen 80; server_name 192.168.1.100; root /var/www/site1; index index.html; } # 配置 site2 server { listen 80; server_name 192.168.1.101; root /var/www/site2; index index.html; }在上述配置中server_name指定了该虚拟主机对应的 IP 地址root指定了网站文件的存放路径index指定了默认的首页文件。基于端口的虚拟主机配置方法基于端口的虚拟主机配置是通过不同的端口号来区分不同的虚拟主机。也就是说所有网站可能使用同一个 IP 地址但每个网站使用不同的端口进行访问。比如我们还是有两个网站 site1 和 site2都使用 IP 地址 192.168.1.100但 site1 使用端口 8080site2 使用端口 8081。配置文件如下# 配置 site1 server { listen 8080; server_name 192.168.1.100; root /var/www/site1; index index.html; } # 配置 site2 server { listen 8081; server_name 192.168.1.100; root /var/www/site2; index index.html; }这里listen指令指定了该虚拟主机监听的端口号。基于域名的虚拟主机配置方法基于域名的虚拟主机配置是最常用的方式它通过不同的域名来区分不同的虚拟主机。用户在浏览器中输入不同的域名Nginx 会根据域名将请求导向对应的网站。假设我们有两个域名 site1.com 和 site2.com配置文件如下# 配置 site1 server { listen 80; server_name site1.com; root /var/www/site1; index index.html; } # 配置 site2 server { listen 80; server_name site2.com; root /var/www/site2; index index.html; }在实际使用中我们还需要在 DNS 服务器中将域名解析到对应的服务器 IP 地址。分步骤实现多虚拟主机配置步骤 1准备网站文件首先我们需要为每个虚拟主机准备对应的网站文件。假设我们要创建两个虚拟主机 site1 和 site2我们可以在服务器上创建对应的目录并在目录中创建一个简单的 HTML 文件作为示例。# 创建 site1 的目录mkdir-p/var/www/site1# 创建 site1 的首页文件echohtmlbodyh1Welcome to Site 1!/h1/body/html/var/www/site1/index.html# 创建 site2 的目录mkdir-p/var/www/site2# 创建 site2 的首页文件echohtmlbodyh1Welcome to Site 2!/h1/body/html/var/www/site2/index.html步骤 2编辑 Nginx 配置文件接下来我们需要编辑 Nginx 的配置文件。通常Nginx 的配置文件位于/etc/nginx/nginx.conf或/etc/nginx/conf.d/目录下。我们可以在/etc/nginx/conf.d/目录下创建一个新的配置文件例如virtual_hosts.conf。# 配置 site1 server { listen 80; server_name site1.com; root /var/www/site1; index index.html; location / { try_files $uri $uri/ /index.html; } } # 配置 site2 server { listen 80; server_name site2.com; root /var/www/site2; index index.html; location / { try_files $uri $uri/ /index.html; } }在上述配置中location /块用于处理请求的 URI。try_files指令会依次尝试查找请求的文件如果找不到则返回默认的首页文件。步骤 3检查配置文件语法在重新加载 Nginx 之前我们需要检查配置文件的语法是否正确。可以使用以下命令进行检查nginx-t如果输出显示syntax is ok和test is successful则说明配置文件语法正确。步骤 4重新加载 Nginx当配置文件语法检查通过后我们可以重新加载 Nginx 使配置生效。使用以下命令systemctl reload nginx完整配置文件示例# 全局配置 user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # 加载模块 include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # 虚拟主机配置 server { listen 80; server_name site1.com; root /var/www/site1; index index.html; location / { try_files $uri $uri/ /index.html; } } server { listen 80; server_name site2.com; root /var/www/site2; index index.html; location / { try_files $uri $uri/ /index.html; } } }解决虚拟主机配置冲突和访问异常问题配置冲突问题在进行虚拟主机配置时可能会出现配置冲突的情况例如多个虚拟主机使用了相同的 IP 地址和端口号。这时Nginx 在启动时会报错。我们可以通过检查配置文件确保每个虚拟主机的listen和server_name组合是唯一的。访问异常问题如果出现访问异常的情况我们可以从以下几个方面进行排查DNS 解析问题检查域名是否正确解析到了服务器的 IP 地址。可以使用nslookup或dig命令进行检查。防火墙问题检查服务器的防火墙是否允许相应的端口访问。可以使用iptables或firewalld进行配置。Nginx 配置问题检查 Nginx 的配置文件是否正确是否有语法错误。可以使用nginx -t命令进行检查。总结通过学习 Nginx 虚拟主机配置我们可以在一台服务器上轻松地配置多个虚拟主机实现单服务器多站点的部署。掌握了基于 IP、端口和域名的虚拟主机配置方法以及分步骤实现多虚拟主机配置的过程我们能够更好地管理和利用服务器资源。同时我们也学会了如何解决虚拟主机配置冲突和访问异常问题确保网站的正常访问。掌握了 Nginx 虚拟主机配置的内容后下一节我们将深入学习 Nginx 作为 HTTP 服务器的其他高级配置进一步完善对本章 Nginx HTTP 服务配置主题的认知。