ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

docker启动的nginx配置访问静态资源,访问失败的解决方法

2021-05-23 14:01:32  阅读:348  来源: 互联网

标签:nginx 访问 alias file logo docker root


背景

最近在搭建个人博客网站,想要给网站加一个logo,即配置一下nginx访问静态资源。这应该算是比较基础的一个配置,但是在配置过程当中也遇到了一些问题,尤其是找不到静态资源404的问题。

nginx是使用docker启动。

我的需求是,在root目录下的一个文件夹里建立一个file文件夹,配置nginx之后可以访问这个文件夹下的所有资源。目录结构为:/root/file/images/logo/logo.jpg

nginx配置访问静态资源

方法一:root

server{
    listen 7001;
    server_name localhost;
    location /file/ {
        root /root/;
    }
}

此时,通过浏览器访问http://127.0.0.1:7001/file/images/logo/logo.jpg,则访问服务器的文件是/root/file/images/logo/logo.jpg

方法二:alias

server{
    listen 7001;
    server_name localhost;
    location /file/ {
        alias /root/file/;
    }
}

此时,通过浏览器访问http://127.0.0.1:7001/file/images/logo/logo.jpg,则访问服务器的文件是/root/file/images/logo/logo.jpg


root和alias的区别

  1. root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
  2. root的处理结果是:root路径+location路径。alias的处理结果是:使用alias路径替换location路径
  3. alias是一个目录别名的定义,root则是最上层目录的定义。
  4. 一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。而root则可有可无。
  5. alias只能位于location块中。(root可以不放在location中)

问题

1.nginx访问静态资源时网页出现 403 forbidden

在用nginx做静态资源服务器,访问Linux下的一个图片时网页中出现403 forbidden。

先来看下http状态码403啥意思?

表示资源不可用。服务器理解客户的请求,但拒绝处理它,通常由于服务器上文件或目录的权限设置导致的WEB访问错误

简单说就是无权访问该资源,为了确定原因我又查看了nginx的错误日志:

failed (13: Permission denied)

发现 Permission denied这个短语很常见啊,就是权限被拒绝。

解决思路有两个

  1. 访问的路径无权限。使用chmod 777 文件路径,意思是,所属用户、所在组、其他用户对该资源都有读写可执行的权利。
  2. 如果访问的root目录下的资源的,把nginx.conf 全局块的user值改成root
    在这里插入图片描述

2.docker启动的nginx配置访问静态资源,访问失败404

按照上述的nginx配置访问静态资源应该是没问题的,但就是访问不到。显示是404,但感觉路径设置的应该没错呀。

经过重重的问题排查,才想到,原来nginx是docker启动的,访问的静态资源必须是在docker容器里边的才可以,否则肯定找不到。之前的目录/root/file/并没有挂载到docker容器里面,所以肯定找不到。而且nginx的conf文件进行路径映射的时候,也应该映射容器里的文件路径

这里要么是把/root/file映射到容器了,要么就是更换映射路径。

我在启动nginx容器的时候,将宿主机的/root/project目录映射到容器的/project了。所以我在宿主机的/root/project目录下建立file文件,nginx的conf文件配置路径为/project/file即可。

更换需求:
/root/project目录下的一个文件夹里建立一个file文件夹,配置nginx之后可以访问这个文件夹下的所有资源。目录结构为:/root/project/file/images/logo/logo.jpg。nginx代理容器内的目录为/project/file

总之,修改后的配置文件为:

root方式


server {

    listen       8001;
    server_name  localhost;

    location /file/ {
        root /project/;
    }

}

alias方式

server {

    listen       8001;
    server_name  localhost;

    location /file/ {
        alias /project/file/;
    }

}

注意事项

  1. 如果是访问/root目录下的资源,nginx需要配置nginx.conf 全局块的user值改成root
  2. 如果是docker启动的nginx,一定要注意映射目录,nginx只能访问到容器内的目录,所以,最好提前进行目录挂载。

标签:nginx,访问,alias,file,logo,docker,root
来源: https://blog.csdn.net/qq_42937522/article/details/117194272

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有