Nginx配置虚拟目录[原创整理]
时间:2010-06-05 来源:hkebao
Nginx配置虚拟目录
时间:2010-06-05
需求:
提供一个JSP的虚拟主机。
我计划用nginx提供80服务。后端带Resin跑多个虚拟主机。虚拟主机是可以配置给多域名解析。
之前我们有配置过resin 的虚拟主机的。也有配置其虚拟目录其配置是这样的
<host id="www.aaa.com">
<root-directory>D:\myweb\proj1</root-directory>
<web-app id="/test" document-directory="app1/">
<welcome-file-list>login.jsp</welcome-file-list>
<character-encoding>UTF-8</character-encoding>
<stderr-log path='D:\myweb\proj1\app1\stderr.log' rollover-size="2mb" />
<stdout-log path='D:\myweb\proj1\app1\stdout.log' rollover-size='2mb' />
</web-app>
<web-app id="/test2" document-directory="app2/">
<welcome-file-list>login.jsp</welcome-file-list>
<character-encoding>UTF-8</character-encoding>
<stderr-log path='D:\myweb\proj1\app2\stderr.log' rollover-size="2mb" />
<stdout-log path='D:\myweb\proj1\app2\stdout.log' rollover-size='2mb' />
</web-app>
</host>
<host id="www.bbb.com">
<root-directory>D:\myweb\proj2</root-directory>
<web-app id="/test" document-directory="app1/">
<welcome-file-list>login.jsp</welcome-file-list>
<character-encoding>UTF-8</character-encoding>
<stderr-log path='D:\myweb\proj2\app1\stderr.log' rollover-size="2mb" />
<stdout-log path='D:\myweb\proj2\app1\stdout.log' rollover-size='2mb' />
</web-app>
<web-app id="/test2" document-directory="app2/">
<welcome-file-list>login.jsp</welcome-file-list>
<character-encoding>UTF-8</character-encoding>
<stderr-log path='D:\myweb\proj2\app2\stderr.log' rollover-size="2mb" />
<stdout-log path='D:\myweb\proj2\app2\stdout.log' rollover-size='2mb' />
</web-app>
</host>
解释一下:定义了两个虚拟主机这样的话就可以绑定两个域名即一个IP绑定多个域名。一般的空间提供商们也是这样来配置的。而且同一级域名下面还可以配置虚拟目录。比如像同样的sina.cn域名下面可以定义如下的两个虚拟目录www.sina.cn/blog/
www.sina.cn/news
这样即在同一个域名下面跑两个虚拟目录!
现在来看一下nginx如何来配置这个呢?
上一篇文章我们介绍了nginx配置虚拟主机的方法现在来配置一下如何配置虚拟目录
比如说我们的虚拟主机域名为http://www.aaa.com/ 我现在想要实现这种效果
http://www.aaa.com/app1/
http://www.aaa.com/app2/
如何配置虚拟目录呢?
资料引入:
最基本的区别:alias指定的目录是准确的,root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录。另外,根据前文所述,使用alias标签的目录块中不能使用rewrite的break。
说不明白,看下配置:
location /abc/ {
alias /home/html/abc/;
}
在这段配置下,http://test/abc/a.html就指定的是/home/html/abc/a.html。这段配置亦可改成
location /abc/ {
root /home/html/;
}
这样,nginx就会去找/home/html/目录下的abc目录了,得到的结果是相同的。
但是,如果我把alias的配置改成:
location /abc/ {
alias /home/html/def/;
}
那么nginx将会从/home/html/def/取数据,这段配置还不能直接使用root配置,如果非要配置,只有在/home/html/下建立一 个 def->abc的软link(快捷方式)了。
一般情况下,在location /中配置root,在location /other中配置alias是一个好习惯。
至于alias和root的区别,我估计还没有说完全,如果在配置时发现奇异问题,不妨把这两者换换试试。
心得:location / {} 里面使用root关键字。而在其他的URI配置中使用alias
Alias 是准确定位。跟URI无关
ROOT 与URI有关。
虚拟主机目录:D:\myweb\proj3
虚拟目录1 :D:\myweb\proj3\app1
虚拟目录2 :D:\myweb\proj3\app2
来看我们的配置
server {
listen 80;
server_name www.aaa.com;
root D:\myweb\proj3;
location / {
index index.html index.htm;
}
location /app1/{
alias D:\myweb\proj3\app1\;
index index.html index.htm;
break;
}
location /app2/{
alias D:\myweb\proj3\app2\;
index index.html index.htm;
break;
}
location ~*\.(gif|jpg|png)$ {
expires 30d;
}
}
这样的话我们就可以配置出来像:http://www.aaa.com/app2/ 这样的目录值的!
笔记:
推荐配置在 /app1/ 里面使用alias哦!不要使用root了