Nginx可以通过配置实现基于域名和路径的虚拟主机功能。下面我将详细介绍两种配置方式。
这是最常见的虚拟主机配置方式,通过不同的域名来区分不同的网站。
server {
listen 80;
server_name domain1.com www.domain1.com;
root /var/www/domain1;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name domain2.com www.domain2.com;
root /var/www/domain2;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server_name
指令指定该server块响应的域名当需要在同一域名下通过不同路径访问不同内容时,可以使用路径虚拟主机。
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location /blog {
alias /var/www/blog;
try_files $uri $uri/ /blog/index.html;
# 可以添加额外的配置
# proxy_pass http://localhost:3000;
}
location /app {
alias /var/www/app;
try_files $uri $uri/ /app/index.html;
}
}
location
指令定义路径规则alias
指定不同于root的目录可以同时使用域名和路径来区分不同的虚拟主机。
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3001;
}
location /v2 {
proxy_pass http://localhost:3002;
}
}
server {
listen 80;
server_name example.com www.example.com;
root /var/www/main;
location / {
try_files $uri $uri/ /index.html;
}
location /static {
alias /var/www/static;
expires 30d;
}
}
路径匹配优先级:
location = /path
location ^~ /path
location ~ /path
location /path
alias与root区别:
root
会将location路径附加到指定目录后alias
会完全替换location路径为指定目录测试配置:
nginx -t # 测试配置语法
nginx -s reload # 重新加载配置
性能考虑:
通过以上配置方式,您可以灵活地实现基于域名和路径的虚拟主机功能,满足各种网站架构需求。