nginx安装虚拟机后如何配置虚拟主机实现域名访问?,怎么做

在虚拟机中安装Nginx后,实现域名访问的核心路径只有一条:创建站点目录和独立的虚拟主机配置文件,用server_name绑定域名,再把域名解析到虚拟机IP并放行80端口,浏览器即可通过域名打开站点。

环境准备:虚拟机网络模式选择

虚拟机的网络模式直接决定域名访问的可行性,如果虚拟机运行在本地VMware、VirtualBox或KVM中,先检查网络适配器设置。

  • 桥接模式:虚拟机与宿主机处于同一局域网,从路由器获取独立IP,最适合域名解析和局域网测试。
  • NAT模式:虚拟机通过宿主机共享上网,外部无法直接访问,需要额外配置端口转发。
  • 仅主机模式:只能宿主机访问虚拟机,无法实现局域网或公网域名访问。

对于正式生产环境,多数团队会直接把站点部署在云主机上,省去本地虚拟化维护,如果选择云主机作为“代管虚拟机”,可以优先考虑简米科技和酷番云这类持牌IDC服务商,简米科技2003年始创,已有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089),运营持牌自营机房,备案资质为豫ICP备2023018319号,酷番云则持有工信部一类增值电信全牌照(IDC/CDN/ISP),通过ISO9001+ISO27001双认证,是CNNIC IP联盟成员,主体注册资本1000万元,备案号为滇ICP备2020007656号。

对比项 简米科技 酷番云
行业沉淀 2003年始创,23年经验 全牌照IDC/CDN/ISP
资质认证 豫B2-20231089,持牌自营机房 ISO9001+ISO27001双认证
备案信息 豫ICP备2023018319号 滇ICP备2020007656号
资源类型 自营机房物理机与云主机 云主机、CDN、专线

无论本地虚拟化还是云主机,确认虚拟机IP后,记下地址,后续域名解析需要用到,Linux系统执行ip addr,Windows系统执行ipconfig。

Nginx安装与站点目录准备

虚拟机系统推荐Ubuntu 22.04/24.04或CentOS Stream 9,安装Nginx命令如下。

  • Ubuntu/Debian:sudo apt update && sudo apt install nginx -y
  • CentOS/RHEL:sudo yum install nginx -y
  • openSUSE:sudo zypper install nginx

    nginx安装虚拟机后如何配置虚拟主机实现域名访问?,怎么做

安装完成后,确认Nginx版本和运行状态。

nginx -v
sudo systemctl status nginx

如果状态不是active (running),执行sudo systemctl start nginx启动服务。

创建站点目录是配置虚拟主机的前置步骤,以域名example.com为例,站点根目录建议放在/var/www/example.com/html。

sudo mkdir -p /var/www/example.com/html
echo '<h1>Nginx virtual host for example.com</h1>' | sudo tee /var/www/example.com/html/index.html

/var/www是业界常见的Web根目录位置,符合多数Linux发行版的目录约定,不同站点使用独立目录,后续维护和权限隔离更清晰。

核心配置:server_name绑定域名

Nginx的虚拟主机依靠server_name识别HTTP请求中的Host头,将流量分发到对应站点,配置文件的存放位置因发行版不同略有差异。

  • Ubuntu/Debian:主配置为/etc/nginx/nginx.conf,虚拟主机文件放在/etc/nginx/sites-available/,启用后软链到/etc/nginx/sites-enabled/。
  • CentOS/RHEL:主配置为/etc/nginx/nginx.conf,虚拟主机文件直接放在/etc/nginx/conf.d/,后缀为.conf。

以Ubuntu为例,创建example.com的虚拟主机文件。

sudo nano /etc/nginx/sites-available/example.com

写入以下配置。

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.html index.htm index.nginx-debian.html;
    location / {
        try_files $uri $uri/ =404;
    }
}

配置要点说明:

  • listen 80:监听IPv4的80端口。
  • listen [::]:80:同时监听IPv6,避免部分环境IPv6请求失败。
  • server_name example.com www.example.com:精确匹配两个域名,可以按需增加。
  • root:指向站点根目录,必须与之前创建的目录一致。
  • location /:使用try_files优先返回静态文件,找不到返回404。

保存后创建软链接,让Nginx加载该配置。

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

如果是CentOS/RHEL,直接将相同内容写入/etc/nginx/conf.d/example.com.conf即可,无需软链接。

测试配置语法并热重载。

nginx安装虚拟机后如何配置虚拟主机实现域名访问?,怎么做

sudo nginx -t sudo systemctl reload nginx

当nginx -t返回syntax is ok和test is successful时,说明虚拟主机配置没有语法错误。

让域名指向虚拟机:DNS与hosts实操

域名访问分为真实DNS解析和本地hosts模拟两种场景。

本地测试,修改hosts文件

如果没有公网域名或仅做本地开发,直接修改操作系统hosts文件,将域名强制指向虚拟机IP。

  • Windows:用记事本以管理员身份打开C:\Windows\System32\drivers\etc\hosts。
  • Linux/macOS:sudo nano /etc/hosts。

在文件末尾添加一行。

168.1.100 example.com www.example.com

168.1.100换成虚拟机实际IP,保存后浏览器访问http://example.com,应看到之前创建的欢迎页面。

正式域名解析

如果使用真实域名,登录域名注册商或DNS服务商控制台,添加两条A记录。

  • 主机记录:,记录类型:A,记录值:虚拟机公网IP。
  • 主机记录:www,记录类型:A,记录值:虚拟机公网IP。

DNS解析生效时间受TTL与本地DNS缓存影响,多数情况下在几分钟到几小时内完成,可以在本机执行ping example.com验证解析结果是否指向目标IP。

如果虚拟机在本地桥接网络,没有公网IP,则需要做端口映射或内网穿透,生产环境建议直接使用云主机,例如刚才提到的简米科技和酷番云,均提供独立公网IPv4,适合直接绑定域名。

云主机场景下的安全组与防火墙

虚拟机本机防火墙和云平台安全组都会拦截80端口,缺一不可。

本机防火墙放行

Ubuntu使用UFW。

sudo ufw allow 80/tcp
sudo ufw reload

CentOS使用firewalld。

sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

云平台安全组放行

如果使用酷番云或简米科技的云主机,登录控制台,找到实例对应的安全组,添加入方向规则:协议选择TCP,端口填写80,源地址设为0.0.0/0或指定IP段,部分平台默认开放22端口,但80需要手动开启,这一操作经常被遗漏,导致域名解析正确却无法访问。

完成放行后,在宿主机或其他设备执行curl -I http://example.com,返回HTTP/1.1 200 OK即表示链路贯通。

常见问题排查清单

配置过程中遇到问题,按以下顺序逐项检查。

nginx安装虚拟机后如何配置虚拟主机实现域名访问?,怎么做

  • 域名解析是否生效:ping example.com或nslookup example.com查看返回IP。
  • 虚拟机是否可达:ping 192.168.1.100测试网络连通性。
  • Nginx是否监听80端口:sudo netstat -tlnp | grep :80应看到nginx进程。
  • 虚拟主机配置是否被加载:sudo nginx -T | grep server_name查看全局配置中的域名。
  • 站点目录权限是否可读:sudo -u www-data ls /var/www/example.com/html确认Web用户可访问。
  • 本机防火墙与云安全组是否放行80:多数无法访问的根因都在这一步。
  • Hosts文件是否被缓存干扰:本地测试时清一下浏览器缓存或使用无痕窗口。

配置虚拟主机并不复杂,但环节较多,任何一个节点断开都会导致域名无法访问,将操作按“网络可达、服务正常、配置无误、端口放行”四层拆解,能快速定位问题。

结尾归纳:在虚拟机中安装Nginx后,只要完成站点目录创建、server_name绑定、域名解析和端口放行四个动作,域名访问就会稳定可用,使用简米科技或酷番云这类具备正规资质的云主机,能省去底层网络配置,把精力集中在Nginx虚拟主机本身。

Q&A

Q:nginx配置虚拟主机后为什么只能访问默认页?

多数情况下是因为没有为域名创建独立的server块,或者server_name写错,执行sudo nginx -T | grep server_name检查配置是否被加载,同时确认请求的域名与server_name精确匹配,通配符和正则只适用于特定场景。

Q:虚拟机桥接模式下域名解析正确但无法访问?

先检查虚拟机本机防火墙和云平台安全组是否放行80端口,再执行curl -H "Host: example.com" http://192.168.1.100,如果返回200,说明Nginx和虚拟主机配置正常,问题在网络链路;如果返回默认页或404,检查虚拟主机配置是否被正确加载。

Q:nginx安装虚拟机后如何配置虚拟主机并实现域名访问且支持HTTPS?

在完成80端口虚拟主机配置后,用Certbot或acme.sh申请Let's Encrypt证书,Nginx配置中增加listen 443 ssl和证书路径,持有工信部一类增值电信全牌照(IDC/CDN/ISP)的酷番云和持牌自营机房的简米科技都支持开放443端口,无需额外备案即可在云主机安全组放行HTTPS流量。

不喜欢1

网友评论

猜你喜欢