php+apache+nginx 更換域名
- ? 第 1 步:確認到底是誰在監聽 80/443
- ? 第 2 步:按監聽者修改配置
- 🔹 場景 A:Apache 直接監聽 80/443
- 🔹 場景 B:Nginx 監聽 80/443,反向代理到 Apache
- ? 第 3 步:DNS & 本地 hosts 指向新域名
- ? 小結流程圖
入職新公司做全棧開發,上個開發人員沒有留下任何文檔和源碼,本身又不是php開發,領導給了一個需求,那就是更換域名,
“老域名”在 Nginx 里找不到,大概率是 Apache 在 80/443 端口監聽,而 Nginx 只是反向代理或根本沒用到。
要更換域名,只需弄清「誰真正在監聽 80/443」并修改對應配置即可。下面給出排查-修改-驗證三步法。
? 第 1 步:確認到底是誰在監聽 80/443
# 1. 看哪個進程占用了 80 或 443
sudo netstat -tlnp | grep ':80\|:443'
# 或(新系統)
sudo ss -tlnp | grep ':80\|:443'
典型輸出
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/httpd
- httpd → Apache 在監聽
- nginx → Nginx 在監聽
? 第 2 步:按監聽者修改配置
🔹 場景 A:Apache 直接監聽 80/443
(Nginx 只是靜態反向代理或根本沒用到)
-
找到 Apache 虛擬主機文件
- Ubuntu/Debian:
/etc/apache2/sites-enabled/
- CentOS/RHEL:
/etc/httpd/conf.d/
或/etc/httpd/conf/extra/httpd-vhosts.conf
- Ubuntu/Debian:
-
把舊域名全部替換為新域名
<VirtualHost *:80>ServerName new.comServerAlias www.new.comDocumentRoot /home/www/new.com/htdocs </VirtualHost>
-
重載 Apache
sudo systemctl reload apache2 # Debian/Ubuntu sudo systemctl reload httpd # CentOS/RHEL
🔹 場景 B:Nginx 監聽 80/443,反向代理到 Apache
-
在 Nginx 里找到
server_name
指令grep -R "old\.com" /etc/nginx/ /usr/local/nginx/conf/
沒結果說明所有
.conf
文件里確實沒有;可能:- 老配置放在
sites-available
卻 沒 link 到sites-enabled
- 老配置在自定義路徑,如
/www/server/nginx/conf/vhost/old.com.conf
(寶塔/OneinStack 常見)
- 老配置放在
-
修改或新增 server 塊
server {listen 80;server_name new.com www.new.com;root /home/www/new.com/htdocs;location ~ \.php$ {fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 或 127.0.0.1:9000fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;} }
-
重載 Nginx
sudo nginx -t && sudo systemctl reload nginx
? 第 3 步:DNS & 本地 hosts 指向新域名
- 域名解析:去 DNS 面板把
A
記錄指向服務器 IP。 - 本地測試(可選):
echo "123.123.123.123 new.com www.new.com" | sudo tee -a /etc/hosts
? 小結流程圖
┌──────────────┐
│ 誰是 80/443 監聽者?│
└────┬─────────┘│┌───┴────────────┬─────────────────┐│ Apache 監聽 │ Nginx 監聽 ││ 修 Apache 配置 │ 修 Nginx 配置 ││ reload Apache │ reload Nginx │└────────────────┴─────────────────┘