在建站过程中,往往需要在一个服务器发布多个网站,这些网站需要绑定不同的域名,并且都使用 80 端口来访问。下面就这一需求,来说一下解决方案及 nginx 具体配置。

禁用 ip 访问

因为一个服务器部署多个站点,而且都是 80 端口,所以需要先禁用 ip 访问,只支持指定域名访问。禁用 IP 访问有两种方法:

  1. 在 nginx.conf 中 http 节点下显示指定 default_server,添加如下配置:
1
2
3
4
5
6
# 匹配不到配置文件的主机名默认匹配项, 不允许Ip+不匹配域名的访问。
server {
listen 80 default_server;
server_name _;
return 404;
}
  1. 在 server 下添加如下代码,仅限制 IP 不限制其他设置解析的主机名,方便后期增加解析。
1
2
3
if ($host ~ "\d+\.\d+\.\d+\.\d") {
return 404;
}

配置效果如下图所示:

重启 nginx 配置

1
nginx -s reload

然后再用 ip 访问自己的网站,会显示如下内容:

给网站指定域名

将 server 中的 server_name 配置成指定的域名,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 80;
# listen [::]:80;
server_name xxx.xxx.com;
root /usr/local/zhangh/blog;
index index.html;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /404.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

多个网站分别指定不同域名,且共用80端口

这个就比较简单了,就是添加多个server对象,listen端口都是80,但是root目录和server_name不同。整体配置如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 # 禁用ip访问
server {
listen 80 default_server;
server_name _;
return 404;
}

# 设置域名网站1
server {
listen 80;
# listen [::]:80;
server_name xxx.com;
root /usr/local/zhangh/blog;
index index.html;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /404.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

# 设置域名网站2
server {
listen 80;
# listen [::]:80;
server_name xxx.xxx.xxx.com;
root /usr/local/zhangh/othersite;
index index.html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}