Nginx可以通过配置虚拟主机(server blocks)来实现多个域名共享同一台服务器资源。以下是详细的配置方法:
通常Nginx的主配置文件是/etc/nginx/nginx.conf
,但最佳实践是为每个站点创建单独的配置文件,存放在/etc/nginx/conf.d/
或/etc/nginx/sites-available/
目录中。
sudo nano /etc/nginx/conf.d/example1.com.conf
sudo nano /etc/nginx/conf.d/example2.com.conf
# example1.com.conf
server {
listen 80;
server_name example1.com www.example1.com;
root /var/www/example1.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
# example2.com.conf
server {
listen 80;
server_name example2.com www.example2.com;
root /var/www/example2.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 443 ssl;
server_name example1.com www.example1.com;
ssl_certificate /etc/ssl/certs/example1.com.crt;
ssl_certificate_key /etc/ssl/private/example1.com.key;
root /var/www/example1.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name example1.com www.example1.com;
return 301 https://$host$request_uri;
}
server {
listen 80;
server_name *.example.com;
root /var/www/example.com;
index index.html index.htm;
# 使用变量获取子域名部分
if ($host ~* ^([a-z0-9-]+)\.example\.com$) {
set $subdomain $1;
}
location / {
try_files $uri $uri/ =404;
}
}
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
sudo nginx -t
sudo systemctl reload nginx
# 或
sudo service nginx reload
域名解析问题:
/etc/hosts
文件(本地测试时)权限问题:
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com
默认服务器问题:
server {
listen 80 default_server;
server_name _;
return 444; # 关闭连接
}
缓存问题:
通过以上配置,你可以轻松实现Nginx服务器上多个域名的独立访问,每个域名可以有自己的配置、SSL证书和内容目录。