基于域名的虚拟主机(Virtual Host)允许你在同一台服务器上通过不同的域名来托管多个网站。以下是详细的配置步骤:
创建网站目录结构
sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/html
设置目录权限
sudo chown -R $USER:$USER /var/www/example1.com/html
sudo chown -R $USER:$USER /var/www/example2.com/html
sudo chmod -R 755 /var/www
创建测试页面
echo "<h1>Welcome to Example1.com</h1>" > /var/www/example1.com/html/index.html
echo "<h1>Welcome to Example2.com</h1>" > /var/www/example2.com/html/index.html
创建虚拟主机配置文件
在 /etc/nginx/sites-available/
目录下为每个域名创建配置文件:
example1.com 配置 (/etc/nginx/sites-available/example1.com
):
```nginx
server {
listen 80;
listen [::]:80;
server_name example1.com www.example1.com;
root /var/www/example1.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
} ```
example2.com 配置 (/etc/nginx/sites-available/example2.com
):
```nginx
server {
listen 80;
listen [::]:80;
server_name example2.com www.example2.com;
root /var/www/example2.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
} ```
启用虚拟主机配置
创建符号链接到 sites-enabled
目录:
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 restart nginx
SSL/TLS 配置(HTTPS)
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example1.com www.example1.com;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
root /var/www/example1.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
HTTP 重定向到 HTTPS
server {
listen 80;
listen [::]:80;
server_name example1.com www.example1.com;
return 301 https://$server_name$request_uri;
}
自定义错误页面
error_page 404 /404.html;
location = /404.html {
root /var/www/example1.com/html;
internal;
}
日志配置
access_log /var/log/nginx/example1.com.access.log;
error_log /var/log/nginx/example1.com.error.log;
nginx -t
测试配置语法配置不生效
server_name
是否正确sites-enabled
目录权限问题
SSL证书问题
通过以上配置,你可以轻松地在同一台Nginx服务器上托管多个基于不同域名的网站。