物理伺服器怎麼繫結公網 IP 和域名:配置步驟與範例
物理伺服器繫結公網 IP 和域名分四步:在伺服器作業系統裡按服務商給的引數配置靜態公網 IP 並驗證能上網;在域名服務商的 DNS 控制檯新增 A(IPv4)和 AAAA(IPv6)記錄指向這個 IP;在 Web 伺服器裡按域名繫結站點、放行 80 和 443 連接埠;伺服器在中國內地機房的,網站上線前先完成 ICP 備案。
物理伺服器怎麼繫結公網 IP 和域名,流程是固定的四步:配 IP → 做解析 → 綁站點 → 辦備案。先按服務商給的引數在伺服器系統裡配好靜態公網 IP、閘道器和 DNS,確認能 ping 通外網;再去域名服務商的 DNS 管理頁把域名的 A 記錄(IPv4)和 AAAA 記錄(IPv6)指向這個 IP;然後在 Nginx、Apache 或 IIS 裡按域名繫結站點,防火牆放行 80 和 443;伺服器在中國內地機房的,網站對外開放前要完成 ICP 備案。下面按這個順序給出每一步的具體配置和檢查方法,範例裡的 203.0.113.0/24 和 2001:db8::/32 是文件專用位址段,請替換成你自己的。
第一步:拿齊網路引數
伺服器託管或租用開通後,服務商會給你一組引數,缺一項都配不通:
| 引數 | 範例 | 說明 |
|---|---|---|
| 公網 IP | 203.0.113.10 | 分給這台伺服器的位址,可能不止一個 |
| 子網掩碼 / 字首長度 | 255.255.255.0 或 /24 | 決定哪些位址和你在同一網段,寫錯會導致同段不通 |
| 閘道器 | 203.0.113.1 | 機房交換器或路由器的位址,所有出網流量先送到這裡 |
| DNS 伺服器 | 服務商提供,或公共 DNS 如 223.5.5.5、119.29.29.29 | 伺服器自己解析域名用 |
| IPv6 位址與閘道器 | 2001:db8:1::10/64、2001:db8:1::1 | 有 IPv6 時提供 |
| 接線網口 | eno1、ens192 等 | 公網線插在哪個網口,多網口伺服器尤其要確認 |
| MAC 繫結 | 是 / 否 | 很多機房把 IP 和網路卡 MAC 繫結,換網路卡要通知機房 |
網口名稱用 ip -br link 檢視,狀態為 UP 且有流量的那個通常就是接了公網線的。租用伺服器的話,這些引數一般在服務商的客戶面板裡能直接看到。
第二步:配置靜態公網 IP
機房一般不為公網段提供 DHCP,公網 IP 要手工靜態配置。下面給幾種常見系統的做法。
Ubuntu(netplan)
Ubuntu 18.04 起預設用 netplan。編輯 /etc/netplan/ 下的 yaml 檔案(檔名因安裝方式而異,用 ls /etc/netplan/ 檢視):
network:
version: 2
renderer: networkd
ethernets:
eno1:
dhcp4: false
dhcp6: false
addresses:
- 203.0.113.10/24
- 2001:db8:1::10/64
routes:
- to: default
via: 203.0.113.1
- to: default
via: 2001:db8:1::1
nameservers:
addresses: [223.5.5.5, 119.29.29.29]
# 先試執行,120 秒內不確認會自動回滾,遠端改網路配置時能防止把自己鎖在外面
sudo netplan try
# 確認無誤後正式應用
sudo netplan apply
yaml 對縮排敏感,統一用兩個空格。to: default 需要 netplan 0.103 及以上(Ubuntu 20.04 已更新到該版本),更老的版本改寫成 to: 0.0.0.0/0,IPv6 為 to: ::/0。如果服務商給的是 /32 單個位址加一個不同網段的閘道器(部分機房的做法),要先加一條到閘道器的鏈路路由,再把預設路由標記為 on-link:
addresses:
- 203.0.113.10/32
routes:
- to: 203.0.113.1/32
scope: link
- to: default
via: 203.0.113.1
on-link: true
Debian(ifupdown)
Debian 預設不用 netplan,配置寫在 /etc/network/interfaces:
auto eno1
iface eno1 inet static
address 203.0.113.10/24
gateway 203.0.113.1
iface eno1 inet6 static
address 2001:db8:1::10/64
gateway 2001:db8:1::1
DNS 寫在 /etc/resolv.conf 裡,每行一條 nameserver 223.5.5.5。改完執行 sudo systemctl restart networking,或者直接重啟伺服器。
RHEL / Rocky / AlmaLinux / CentOS Stream(nmcli)
# 檢視連線名,通常與網口同名
nmcli con show
# 配置 IPv4
nmcli con mod eno1 ipv4.method manual ipv4.addresses 203.0.113.10/24 \
ipv4.gateway 203.0.113.1 ipv4.dns "223.5.5.5 119.29.29.29"
# 配置 IPv6(沒有 IPv6 可跳過)
nmcli con mod eno1 ipv6.method manual ipv6.addresses 2001:db8:1::10/64 \
ipv6.gateway 2001:db8:1::1
# 重新啟用連線使配置生效
nmcli con up eno1
多個公網 IP 寫在同一個 ipv4.addresses 裡用逗號分隔,附加的 IP 不需要再寫閘道器。
Windows Server(PowerShell)
# 網路卡別名用 Get-NetAdapter 檢視;先關掉該網路卡的 DHCP
Set-NetIPInterface -InterfaceAlias "Ethernet" -Dhcp Disabled
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 203.0.113.10 -PrefixLength 24 -DefaultGateway 203.0.113.1
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 223.5.5.5,119.29.29.29
# 附加 IP:不帶閘道器
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 203.0.113.11 -PrefixLength 24
圖形介面在“網路和共享中心 → 更改介面卡設定 → 乙太網 → 屬性 → Internet 協議版本 4”裡填同樣的內容。
驗證
ip -br addr # 網口上應出現 203.0.113.10/24
ip route # 應有一條 default via 203.0.113.1
ping -c 3 203.0.113.1 # 先通閘道器
ping -c 3 223.5.5.5 # 再通外網
dig +short example.com # DNS 能解析
閘道器不通,排查順序是:網線插的網口對不對、IP 和掩碼有沒有寫錯、機房是否做了 MAC 繫結而你換了網路卡、交換器連接埠 VLAN 是否正確。前兩項自己改,後兩項要找機房。閘道器通、外網不通,多半是閘道器填錯或機房還沒開通連接埠。
第三步:把域名解析到伺服器
登入域名所在服務商的 DNS 管理頁面,新增記錄:
| 記錄型別 | 主機記錄 | 記錄值 | 作用 |
|---|---|---|---|
| A | @ | 203.0.113.10 | example.com 指向 IPv4 |
| A | www | 203.0.113.10 | www.example.com 指向 IPv4 |
| AAAA | @ | 2001:db8:1::10 | example.com 指向 IPv6 |
| AAAA | www | 2001:db8:1::10 | www.example.com 指向 IPv6 |
| CNAME | blog | www.example.com |
子域名別名到 www,改 IP 時只改一處 |
幾條規則:根域名(@)不能用 CNAME,只能用 A/AAAA;TTL 新建時可以用預設值(常見 600 秒),計劃換 IP 前提前把 TTL 調小;泛解析 * 會把所有未定義的子域名都指向伺服器,不需要就別加,避免被誤用。
解析加好後驗證,分別查權威 DNS 和公共遞迴 DNS,排除快取影響:
# 先查域名的權威 DNS 是誰,再直接向它查詢,結果不受快取影響
dig +short NS example.com
dig +short @ns1.example-dns.com example.com A
# 問公共遞迴 DNS,看是否已傳播
dig +short @223.5.5.5 www.example.com A
dig +short @223.5.5.5 example.com AAAA
Windows 上用 nslookup www.example.com 223.5.5.5。返回的 IP 正確,解析就完成了;沒返回或返回舊值,等 TTL 過期再查。
第四步:Web 伺服器按域名繫結站點
域名解析只是把請求送到伺服器,伺服器還要知道這個域名對應哪個站點。Web 伺服器靠 HTTP 請求頭裡的 Host 欄位區分。
Nginx
# /etc/nginx/conf.d/example.com.conf
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html index.php;
}
# 兜底:直接用 IP 存取,或未繫結的域名指向本機時直接斷開,不暴露任何站點
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 444;
}
sudo nginx -t && sudo systemctl reload nginx
Apache
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
</VirtualHost>
Debian/Ubuntu 上檔案放在 /etc/apache2/sites-available/,用 a2ensite example.com.conf 啟用後 systemctl reload apache2;RHEL 系放在 /etc/httpd/conf.d/,apachectl configtest 透過後 systemctl reload httpd。
IIS
IIS 管理器 → 選中網站 → 右側“繫結” → 新增:型別 http,IP 位址選“全部未分配”或指定公網 IP,連接埠 80,主機名填 example.com;再新增一條主機名為 www.example.com 的繫結。
放行防火牆並上 HTTPS
伺服器本機防火牆放行 80 和 443:
# Ubuntu / Debian
sudo ufw allow 80,443/tcp
# RHEL 系
sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload
# Windows
New-NetFirewallRule -DisplayName "Web 80/443" -Direction Inbound -Protocol TCP -LocalPort 80,443 -Action Allow
域名解析生效、80 連接埠可從公網存取後,就可以簽發證書。用 certbot 為 Nginx 申請並自動配置:
sudo certbot --nginx -d example.com -d www.example.com
certbot 的 Nginx 外掛預設走 HTTP-01 驗證,要求域名已經解析到這台伺服器且 80 連接埠對外可達,所以這一步必須放在解析和繫結之後。
備案:內地機房的前提條件
伺服器放在中國內地機房、用域名對外提供網站服務,必須先辦理 ICP 備案(非經營性網際網路資訊服務備案)。要點:
- 向誰辦:由為你提供伺服器的接入服務商(機房或伺服器租用商)在工信部 ICP 備案系統中提交,稽核機關是網站主辦者所在地的省級通訊管理局。你自己不能繞過接入商直接備案。
- 前提:域名已完成實名認證,域名持有者與備案主體一致;伺服器 IP 屬於這家接入商。
- 未備案的後果:接入商會對未備案域名的 Web 連接埠進行阻斷,網站打不開;解析本身不受影響。
- 順序:IP 可以先配好,解析也可以先加,但 Web 服務對外開放要等備案透過,並把備案號放到網站底部。
- 其他:經營性網站需要另外辦理增值電信業務經營許可(ICP 許可證);網站開通後還要辦理公安機關的聯網備案。稽核週期、材料清單以接入商和當地通訊管理局公佈的要求為準。
伺服器在香港、澳門、台灣或海外機房的,不需要 ICP 備案,解析加好就能存取;代價是內地使用者存取的延遲和線路品質取決於機房的回國線路。
綁好之後打不開怎麼排查
| 現象 | 常見原因 | 怎麼確認 |
|---|---|---|
| ping 閘道器不通 | 網口、IP/掩碼、MAC 繫結或 VLAN 問題 | ip -br addr 核對配置,聯絡機房核對 MAC 與連接埠 |
| 閘道器通、外網不通 | 閘道器位址錯,或機房連接埠未開通 | ip route 看預設路由,找機房確認 |
| 用 IP 能開啟、域名打不開 | 解析未生效或記錄值填錯 | dig +short 域名 看返回的 IP |
| 域名解析正確,但連線超時 | 本機防火牆未放行,或未備案被阻斷 | 在伺服器上 curl -I http://127.0.0.1 能通,則是外部攔截 |
| 開啟的是預設頁或別的站點 | server_name / ServerName 與域名不一致 | nginx -T 檢視實際載入的 server_name |
| 瀏覽器提示證書錯誤 | 證書域名不含當前存取的域名 | 證書要同時包含 example.com 和 www.example.com |
| 郵件被收件方拒收 | IP 沒有反向解析(PTR) | PTR 由 IP 的持有方設定,向機房或服務商提工單 |
租用伺服器時這些資訊在哪看
租用伺服器的使用者不需要自己規劃 IP:IP、閘道器、掩碼和 DNS 由服務商分配,通常在客戶面板的伺服器詳情頁列出;裝系統時服務商的映象一般已經把公網 IP 配進系統,你只需核對。做得完整的面板還能讓你自己重灌系統、進救援模式、開啟 VNC 控制檯,網路配錯把自己鎖在外面時,用控制檯改回來比提工單快得多(例如 Toplink DCIM 的客戶自助端就把這幾項放在一起)。託管自己的伺服器則相反,這些引數要在上架前向機房索取,並且提前配好帶外管理口,否則改錯一次網路配置就得去一趟機房。
常見問題
一台伺服器能繫結多個域名嗎?
可以。多個域名的 A 記錄都指向同一個 IP,再在 Nginx 或 Apache 裡為每個域名配置一個 server 或 VirtualHost,Web 伺服器按請求頭裡的 Host 欄位把請求分到對應站點,IP 數量不限制域名數量。
域名解析改了多久生效?
權威 DNS 上的記錄幾乎立即更新,使用者看到新結果要等各級遞迴 DNS 快取按舊記錄的 TTL 過期,通常幾分鐘到幾小時。計劃切換 IP 前一天把 TTL 調到 300 秒以內,切換後的等待時間就能壓到幾分鐘。更換 DNS 服務商(改 NS 記錄)的生效時間更長,通常以一兩天計。
換了服務商或換了 IP,備案要重新辦嗎?
備案主體和域名不變、只在同一家接入商內換 IP 的,向接入商報備變更即可;換到另一家接入商,要在新接入商處辦理接入備案(新增接入),原備案號保留,不用從頭備案。材料和流程以新接入商的要求為準。
伺服器只有 IPv6 位址,域名能用嗎?
能,新增 AAAA 記錄即可,但只有具備 IPv6 網路的使用者能存取。目前多數使用者仍依賴 IPv4,生產業務應同時配置 A 和 AAAA 記錄。