nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可
先看一个最简单的虚拟主机配置示例
server {
listen 80; #监听的是80端口
server_name www.wl.com; #指定这个虚拟主机名为www.wl.com,当用户访问www.wl.com时,就有这个虚机主机进行处理
location / { #因为所有请求都是/开头的,所以这行表示匹配所有请求
index index.html; #指定此虚拟主机的默认首页为index.html
root /home/www/host_a/; #指定此虚拟主机的物理根目录为/home/www/host_a/ 即指定 location / 在那个物理目录
}
}
虚拟主机名可以有4种格式:
(1)准确的名字,例如此例中的a.test.com
(2)*号开头的,例如 *.test.com
(3)*号结尾的,例如 mail.*
(4)正则表达式形式,例如
server_name ~^wwwd+.test.com$;
注意,使用正则表达式形式时,必须以'~'开头
server_name也可以同时指定多个,例如:
server_name test.com www.test.com *.test.com;
这时优先级为:
(1)确切的名字
(2)最长的以*起始的通配符名字
(3)最长的以*结束的通配符名字
(4)第一个匹配的正则表达式名字
案例
(1)对两个域名配置相应的虚拟主机,指定不同的目录
a.test.com -> /home/www/a
b.test.com -> /home/www/b
配置:
server {
listen 80;
server_name a.test.com;
autoindex on; #开启网站目录文件列表功能,访问目录时列出其中的文件列表,默认不开启
index index.html;
root /home/www/a/;
}
server {
listen 80;
server_name b.test.com;
index index.html;
root /home/www/b/;
location /(self)/ { #禁止对self目录的访问
deny all;
}
}
(2)对不同访问目录指定不同物理目录
server {
listen 80;
server_name ~^d+.d+.d+.d+$; #使用正则格式,这里表示接受任何ip
index index.html index.htm;
root /home/lg/www/;
location /share {
root /home/lg/Downloads;
}
location ^~ /Videos {
root /home/lg/;
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
allow all;
}
location ^~ /html5 {
root /home/lg/workspace/nodejs/;
index index.html index.htm;
}
location = /404.html {
root /usr/share/nginx/html;
}
}
Nginx默认是不允许列出整个目录的。如需此功能:
autoindex_exact_size
#默认为on,显示出文件的确切大小,单位是bytes
#改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime
#默认为off,显示的文件时间为GMT时间。
#改为on后,显示的文件时间为文件的服务器时间
allow all;
#允许所以访问
如:
location /images {
root /var/www/nginx-default/ibugaocn;
autoindex on;
}