要在Nginx上配置同一端口(通常是80或443)服务多个不同域名的网站,可以使用Nginx的"server_name"指令来实现基于名称的虚拟主机。
在Nginx配置目录(通常是/etc/nginx/conf.d/
或/etc/nginx/sites-available/
)中为每个网站创建单独的配置文件,或者在一个配置文件中包含多个server
块。
每个server
块对应一个域名,使用server_name
指令指定该块对应的域名。
# 第一个域名 example.com 的配置
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
# 第二个域名 test.com 的配置
server {
listen 80;
server_name test.com www.test.com;
root /var/www/test.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
对于HTTPS(443端口),配置类似,但需要指定SSL证书:
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /path/to/example.com.crt;
ssl_certificate_key /path/to/example.com.key;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 443 ssl;
server_name test.com www.test.com;
ssl_certificate /path/to/test.com.crt;
ssl_certificate_key /path/to/test.com.key;
root /var/www/test.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
可以设置一个默认服务器来处理不匹配任何server_name
的请求:
server {
listen 80 default_server;
server_name _;
return 444; # 关闭连接
}
测试Nginx配置是否正确:
sudo nginx -t
重新加载Nginx配置:
sudo systemctl reload nginx
这种基于名称的虚拟主机技术允许你在同一IP地址和端口上托管多个网站,是现代Web服务器的基础功能之一。