Nginx虚拟主机配置
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 ~^www\d+\.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; }