Nginx報(bào)錯(cuò)“invalid server name or wildcard”的原因和解決方案
invalid server name or wildcard,
明明就是想用通配符匹配多個(gè)子域,結(jié)果保存不成功,本文就來一步步講清楚,幫你從根本上解決這個(gè)問題,需要的朋友可以參考下
很多人第一次給網(wǎng)站配置 HTTPS 時(shí),會(huì)遇到一個(gè)看似奇怪的報(bào)錯(cuò):
nginx: [emerg] invalid server name or wildcard "abc-*.example.cn" on 0.0.0.0:80
明明就是想用通配符匹配多個(gè)子域,結(jié)果保存不成功。
這其實(shí)不是語法寫錯(cuò),而是 Nginx 對通配符的使用范圍有限制。
本文就來一步步講清楚,幫你從根本上解決這個(gè)問題。
一、問題場景復(fù)現(xiàn)
假設(shè)你有兩個(gè)域名都在同一臺(tái)服務(wù)器上:
https://api.example.cn https://web.example.cn
你在 Nginx 配置時(shí),想著簡單點(diǎn),寫成:
server_name abc-*.example.cn;
保存時(shí)卻直接報(bào)錯(cuò):
nginx: [emerg] invalid server name or wildcard "abc-*.example.cn" nginx: configuration file test failed
這到底是哪里不對?
二、錯(cuò)誤原因:Nginx 不支持“中間通配”
Nginx 的通配符(*)規(guī)則是有限制的:
| 寫法 | 是否支持 | 示例 | 說明 |
|---|---|---|---|
*.example.cn | ? 支持 | 匹配 api.example.cn、web.example.cn | ? 通配符必須在最左邊 |
example.* | ? 支持 | 匹配 example.cn、example.com | ? 通配符可以在最右邊 |
abc-*.example.cn | ? 不支持 | 想匹配 abc-web.example.cn、abc-api.example.cn | ? 通配符不能出現(xiàn)在中間 |
也就是說,你寫的 abc-*.example.cn 是 非法的寫法。
Nginx 不知道如何去匹配這類模式,因此直接拒絕加載。
三、正確寫法與最佳實(shí)踐
根據(jù)你的實(shí)際需求,有幾種安全可行的方式:
方案一:直接列出多個(gè)域名(最推薦)
如果只是幾個(gè)固定域名,比如:
api.example.cn web.example.cn
那就直接列出來:
server_name api.example.cn web.example.cn;
這樣寫最清晰、兼容性最好,也不會(huì)報(bào)錯(cuò)。
方案二:使用標(biāo)準(zhǔn)通配符(同一層級)
如果你確實(shí)想讓一個(gè)配置同時(shí)匹配多個(gè)子域(例如網(wǎng)站很多個(gè)):
server_name *.example.cn;
這表示它可以匹配:
api.example.cnweb.example.cncdn.example.cn
但注意:
- 它只匹配一級子域(
xxx.example.cn), - 不會(huì)匹配多層結(jié)構(gòu)(如
a.api.example.cn)。
方案三:多個(gè)項(xiàng)目共用證書但分開配置
比如你同一臺(tái)服務(wù)器上部署了:
api.example.cnweb.example.cn
而另一臺(tái)服務(wù)器有:
shop.example.cn
這種情況下,你可以讓每臺(tái)服務(wù)器都使用同一張通配符證書(*.example.cn),
但在各自的 Nginx 里寫?yīng)毩⑴渲茫?/p>
在服務(wù)器 A
server_name api.example.cn web.example.cn;
在服務(wù)器 B
server_name shop.example.cn;
這樣能共用證書,又不會(huì)讓不同機(jī)器互相干擾。
四、完整可用示例(兩個(gè)域名在同一臺(tái)服務(wù)器)
下面這份配置可以直接用在寶塔或手動(dòng)編輯中:
# HTTP 自動(dòng)跳轉(zhuǎn) HTTPS
server {
listen 80;
server_name api.example.cn web.example.cn;
return 301 https://$host$request_uri;
}
# HTTPS 配置
server {
listen 443 ssl http2;
server_name api.example.cn web.example.cn;
ssl_certificate /www/server/panel/vhost/cert/example.cn/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/example.cn/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
add_header Strict-Transport-Security "max-age=31536000";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
# 根據(jù)訪問的域名切換網(wǎng)站目錄
if ($host = api.example.cn) {
root /www/wwwroot/api.example.cn/dist;
}
if ($host = web.example.cn) {
root /www/wwwroot/web.example.cn/dist;
}
index index.html index.htm;
try_files $uri $uri/ /index.html;
access_log /www/wwwlogs/https-access.log;
error_log /www/wwwlogs/https-error.log;
}
五、證書建議
為了同時(shí)支持多個(gè)子域名:
- 建議使用 通配符證書:
*.example.cn - 在簽發(fā)時(shí)選擇 DNS 驗(yàn)證 模式(HTTP 驗(yàn)證無法驗(yàn)證通配符)
- 同一張證書可以放在多臺(tái)服務(wù)器上使用,只要路徑一致即可。
六、總結(jié)
| 問題 | 原因 | 正確做法 |
|---|---|---|
| 報(bào)錯(cuò) “invalid server name or wildcard” | 通配符出現(xiàn)在中間(abc-*.example.cn) | 改為具體域名或標(biāo)準(zhǔn)通配(*.example.cn) |
| 想匹配多個(gè)域名 | 可以空格分開多個(gè)域名 | server_name api.example.cn web.example.cn; |
| 想共用 HTTPS 證書 | 使用 *.example.cn 通配符證書 | 多個(gè)子域共用 |
| 不同服務(wù)器不同站點(diǎn) | 各自獨(dú)立配置 | 不互相影響 |
結(jié)語
如果你是第一次配置 HTTPS,建議遵循這兩條經(jīng)驗(yàn)法則:
寫具體域名最安全;通配符只能在最左邊。
只要掌握這兩條,99% 的 Nginx 報(bào)錯(cuò)都能一次解決。
以上就是Nginx報(bào)錯(cuò)“invalid server name or wildcard”的原因和解決方案的詳細(xì)內(nèi)容,更多關(guān)于Nginx報(bào)錯(cuò)invalid server name or wildcard的資料請關(guān)注腳本之家其它相關(guān)文章!
- 解決systemctl reload nginx重啟Nginx服務(wù)報(bào)錯(cuò):Job for nginx.service invalid問題
- nginx報(bào)錯(cuò)upstream sent invalid header的解決
- Nginx 502 Bad Gateway報(bào)錯(cuò)原因解析與解決方案
- 解決Nginx啟動(dòng)報(bào)錯(cuò)Job for nginx.service failed because the control process exited with error code問題
- NGINX 報(bào)錯(cuò) 413 Request Entity Too Large的問題解決
- Nginx報(bào)錯(cuò)"Too many open files"問題的深度解析與解決方案
相關(guān)文章
前端將項(xiàng)目部署到服務(wù)器(Nginx)的完整步驟
最近寫了一個(gè)項(xiàng)目,需要進(jìn)行手機(jī)上測試,下面就需要前端自己將項(xiàng)目進(jìn)行部署,這篇文章主要給大家介紹了關(guān)于前端將項(xiàng)目部署到服務(wù)器(Nginx)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
詳解Nginx的超時(shí)keeplive_timeout配置步驟
Nginx 處理的每個(gè)請求均有相應(yīng)的超時(shí)設(shè)置,本文主要介紹了Nginx的超時(shí)keeplive_timeout配置步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
解決httpd占用80端口導(dǎo)致Nginx啟動(dòng)失敗報(bào)錯(cuò)的解決辦法
今天在建自己小網(wǎng)站時(shí)啟動(dòng)Nginx時(shí),發(fā)現(xiàn)其報(bào)下列錯(cuò)誤,意思是因?yàn)?0端口被占用導(dǎo)致Nginx啟動(dòng)失敗,所以本文小編給大家介紹介紹如何解決解決httpd占用80端口導(dǎo)致Nginx啟動(dòng)不成功報(bào)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)2023-11-11
當(dāng)Nginx所在服務(wù)器的磁盤空間滿時(shí)的影響以及如何避免這一問題
Nginx所在服務(wù)器的磁盤空間滿了,會(huì)導(dǎo)致日志無法寫入、緩存失效、反向代理請求異常等問題,嚴(yán)重時(shí)可能導(dǎo)致服務(wù)不可用,這篇文章主要介紹了當(dāng)Nginx所在服務(wù)器的磁盤空間滿時(shí)的影響以及如何避免這一問題,需要的朋友可以參考下2024-12-12
Nginx?部署及配置詳細(xì)步驟(附詳細(xì)代碼)
Nginx是一個(gè)web服務(wù)器也可以用來做負(fù)載均衡及反向代理使用,目前使用最多的就是負(fù)載均衡,這篇文章主要介紹了Nginx部署及配置的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11
nginx使用sticky基于cookie的會(huì)話保持方式
這篇文章主要介紹了nginx使用sticky基于cookie的會(huì)話保持方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

