运行在docker里的nginx添加虚拟目录并设置默认页面

Posted 左直拳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行在docker里的nginx添加虚拟目录并设置默认页面相关的知识,希望对你有一定的参考价值。

其实是很简单的设置,但由于不懂docker,走了许多弯路。

一、虚拟目录设置规则无效

我想将一些静态资源部署到测试服务器上,方便开发和演示。测试服务器是阿里云虚拟机,linux,上面装有有一个nginx,可以完成这个小凯丝。结果自认为对nginx已经有了一定了解,这种简单任务手到擒来,不料搞到鸡毛鸭血。配置好虚拟目录的映射后,系统死活不认,无法访问,自动跳到登录页面。摘录配置如下:

server 
	listen      80;
	server_name 192.168.0.248;

	location / 
     	root /home/admin_ui/dist;
     	index /mscodereact/index.html;
     	try_files $uri $uri/ /mscodereact/index.html;
	

	location /favicon.ico 
     	root /home/admin_ui/dist;
   		try_files $uri/ /mscodereact/favicon.ico;
	

	#这就是我想添加的虚拟目录
	#请注意其路径与 “/”指向的路径并不相同
	location /javapubzy/ 
		index index.html;
 		alias /home/beian/javapubzy/;
     	try_files $uri $uri/ /javapubzy/index.html;
	

在网上查找来,查找去,访问这个http://192.168.0.248/javapubzy,都是跳到了登录页面。究其原因,是因为系统路径指向无效,于是做了默认处理,采用了第一条设置规则:

	location / 
     	root /home/admin_ui/dist;
     	index /mscodereact/index.html;
     	try_files $uri $uri/ /mscodereact/index.html;
	

其中,try_files $uri $uri/ /mscodereact/index.html;,意思是,系统先看有没有$uri这个文件,没有则看有没有$uri这个文件夹(即$uri/,后面的斜杠代表文件夹)。如果没有,则跳到/mscodereact/index.html,这是一个应用的首页,需要登录。

二、规则无效的原因是路径无法访问

	#这就是我想添加的虚拟目录
	#请注意其路径与 “/”指向的路径并不相同
	location /javapubzy/ 
		index index.html;
 		alias /home/beian/javapubzy/;
     	try_files $uri $uri/ /javapubzy/index.html;
	

经过反复测试,发现将文件夹移到根目录"/"所在的位置,即可正常访问,放到别的地方就不行。想起之前同事的提示,醒悟过来。我猜测,这个nginx是装在docker里的,安装的时候,只映射了一个特定的文件夹,只有将内容放在其中,才有可能识别。

由于我目前在docker里如何安装nginx并不了解,所以无法扯更多,可参考如下文章:
docker中nginx的默认路径位置和映射目录启动

三、虚拟目录设置规则解释

	location / 
     	root /home/admin_ui/dist;
     	index /mscodereact/index.html;
     	try_files $uri $uri/ /mscodereact/index.html;
	

	location /favicon.ico 
     	root /home/admin_ui/dist;
   		try_files $uri/ /mscodereact/favicon.ico;
	

	location /javapubzy/ 
		index index.html;
 		alias /home/admin_ui/dist/javapubzy/;
     	try_files $uri $uri/ /javapubzy/index.html;
	

这3个规则放在一起,结合起来看利于比较。可以发现映射路径有 root 和 alias 两种方式。

1、root与alias的区别
1)root指向虚拟目录所在的父文件夹,而alias直接指向虚拟目录所在文件夹

2)同一个虚拟路径,如果既设置了root方式,又设置了alias方式,则以alias方式为准

2、默认页面

index index.html;

不要用下面这个,这个是列出目录下的文件,不安全。

autoindex on;

3、try_files

try_files $uri $uri/ /javapubzy/index.html;

系统先看有没有$uri这个文件,没有则看有没有$uri这个文件夹(即$uri/,后面的斜杠代表文件夹)。如果没有,则跳到/javapubzy/index.html

四、其他一些干扰问题

1、nginx里面,http和https是分开设置的。因此映射虚拟目录的话,要分别设置

2、设置完nginx后,利用浏览器测试结果,最好清一下浏览器缓存,否则很可能看不到效果,导致以为设置无效,让人迷惑

以上是关于运行在docker里的nginx添加虚拟目录并设置默认页面的主要内容,如果未能解决你的问题,请参考以下文章

在虚拟机上安装Docker并运行Nginx

群晖docker安装IYUUAutoReseed方法

Dockers安装nginx

如何设置nginx的虚拟域名及访问目录

Tomcat 里的「Matrix」 - 虚拟主机介绍

docker 安装 nginx 并配置反向代理