bydsf.com · 建站实战笔记

看到这儿说明你是真的想把网站这事弄明白。这些文章都来自我们给河南企业做站的真实项目,不是网上抄来的行业稿。文章里聊到具体方案拿不准的,随时打电话过来,咱免费帮你参谋,不收咨询费。

本文是 bydsf.com 建站团队的实战笔记,看完有想法可以直接联系我们:电话 18236992212,微信同号。

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

发布时间:2026/11/8 12:45:49 · 来源:bydsf.com

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 看。

有时候,问题出在别处。

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

那可以找我聊聊。

我不卖课,也不忽悠。

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

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

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

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

这才是正道。

看完文章还拿不准?打个电话最省事

把你的行业和想法说给我们听听,不收咨询费,合适就做,不合适就当交个河南本地的朋友。我们是扎根郑州的小团队,设计、开发、售后都是自己人,不转包,你找的每一个人都能在办公室见到。

邮箱 809451989@qq.com · 微信 18236992212