下面是“Nginx 虚拟主机配置的三种方式(基于域名)”的完整攻略。
1. 背景介绍
当一个 Nginx 服务器需要托管多个网站时,我们需要为每个网站配置虚拟主机。在基于域名的虚拟主机配置中,不同域名的请求将被指向到不同的网站。本文将介绍 Nginx 虚拟主机配置的三种方式。
2. 步骤
2.1 方式一:基于 server_name 直接匹配域名
server {
listen 80;
server_name example.com www.example.com;
root /usr/share/nginx/html/example.com;
index index.html;
}
代码说明:
server_name
指令用于指定虚拟主机对应的域名,可以指定多个域名。root
指令用于指定该虚拟主机的网站根目录。index
指令用于指定默认显示的文件名,这里表示默认显示 index.html 文件。
2.2 方式二:基于正则表达式匹配域名
server {
listen 80;
server_name ~^(?<subdomain>.+)\.example\.com$;
root /usr/share/nginx/html/$subdomain;
index index.html;
}
代码说明:
~
符号用于表示后面字符串为正则表达式。(?<subdomain>.+)
表示匹配子域名,并将其保存在名为 subdomain 的变量中。example\.com$
表示匹配以 example.com 结尾的域名。root
和index
指令的含义同方式一。
举例:
如果我们访问 sub.example.com,这个请求将会被匹配并且 sub 将会作为变量保存,然后 Nginx 会将请求映射到 /usr/share/nginx/html/sub 目录。
2.3 方式三:基于 map 指令匹配域名
map $http_host $root {
default /usr/share/nginx/html;
~^(?<subdomain>.+)\.example\.com$ /usr/share/nginx/html/$subdomain;
}
server {
listen 80;
server_name example.com *.example.com;
root $root;
index index.html;
}
代码说明:
map
指令用于创建一个变量映射表。default
表示默认值。~
符号和后面的正则表达式同方式二。$http_host
表示 HTTP 请求头中的 Host 字段,也就是访问的域名。*.example.com
表示所有以 example.com 结尾的二级域名都将匹配。
举例:
如果我们访问 sub.example.com,首先 Nginx 会根据 map 映射表得到 /usr/share/nginx/html/sub,然后将请求映射到该目录。
3. 总结
以上是基于域名的 Nginx 虚拟主机配置的三种方式。这些方式涉及了不同的知识点,理解和灵活运用它们可以帮助您更好地管理您的网站。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nginx 虚拟主机配置的三种方式(基于域名) - Python技术站