Nginx虚拟主机(也称为server blocks)允许您在一台服务器上托管多个网站。以下是配置Nginx虚拟主机的详细步骤:
创建网站目录
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com
创建示例页面
nano /var/www/example.com/html/index.html
添加内容:
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
创建虚拟主机配置文件
sudo nano /etc/nginx/sites-available/example.com
添加以下内容:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
启用虚拟主机
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
测试配置并重启Nginx
sudo nginx -t
sudo systemctl restart nginx
server {
listen 443 ssl;
listen [::]:443 ssl;
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/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.php index.html index.htm;
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 80;
server_name app.example.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
测试配置时报错
sudo nginx -t
查看具体错误权限问题
sudo chown -R www-data:www-data /var/www/example.com
虚拟主机不生效
重定向循环
/var/log/nginx/error.log
通过以上配置,您可以灵活地在单台Nginx服务器上托管多个网站或应用。