导读:本期聚焦于柬埔寨程序员创作的《虚拟机nginx域名怎么配置?nginx配置域名详细教程,从安装到实战全流程讲解,一文带你全面了解,常见问题与注意事项一并说明》,敬请观看详情。在虚拟机里把nginx跑起来只是第一步,真正让人头疼的往往是域名这一环:配置文件改了半天,浏览器里还是打不开站点,或者多个域名全部指向同一个页面。本文以Windows虚拟机环境为例,从nginx的下载解压和目录结构讲起,手把手演示如何编辑nginx.conf、编写server块、用server_name绑定域名,再配合hosts文件完成域名到虚拟机IP的解析,最后通过一个多域名多站点的实战案例把整个流程串起来。文中还汇总了80端口被占用、配置不生效、防火墙拦截、静态资源404等常见问题的排查思路,以及reload与stop的区别等容易忽略的细节,帮你把域名配置一次做到位。

在虚拟机里部署nginx并让它通过域名访问,是搭建测试环境、模拟生产架构时非常常见的需求。整个流程拆开来看只涉及三件事:把nginx安装好、在配置文件里用server_name把域名和站点绑定、再让域名能够解析到虚拟机的IP。这三步分别对应安装、配置、解析三个环节,任何一环出问题,浏览器里都会表现为页面打不开,或者打开的根本不是想要的站点。本文以Windows虚拟机为例,把完整过程逐步讲清楚,并附上多域名实战案例和高频问题的排查方法。

虚拟机nginx域名怎么配置?nginx配置域名详细教程,从安装到实战全流程讲解,一文带你全面了解,常见问题与注意事项一并说明

一、安装准备:在Windows虚拟机中部署nginx

nginx官方提供了Windows版本的压缩包,直接从官网下载zip包即可,解压后就能运行,没有额外的安装步骤。建议把它解压到一个纯英文、无空格的目录下,例如C:\nginx,避免中文路径引发各种奇怪的问题。解压完成后,目录结构大致是这样的:主程序nginx.exe在根目录,配置文件全部放在C:\nginx\conf目录里,其中最核心的就是nginx.conf;日志文件写在C:\nginx\logs,默认的欢迎页面放在C:\nginx\html。

启动和停止nginx都在命令行里完成。打开cmd,切换到nginx目录后执行start nginx,然后在浏览器访问虚拟机本机的127.0.0.1,看到欢迎页就说明服务已经跑起来了。需要特别注意的是,Windows下nginx是以多个进程方式运行的,一个master进程加若干worker进程,用tasklist命令可以确认进程是否存在。常用命令如下:

cd C:\nginx
start nginx
tasklist | findstr nginx
nginx -t
nginx -s reload
nginx -s quit
nginx -s stop

这里面有两个命令后面会反复用到。nginx -t用来检查配置文件语法是否正确,每次改完配置先跑一遍它,能避免把错误配置直接加载进运行中的服务;nginx -s reload则是平滑重载配置,worker进程会逐个替换,不会中断正在处理的请求,而nginx -s stop是快速停止。改完配置忘记执行reload,是新手最常犯的错误之一,浏览器里自然看不到任何变化。

二、核心配置:用server块和server_name绑定域名

nginx所有的站点配置都写在server块里,而server块必须位于http块内部。打开C:\nginx\conf\nginx.conf,把里面默认的server块看懂,基本就掌握了配置的门道。先看整体骨架:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

server块里有三个关键指令。listen 80声明这个站点监听80端口;server_name就是域名绑定的核心,nginx收到请求后会取出浏览器请求头里的Host字段,和所有server块的server_name做匹配,命中哪个就由哪个server块处理;root指定这个站点的文件根目录,index指定默认首页。把默认的server块改成绑定自己的域名,就是域名配置的第一步:

server {
    listen       80;
    server_name  www.test.local;

    location / {
        root   C:\nginx\html\test;
        index  index.html index.htm;
    }
}

这里把站点目录换成了C:\nginx\html\test,记得先建好这个目录并放入一个index.html,否则访问时会得到404或者403。server_name支持精确匹配、通配符匹配和正则匹配三种写法,本地测试用精确匹配就足够了。如果一个端口上没有任何server_name命中,请求会交给标记了default_server的那个server块处理,没有标记则交给配置文件里的第一个server块,这一点在排查域名指向错误站点时非常有用。改完保存,执行nginx -t确认语法无误,再执行nginx -s reload让配置生效。

另外提醒一点编辑器的问题。不要用系统自带的记事本直接编辑nginx.conf,它容易保存出带BOM的编码格式,导致nginx识别出莫名其妙的字符。建议用VS Code或者Notepad++打开,统一保存为UTF-8编码。

三、域名解析:让域名指向虚拟机的IP

server_name配置好之后,还差最后一环:浏览器输入域名时,这个域名必须能解析成虚拟机的IP地址。生产环境这一步由DNS服务器完成,本地测试环境则用hosts文件来模拟。先在虚拟机里执行ipconfig查看它的IP地址,假设拿到的是192.168.72.128。

接下来分两种场景。第一种是在虚拟机内部自己测试,直接编辑虚拟机里的hosts文件,路径是C:\Windows\System32\drivers\etc\hosts,把域名指到本机回环地址即可。第二种也是更常见的场景:在宿主机的浏览器里访问虚拟机站点,这时要修改的是宿主机的hosts文件,把域名指向虚拟机的IP。hosts内容类似这样:

192.168.72.128  www.test.local
192.168.72.128  api.test.local
127.0.0.1  localhost

修改hosts文件有几个细节容易踩坑。首先它受系统保护,必须用管理员身份打开编辑器才能保存,普通权限保存时会提示拒绝访问;其次改完之后建议执行ipconfig /flushdns刷新DNS缓存,否则系统可能还在用旧的解析结果;最后浏览器自身也有DNS缓存,测试时用无痕窗口或者换个浏览器,能排除这层干扰。

虚拟机的网络模式也直接影响连通性。NAT模式下虚拟机处于独立的子网,宿主机可以直接访问虚拟机IP,但局域网里其他物理机访问不到;桥接模式下虚拟机会从路由器拿到一个和宿主机同网段的IP,局域网内其他设备也能访问。如果发现宿主机ping不通虚拟机,优先检查网络模式和虚拟机的防火墙设置。

四、实战案例:一台虚拟机承载多个域名站点

单域名跑通之后,多域名就是同一套逻辑的叠加。假设要在虚拟机上同时部署两个站点:商城和博客,分别通过www.shop.local和www.blog.local访问。先准备目录,在C:\nginx\html下新建shop和blog两个文件夹,各自放入一个内容不同的index.html,方便区分访问到的是哪个站点。

然后在nginx.conf的http块里写两个server块,两个站点监听同一个80端口,靠不同的server_name区分:

server {
    listen       80;
    server_name  www.shop.local;
    location / {
        root   C:\nginx\html\shop;
        index  index.html;
    }
}

server {
    listen       80;
    server_name  www.blog.local;
    location / {
        root   C:\nginx\html\blog;
        index  index.html;
    }
}

接着在hosts文件里把两个域名都指向虚拟机IP,执行nginx -t和nginx -s reload,浏览器分别访问两个域名,就能看到两个不同的站点。这就是nginx基于域名的虚拟主机功能,一台服务器、一个端口,靠Host字段分流到不同站点,生产环境里大量网站就是这样跑在同一台nginx上的。

当站点数量多起来之后,把所有server块都堆在nginx.conf里会变得难以维护。更好的做法是在C:\nginx\conf下新建一个vhost目录,每个站点单独一个conf文件,比如C:\nginx\conf\vhost\shop.conf、C:\nginx\conf\vhost\blog.conf,然后在nginx.conf的http块里加一行include vhost\*.conf;,nginx启动时会自动把所有站点的配置加载进来,增删站点只需要动对应的文件,主配置文件保持干净。

五、常见问题与注意事项

80端口被占用。Windows虚拟机里如果装过IIS或者SQL Server的Reporting服务,80端口经常被抢占,nginx启动会失败,或者请求被别的服务接走。用下面的命令定位占用进程:

netstat -ano | findstr :80
tasklist | findstr 3524
taskkill /PID 3524 /F

netstat会列出占用80端口的进程PID,假设是3524,再用tasklist确认它是什么程序,最后决定是结束进程还是停掉对应服务。如果不想争抢端口,也可以把nginx的listen改成8080之类的端口,访问时在域名后面带上端口号即可。

改了配置不生效。排查顺序固定三步:先跑nginx -t确认语法没错;再确认执行过nginx -s reload;最后看日志,C:\nginx\logs\error.log里几乎能找到所有问题的答案。还有一种情况是虚拟机里跑了多份nginx,进程混乱导致你以为reload了,实际reload的是另一个目录的实例,用tasklist确认进程情况后彻底清理再启动。

宿主机访问不通。域名解析对了但页面打不开,多半是防火墙。Windows防火墙默认拦截入站连接,可以添加放行规则:

netsh advfirewall firewall add rule name="nginx 80" dir=in action=allow protocol=TCP localport=80

测试阶段也可以临时关闭防火墙来验证,确认是防火墙问题后再补上规则。同时注意NAT模式下只有宿主机能访问虚拟机,局域网其他设备要访问需要切换到桥接模式。

403和404。404通常是root路径写错或者首页文件名和index指令不一致;403常见于目录里没有index指定的文件、目录路径拼错,或者站点目录放在了权限受限的位置。把站点目录统一放在C:\nginx\html下管理最省心。

虚拟机IP变化。如果虚拟机网络用的是DHCP,重启后IP可能变化,hosts里的解析就会失效。建议在虚拟机的网络设置里配置静态IP,或者在虚拟机软件里查看并固定其分配到的地址,一劳永逸。

整体流程回顾一遍:安装解压、编写server块绑定server_name、hosts解析域名到虚拟机IP、reload生效、防火墙放行。每一步都验证通过再进入下一步,出问题时按环节逐个排查,虚拟机里的nginx域名配置其实并不复杂。

nginx域名配置Windows虚拟机hosts文件修改时间:2026-10-02 20:10:32

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/1002/64799.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。