河南本土网站建设服务商 · 专注中小企业定制官网 · 拒绝模板复用

18236992212 809451989@qq.com 微信 18236992212 微信号:18236992212

nginx怎么做多个网站:老手教你用server块轻松搞定多域名部署,避坑指南

墨白互联 发布时间:2026/11/13 12:05:20 阅读约 5 分钟
nginx怎么做多个网站:老手教你用server块轻松搞定多域名部署,避坑指南

本文关键词:nginx怎么做多个网站

很多刚接触服务器的小白,一听到“配置nginx”就头大。觉得那是大神干的事。其实真没你想得那么玄乎。

我就直说了,nginx配置多个网站,核心就一个字:分。

把不同的域名,分给不同的server块。这就好比你在一个小区里开了好几家店,每家店有独立的门牌号。nginx就是那个物业经理,负责把访客引到正确的店里。

咱们不整那些虚头巴脑的理论。直接上干货。

你打开你的nginx配置文件,通常在 /etc/nginx/conf.d/ 或者 sites-available 目录下。你会看到一堆 .conf 文件。

每个 .conf 文件,就是一个独立的网站配置。

比如,你想跑两个站。一个是 blog.example.com,一个是 shop.example.com。

你就新建两个文件:blog.conf 和 shop.conf。

别偷懒,别把所有东西都塞进一个 default.conf 里。那样后期维护起来,你绝对想骂人。

在 blog.conf 里,写 server 块。

server {

listen 80;

server_name blog.example.com;

location / {

proxy_pass http://127.0.0.1:8080;

proxy_set_header Host $host;

}

}

简单吧?listen 监听80端口,server_name 指定域名。location 里把请求转发给你的后端应用,比如跑在8080端口的node.js或者java服务。

注意看 proxy_set_header Host $host; 这一行。很多新手容易漏掉这个。

如果不加这一行,后端收到的请求头里,host是空的或者不对的。有些框架会因此报错,或者重定向循环。

这就是坑。

同样的,shop.conf 里也这么写,只是 server_name 改成 shop.example.com,proxy_pass 改成你shop后端的端口,比如 8081。

配置完,别急着重启。

先测试一下语法。

nginx -t

如果显示 syntax is ok,test is successful,那恭喜你,基本稳了。

如果有报错,它会告诉你哪一行错了。通常是分号漏了,或者大括号没配对。

这时候别慌,仔细检查。

测试通过后,reload 一下。

nginx -s reload

这样不用断开现有连接,平滑重启。

这时候,你去浏览器输入 blog.example.com。

如果看到你的博客页面,说明成了。

输入 shop.example.com,看到商城页面,也说明成了。

但是,这里有个大坑。

很多兄弟配完发现,访问 shop 的时候,竟然跳到了 blog。

为什么?

因为 nginx 有一个默认行为。

如果你访问的域名,在所有 server 块里都没匹配到,它会去访问第一个加载的 server 块,或者是你标记为 default_server 的那个。

通常,第一个被 nginx 读取到的 conf 文件,就会成为默认站点。

所以,如果你只想让特定域名访问,其他域名访问要返回 404 或者跳转到主页。

你需要在每个 server 块里,确保 server_name 写准确。

或者,你可以专门写一个 catch-all 的 server 块,监听所有未匹配的请求,直接返回 403 禁止访问。

server {

listen 80 default_server;

server_name _;

return 403;

}

把这个放在最后加载的位置。

这样,别人随便输个域名来扫你的端口,也只能看到 403。

安全一点。

再说说 https。

现在不搞 https 都不好意思说自己是做网站的。

配置 https 也很简单。

在 server 块里加上 ssl 相关的参数。

ssl_certificate /path/to/cert.pem;

ssl_certificate_key /path/to/key.pem;

然后把 listen 80 改成 listen 443 ssl。

记得,http 和 https 要分开配置。

你可以写一个 http 的 server 块,专门做 301 跳转,把所有 http 请求强制跳转到 https。

server {

listen 80;

server_name blog.example.com;

return 301 https://$server_name$request_uri;

}

这样既安全,又规范。

我见过太多人,为了省事,http 和 https 混在一起写。结果证书过期了,或者配置乱了,网站直接打不开。

排查起来能把你急死。

还有,静态资源。

如果你的网站里有图片、css、js。

别让他们经过 proxy_pass。

直接在 nginx 里用 location 匹配静态路径,指向磁盘上的目录。

location /static/ {

alias /var/www/blog/static/;

expires 30d;

}

这样 nginx 直接返回文件,不经过后端应用。

速度快,还省后端资源。

这是基本操作。

最后,提醒一句。

配置文件改完,一定要 nginx -t 测试。

一定要 reload。

不要直接 restart。

重启虽然也能生效,但在高并发场景下,restart 会导致瞬间连接中断。

reload 是平滑过渡,用户无感知。

这点细节,决定了你是业余选手还是专业运维。

如果你按照上面的步骤,还是搞不定。

那可能是你的服务器环境有问题,或者防火墙没开。

检查端口是否开放,检查后端服务是否真的在监听。

别光盯着 nginx 看。

有时候,问题出在别处。

如果你实在搞不定,或者想配置更复杂的负载均衡、动静分离。

那可以找我聊聊。

我不卖课,也不忽悠。

就是帮你看看配置,找找毛病。

毕竟,服务器稳定运行,比什么都重要。

别等网站挂了,才想起来找救兵。

平时多备份配置,多测试。

这才是正道。

网站建设 河南 墨白互联

看完文章,下一步想做个什么样的网站?

把行业、预算、上线时间说一遍,我们出书面需求文档和报价。不催单、不群发骚扰。

18236992212 微信 18236992212 顶部