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

网友投稿 573 2022-08-22

运行在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; }}

在网上查找来,查找去,访问这个{ 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里的,安装的时候,只映射了一个特定的文件夹,只有将内容放在其中,才有可能识别。

改为

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

其实这一步纯属多余。将文件夹javapubzy放置到指定的根目录后,无须做任何设置,即可访问。即使设置了,也不生效。如:

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

在这里,想用j来代替javapubzy,反而无法访问,纯属画蛇添足。

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

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

/ { 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后,利用浏览器测试结果,最好清一下浏览器缓存,否则很可能看不到效果,导致以为设置无效,让人迷惑

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python函数的非固定参数(python定义无参数函数)
下一篇:mysql字符集问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~