在现代Web开发中,Nginx 作为一款高性能的 HTTP 和反向代理服务器,被广泛应用于各种网站和应用中。其中,配置多域名的能力是它的一大亮点。本文将详细介绍如何在 Nginx 中配置多个域名,帮助你在同一个服务器上托管多个网站。
多域名配置指的是在同一个服务器上,通过 Nginx 配置文件,使多个域名指向同一个 IP 地址,并且每个域名可以独立配置不同的网站内容。这种配置方式不仅节省了服务器资源,还方便了网站管理和维护。
在开始配置多域名之前,确保你已经完成了以下准备工作:
安装 Nginx:确保你的服务器上已经安装了 Nginx。如果没有安装,可以使用以下命令进行安装(以 Ubuntu 为例):
sudo apt update
sudo apt install nginx
域名解析:确保你的域名已经解析到服务器的 IP 地址。你可以在域名注册商的管理面板中进行 DNS 解析设置。
网站文件:确保你已经准备好了每个域名对应的网站文件,并且这些文件已经上传到服务器的指定目录。
Nginx 的配置文件通常位于 /etc/nginx/sites-available/ 目录下。每个域名可以有一个独立的配置文件。假设我们要配置两个域名:example1.com 和 example2.com。
example1.com 的配置文件sudo nano /etc/nginx/sites-available/example1.com
在文件中添加以下内容:
server {
listen 80;
server_name example1.com www.example1.com;
root /var/www/html/example1.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
example2.com 的配置文件sudo nano /etc/nginx/sites-available/example2.com
在文件中添加以下内容:
server {
listen 80;
server_name example2.com www.example2.com;
root /var/www/html/example2.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
创建配置文件后,需要将它们链接到 sites-enabled 目录,以便 Nginx 能够加载这些配置。
sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/
在重新加载 Nginx 之前,建议先测试配置文件是否有语法错误。
sudo nginx -t
如果测试结果显示没有错误,可以继续进行下一步。
sudo systemctl reload nginx
重新加载 Nginx 后,配置文件中的更改将生效。
为了提高网站的安全性,建议为每个域名配置 HTTPS。你可以使用 Let's Encrypt 提供的免费 SSL 证书。
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example1.com -d www.example1.com
sudo certbot --nginx -d example2.com -d www.example2.com
Certbot 会自动修改 Nginx 配置文件,添加必要的 SSL 配置。
为了确保所有请求都通过 HTTPS 访问,可以在 Nginx 配置文件中添加重定向规则。
example1.com 的配置文件server {
listen 80;
server_name example1.com www.example1.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example1.com www.example1.com;
ssl_certificate /etc/letsencrypt/live/example1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem;
root /var/www/html/example1.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
example2.com 的配置文件server {
listen 80;
server_name example2.com www.example2.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example2.com www.example2.com;
ssl_certificate /etc/letsencrypt/live/example2.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example2.com/privkey.pem;
root /var/www/html/example2.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
你可以为每个域名配置自定义的错误页面,以提升用户体验。
example1.com 的配置文件server {
listen 443 ssl;
server_name example1.com www.example1.com;
ssl_certificate /etc/letsencrypt/live/example1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem;
root /var/www/html/example1.com;
index index.html index.htm;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location / {
try_files $uri $uri/ =404;
}
location = /404.html {
internal;
}
location = /50x.html {
internal;
}
}
example2.com 的配置文件server {
listen 443 ssl;
server_name example2.com www.example2.com;
ssl_certificate /etc/letsencrypt/live/example2.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example2.com/privkey.pem;
root /var/www/html/example2.com;
index index.html index.htm;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location / {
try_files $uri $uri/ =404;
}
location = /404.html {
internal;
}
location = /50x.html {
internal;
}
}
通过以上步骤,你可以在同一个 Nginx 服务器上配置多个域名,并为每个域名提供独立的网站内容。此外,通过配置 HTTPS 和自定义错误页面,可以进一步提升网站的安全性和用户体验。
如果你在配置过程中遇到任何问题,可以参考 Nginx 官方文档或社区论坛,获取更多帮助和支持。希望本文对你有所帮助,祝你在 Nginx 多域名配置的道路上顺利前行!