一台服务器如何通过不同域名指向不同站点?nginx

在云服务器资源宝贵的今天,我们往往希望在一个公网ip的一台服务器上运行多个项目。比如:

  • www.a.com 指向个人博客。
  • www.b.com 指向api反代。

Nginx 作为高性能的 HTTP 和反向代理服务器,通过 “虚拟主机(Virtual Host)” 功能,可以轻松实现根据访问的域名将请求转发到不同的目录或后端服务。

核心原理

当我们在浏览器输入域名并回车时,请求最终都会到达服务器的 80(HTTP)或 443(HTTPS)端口。Nginx 能够区分不同站点的秘密在于 HTTP 请求头中的 Host 字段。Nginx 接收到请求后,会将其中的域名与配置文件中 server_name 指令进行匹配,匹配成功后,就进入对应的 server 块进行处理。

在/etc/nginx/conf.d/ 目录下为每个站点创建独立的配置文件。

准备工作

  1. 域名解析:确保你的多个域名(如 a.com 和 b.com)都已通过 A 记录解析到同一台服务器的 IP 地址。
  2. 环境安装:服务器已安装 Nginx。
  3. 站点准备:准备好不同站点的代码目录。
    • 站点 A 路径:/var/www/site_a
    • 站点 B 路径:/var/www/site_b

具体配置步骤

1. 配置站点 A

创建文件 /etc/nginx/conf.d/site_a.conf:

server {
listen 80;
server_name a.com www.a.com; # 这里填写你的域名

root /var/www/site_a; # 站点代码存放路径
index index.html index.htm index.php;

location / {
try_files $uri $uri/ =404;
}

# 如果是 PHP 站点,取消下面注释
# location ~ \.php$ {
# include snippets/fastcgi-php.conf;
# fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# }
}

2. 配置站点 B

创建文件 /etc/nginx/conf.d/site_b.conf:

server {
listen 80;
server_name b.com www.b.com; # 这里填写第二个域名

root /var/www/site_b;
index index.html index.htm;

location / {
# 如果站点B是一个运行在 3000 端口的 Node.js 程序,可以使用反向代理
# proxy_pass http://localhost:3000;
try_files $uri $uri/ =404;
}
}

这里其实配置文件中也可以加入cert证书,来实现443端口,https连接。

验证并生效

先进行语法检查:
sudo nginx -t
如果看到 syntax is ok 和 test is successful,则说明配置无误。接着重新加载 Nginx 配置:
sudo systemctl reload nginx
# 或者
sudo nginx -s reload

如果所有 server_name 都不匹配,Nginx 会默认转发给第一个加载的配置文件。建议设置一个默认服务器(default_server)来处理未匹配域名。

通过 Nginx 的虚拟主机配置,我们可以极大地提高服务器的利用率。无论是静态 HTML 页面、PHP 网站,还是通过反向代理对接 Java/Node.js 服务,配置逻辑都是一致的。

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇