使用Nginx做图片服务器时候,配置之后图片访问一直是 404.
我的配置是
- location /api/v1/upload {
- root /opt/edu/upload;
- }
location /api/v1/upload {
root /opt/edu/upload;
}
文件放在
/opt/edu/upload 目录下。
访问
http://localhost/api/v1/upload/api/v1/upload/course/logo/44242acc58f2465c8daf53a2a8b1ec70_add.png
一直是404
日志也是接收到了。但是就是404
10.20.5.247 - - [09/May/2017:13:35:57 +0800] “GET /api/v1/upload/course/logo/44242acc58f2465c8daf53a2a8b1ec70_add.png HTTP/1.1” 404 571 ”-“ “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36” ”-“
10.20.5.247 - - [09/May/2017:13:35:57 +0800] "GET /api/v1/upload/course/logo/44242acc58f2465c8daf53a2a8b1ec70_add.png HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" "-"
最后发现配置的问题。配置静态路径的两种方式。之前静态的都是直接在URL里写根目录,
所以一直没发现。今天写了一个有前缀的URL,就出现了。
RootCause:
root 配置的意思是,会在root配置的目录后跟上URL,组成对应的文件路径。
即我的访问
http://localhost/api/v1/upload/api/v1/upload/course/logo/44242acc58f2465c8daf53a2a8b1ec70_add.png
最终去寻找的文件路径是
/opt/edu/upload/api/v1/upload/course/logo/44242acc58f2465c8daf53a2a8b1ec70_add.png
而我想要的是
/opt/edu/upload/course/logo/44242acc58f2465c8daf53a2a8b1ec70_add.png
而Nginx提供了另外一个静态路径配置 :
alias
alias与root区别
- 官方root
1 2 3 4
Sets the root directory for requests. For example, with the following configuration location /i/ { root /data/w3; }
The /data/w3/i/top.gif file will be sent in response to the “/i/top.gif” request
- 官方alias
1 2 3 4
Defines a replacement for the specified location. For example, with the following configuration location /i/ { alias /data/w3/images/; }
on request of “/i/top.gif”, the file /data/w3/images/top.gif will be sent.
当访问/i/top.gif时,root是去/data/w3/i/top.gif请求文件,alias是去/data/w3/images/top.gif请求,也就是说
root响应的路径:配置的路径+完整访问路径(完整的location配置路径+静态文件)
alias响应的路径:配置路径+静态文件(去除location中配置的路径)
最终解决访问:
修改配置为
- location /api/v1/upload {
- alias /opt/edu/upload/;
- }
location /api/v1/upload {
alias /opt/edu/upload/;
}
- location /api/v1/upload {
- alias /opt/edu/upload/;
- }
location /api/v1/upload {
alias /opt/edu/upload/;
}
注意
- 使用alias时目录名后面一定要加“/”
- 一般情况下,在location /中配置root,在location /other中配置alias
<div id="digg" articleid="71473793">
<dl id="btnDigg" class="digg digg_disable" onclick="btndigga();">
<dt>顶</dt>
<dd>1</dd>
</dl>
<dl id="btnBury" class="digg digg_disable" onclick="btnburya();">
<dt>踩</dt>
<dd>0</dd>
</dl>
</div>
<div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);" target="_blank"> </a> </div>
<div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);" target="_blank"> </a></div>
<script type="text/javascript">
function btndigga() {
$(".tracking-ad[data-mod='popu_222'] a").click();
}
function btnburya() {
$(".tracking-ad[data-mod='popu_223'] a").click();
}
</script>
<div style="clear:both; height:10px;"></div>
<div class="similar_article">
<h4><a name="t4" target="_blank"></a></h4>
<div class="similar_c" style="margin:20px 0px 0px 0px">
<div class="similar_c_t">
相关文章推荐
</div>
<div class="similar_wrap tracking-ad" data-mod="popu_36" style="max-height:195px;">
<ul class="similar_list fl">
<li>
<em>•</em>
<a href="http://blog.csdn.net/tanga842428/article/details/73518720" title="Nginx 配置静态文件404问题" strategy="BlogCommendFromCsdn" target="_blank" style="width: 290px;">Nginx 配置静态文件404问题</a>
</li>
<li>
<em>•</em>
<a href="http://moqiang02.iteye.com/blog/2112667" title="nginx上支持.htaccess伪静态的配置实例" strategy="BlogCommendFromCsdn" target="_blank" style="width: 290px;">nginx上支持.htaccess伪静态的配置实例</a>
</li>
<li>
<em>•</em>
<a href="http://blog.csdn.net/u010098331/article/details/50885086" title="nginx.conf配置文件详解" strategy="BlogCommendFromCsdn" target="_blank" style="width: 290px;">nginx.conf配置文件详解</a>
</li>
<li>
<em>•</em>
<a href="http://zzc1684.iteye.com/blog/2274421" title="nginx 伪静态 重定向 包括域名、目录、文件等方法" strategy="BlogCommendFromCsdn" target="_blank" style="width: 290px;">nginx 伪静态 重定向 包括域名、目录、文件等方法</a>
</li>
<li>
<em>•</em>
<a href="http://blog.csdn.net/qq_33571718/article/details/51280608" title="nginx反向代理服务,因配置文件错误导致访问资源时出现404" strategy="BlogCommendFromCsdn" target="_blank" style="width: 290px;">nginx反向代理服务,因配置文件错误导致访问资源时出现404</a>
</li>
</ul>
<ul class="similar_list fr">
<li>
<em>•</em>
<a href="http://andyaqu.iteye.com/blog/2084023" title="nginx缓存 ngx_cache_purge清除模块 清除失败404错误找不到文件 " strategy="BlogCommendFromCsdn" target="_blank" style="width: 290px;">nginx缓存 ngx_cache_purge清除模块 清除失败404错误找不到文件 </a>
</li>
<li>
<em>•</em>
<a href="http://blog.csdn.net/u010363836/article/details/46875433" title="nginx配置文件" strategy="BlogCommendFromCsdn" target="_blank" style="width: 290px;">nginx配置文件</a>
</li>
<li>
<em>•</em>
<a href="http://zhengdl126.iteye.com/blog/489720" title="【汇总】Nginx.conf配置,安全优化" strategy="BlogCommendFromCsdn" target="_blank" style="width: 290px;">【汇总】Nginx.conf配置,安全优化</a>
</li>
<li>
<em>•</em>
<a href="http://blog.csdn.net/u012567911/article/details/50825903" title="Nginx配置文件详细说明" strategy="BlogCommendFromCsdn" target="_blank" style="width: 290px;">Nginx配置文件详细说明</a>
</li>
<li>
<em>•</em>
<a href="http://blog.csdn.net/mchdba/article/details/53309604" title="Nginx 访问静态资源报错404 Not Found 的问题解决过程" strategy="BlogCommendFromCsdn" target="_blank" style="width: 290px;">Nginx 访问静态资源报错404 Not Found 的问题解决过程</a>
</li>
</ul>
</div>
</div>
</div>