Nginx端口解析问题

目录
  1. 问题
  2. 解决

问题

使用搜索引擎时发现多域名多端口解析时,出现某域名端口错位访问的情况。
具体表现如下:

nginx解析问题

1
2
3
4
5
6
7
8
9
# 端口644是二级域名blog下的端口
server {
listen 644;
server_name xx-blog.gelu.me;
location / {
root /usr/share/nginx/blog;
index index.html;
}
}

根据上述配置应该只有xx-blog.gelu.me:644才能打开blog页面,然后事实并非如此。其他域名如gelu.me:644也会打开博客页面。

解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 在原server前加入该server即可
server {
listen 644;
server_name _; # 下划线可换成其他合法字符串
return 404; # 返回你想返回的
}
server {
listen 644;
server_name xx-blog.gelu.me;
location / {
root /usr/share/nginx/blog;
index index.html;
}
}

原因是nginx会先根据listen来确定server,只有当多个listen同时满足时,才会进一步检查server_name.当配置中一个listen只对应一个server时,server_name等于没写。