ESC

开始输入,可搜索发票、服务、域名、工单,以及 更多...

搜索... Ctrl+K
站群与多 IP

站群服务器为每个网站分配独立 IP 教程:Nginx 绑定 IP、宝塔多 IP 站点与出口 IP 设置

8 个步骤 7 分钟阅读 1 次阅读 0
本文目录

使用站群服务器时,常见需求是让每个网站解析并监听在不同的 IP 上,便于独立管理、证书配置与风险隔离。本文介绍如何在站群服务器为每个网站分配独立 IP:在 Nginx 中使用 listen IP:80/443 绑定指定地址、在宝塔面板中为站点设置独立 IP、简要说明出口 IP 与 SNAT,并给出站群 SEO 的实用建议。适用于 Linux 下的 Nginx(Debian/Ubuntu、CentOS/Rocky/AlmaLinux 均可)。

开始前请先把 IP 段绑定到服务器网卡上(可参考本帮助中心“Linux 批量绑定 /24 整段 IP”一文),并在 DNS 中把每个域名的 A 记录分别指向对应 IP。下文以 203.0.113.11、203.0.113.12 和示例域名 site1.example、site2.example 说明。

步骤 1:确认 IP 已绑定到网卡

Nginx 只能监听系统中已存在的地址,否则会报 cannot assign requested address:

ip -4 addr show dev eth0 | grep inet

步骤 2:Nginx 使用 listen IP:80 为网站绑定独立 IP

在每个站点的 server 块中,把 listen 80; 改为 listen 指定IP:80;。配置文件一般位于 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/:

server {
    listen 203.0.113.11:80;
    server_name site1.example www.site1.example;
    root /var/www/site1;
    index index.html index.php;
}

server {
    listen 203.0.113.12:80;
    server_name site2.example www.site2.example;
    root /var/www/site2;
    index index.html index.php;
}

这样即使请求的 Host 头不匹配,访问某个 IP 也只会命中绑定在该 IP 上的站点。

步骤 3:HTTPS 站点使用 listen IP:443 ssl

HTTPS 同理,为每个站点的 443 端口指定独立 IP,并配置各自的证书:

server {
    listen 203.0.113.11:443 ssl;
    server_name site1.example www.site1.example;
    ssl_certificate     /etc/nginx/ssl/site1.example/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/site1.example/privkey.pem;
    root /var/www/site1;
}

每个 IP 只承载一个 HTTPS 站点时,即使访客客户端不支持 SNI 也能拿到正确证书。

步骤 4:为每个 IP 设置默认站点,防止被恶意解析

建议为每个 IP 添加一个 default_server,拒绝未知域名访问,避免他人把域名解析到你的 IP 上产生镜像内容:

server {
    listen 203.0.113.11:80 default_server;
    server_name _;
    return 444;
}

步骤 5:检查配置并重载 Nginx,验证每个网站的 IP

nginx -t && systemctl reload nginx
ss -lntp | grep nginx

在 DNS 未生效前,可以用 curl --resolve 指定 IP 测试每个站点:

curl -I --resolve site1.example:80:203.0.113.11 http://site1.example/
curl -I --resolve site2.example:80:203.0.113.12 http://site2.example/

步骤 6:宝塔面板设置多 IP 站点

宝塔面板新建站点时默认 listen 80(监听全部 IP)。如需让站点绑定独立 IP,可在面板中打开该网站的设置,进入配置文件,将 listen 行改为指定 IP 后保存:

listen 203.0.113.11:80;
listen 203.0.113.11:443 ssl;
在面板中修改 SSL、伪静态或端口等设置时,面板可能重新生成 listen 行,修改后请再次检查配置文件。面板菜单名称以所用版本为准。

步骤 7:出口 IP 与 SNAT 简述

Nginx 的 listen 只决定入站使用哪个 IP。服务器主动对外发起请求(如采集、API 调用、发邮件)时,默认使用主 IP 作为出口。如需让某个站点用指定 IP 出站,可在程序中绑定源地址(例如 curl 的 --interface、PHP cURL 的 CURLOPT_INTERFACE),或让该站点以独立用户运行,再用 iptables 按用户做 SNAT:

useradd -r -s /sbin/nologin site1run
iptables -t nat -A POSTROUTING -o eth0 -m owner --uid-owner site1run -j SNAT --to-source 203.0.113.11
curl --interface 203.0.113.11 https://ifconfig.me

iptables 规则需要配合 iptables-save 或 netfilter-persistent 才能在重启后保留。

站群 SEO 建议

  • 独立 IP 只是基础条件,内容原创度、站点质量和用户体验对排名影响更大;
  • 不同站点避免使用相同模板、相同内容和相同统计代码;
  • 如有需要可为 IP 设置 rDNS,并为每个站点配置独立证书;
  • 遵守搜索引擎的网站管理员指南,不要用站群做垃圾链接或镜像抄袭。

常见问题

Nginx 报错 bind() to 203.0.113.11:80 failed?

通常是 IP 未绑定到网卡,或端口被其他程序占用。用 ip addr 与 ss -lntp 检查。

修改后访问 IP 仍显示其他网站?

检查是否仍有 server 块使用 listen 80 default_server,或 DNS 仍指向旧 IP。

Apache 能实现同样效果吗?

可以,在 VirtualHost 中写 <VirtualHost 203.0.113.11:80> 并配合 Listen 指令即可。

如仍无法解决,可提交工单联系 IMIDC 7×24 技术支持。

这篇文章有帮助吗?

相关教程