ESC

開始輸入,可搜尋發票、服務、域名、工單,以及 更多...

搜尋... Ctrl+K
站群與多 IP

站群伺服器為每個網站分配獨立 IP 教程:Nginx 繫結 IP、寶塔多 IP 站點與出口 IP 設定

8 個步驟 7 分鐘閱讀 16 次閱讀 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 技術支援。

這篇文章有幫助嗎?

相關教程