Nginx通过虚拟主机(server blocks)可以在一台服务器上托管多个网站。以下是配置多个网站入口的详细方法:
这是最常见的多网站托管方式,通过不同的域名来区分网站:
# 第一个网站 - 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;
}
}
# 第二个网站 - example.org
server {
listen 80;
server_name example.org www.example.org;
root /var/www/example.org;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
使用不同端口来区分网站:
server {
listen 8080;
server_name example.com;
root /var/www/example.com;
index index.html;
}
server {
listen 8081;
server_name example.org;
root /var/www/example.org;
index index.html;
}
server {
listen 80;
server_name ~^(www\.)?(?<domain>.+)$;
root /var/www/$domain;
index index.html;
}
server {
listen 80 default_server;
server_name _;
return 444; # 关闭连接
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
root /var/www/example.com;
index index.html;
}
目录结构:
/var/www/
├── example.com
│ └── index.html
├── example.org
│ └── index.html
└── ...
配置文件组织:
/etc/nginx/nginx.conf
/etc/nginx/sites-available/example.com
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
配置检查与重载:
nginx -t # 测试配置是否正确
nginx -s reload # 重载配置
日志分离:
server {
...
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
# /etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/public;
index index.php index.html index.htm;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/example.com/public;
index index.php index.html index.htm;
# 其他SSL配置...
}
通过以上配置,您可以轻松地在单台Nginx服务器上托管多个网站。每个网站可以有独立的配置、日志和资源目录。