nginx服务器ssi包含问题
笔者公司最近,做一类静态页面,需要加载一些公共的部分,所以就想到用ssi include包含
开发的时候,在线下用的是apache环境,用这个标签很顺利。
但是是放到线上以后,就出问题了
就会出现找不到路径,前提是nginx开启了 ssi,
会出现一个问题 不能用相对路径,用绝对路径是能包含的,所以笔者花了 好长一段时间,
去寻找答案,
结果表明:nginx开启ssi的相对路径 必须要重新编译 nginx组件
找到这篇blog:http://www.cnblogs.com/jyb2014/p/4026654.html
好久没接触nginx了,今天帮同事解决一个客户的问题,顺便记录下;
version : nginx-1.6.2
问题描述:
客户的files.shtml里面include一个网站的头部文件( <!–# include file=”../../woqu.htm”–>),采用的是相对路径,这样的写法在apache里面可以正常访问,但是在nginx里面不能正常加载
日志上提示:
unsafe URI "../../woqu.html" was detected while sending response to client
解决方法:
修改源码重新编译nginx
vi src/http/modules/ngx_http_ssi_filter_module.c
注视掉下面这个判断:
/*
if (ngx_http_parse_unsafe_uri(r, uri, &args, &flags) != NGX_OK) {
return NGX_HTTP_SSI_ERROR;
}
*/
然后安装三部曲,reload一下就搞定了。
顺带说下,部分人在nginx里面为了安全会添加规则禁止访问隐藏文件(点 .开头),如:
location ~ (.*\.sh?$|/\.|.*\.log?$)
{
return 403;
}
然后就会跟我们上面改的起冲突,因为include ../../test.html 这样的时候,其实也是正常请求这样的一个URL,“..”也是点开头,然后你就会看到一个403的页面,好恶心。
测试发现,是可以的,感谢@jyb2014

浙公网安备 33010602011771号