让nginx 的ssi支持include相对路径

好久没接触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的页面,好恶心。

时间: 2024-08-29 22:45:30

让nginx 的ssi支持include相对路径的相关文章

nginx配置ssi实现页面拆分

在做一个网站时,页面上会有很多重复的内容,每个页面写一遍很冗余,修改时还容易遗漏,所以可以把公共的部分写好,放在单独的HTML中,用时引用就行了. nginx配置ssi可以将单个页面拆分成一个一个的小页面,访问页面时将多个子页面合并渲染输出,通过cms去管理这些小页面,实现当要更改部分页面内容时只需要更改具体某个小页面. 1. 什么是SSI SSI:Server Side Include,是一种基于服务端的网页制作技术,大多数(尤其是基于Unix平台)的web服务器如Netscape Enter

nginx虚拟机配置(支持php)

由于本人水平有限,以下记录仅作参考. 下面贴出我的一份正常运行的nginx服务器虚拟机配置./usr/local/nginx/conf/vhost/www.xsll.com.conf 1 server { 2 listen 80; #虚拟主机监听端口 3 server_name www.xsll.com; #虚拟主机名称 4 5 #charset koi8-r; 6 #access_log /var/log/nginx/log/host.access.log main; 7 8 root /ho

Nginx安装lua支持

Nginx安装lua支持 需要LuaJIT-2.0.4.tar.gz,ngx_devel_kit,lua-nginx-module 1.下载安装LuaJIT-2.0.4.tar.gz wget -c http://luajit.org/download/LuaJIT-2.0.4.tar.gz tar xzvf LuaJIT-2.0.4.tar.gz cd LuaJIT-2.0.4 make install PREFIX=/usr/local/luajit #注意环境变量! export LUAJ

SSI简介 与 nginx开启SSI

Server Side Include : 服务器端嵌入 原理 : 将内容发送到浏览器之前,可以使用“服务器端包含 (SSI)”指令将文本.图形或应用程序信息包含到网页中.因为包含 SSI 指令的文件要求特殊处理,所以必须为所有 SSI 文件赋予 SSI文件扩展名.默认扩展名是 .stm..shtm 和 .shtml 主要有以下几种用用途: 1.显示服务器端环境变量<#echo> 2.将文本内容直接插入到文档中<#include> 3.显示WEB文档相关信息<#flastmo

nginx中SSI问题的研究

最近感觉挺爽的,这个项目团队没有一个专门做PHP的,我是第一个进来做PHP(当然还有前端)的,哈哈,我会设计修改出适合我们业务的PHP框架,哈哈,感觉会学到很多东西的样子,前几天在组内20几个前辈面前讲php框架,以及跟大牛们探讨适合我们的php框架,感觉表达能力太差了,知道的东西表达不清楚,还要我的导师去帮我表达,这里感谢下我的导师于洪磊(简称磊哥),磊哥简直就是我的偶像,我没见过那么有深度的程序员,技术牛B这是肯定的了,对技术外的了解超出了我的想象,磊哥看的书很多,涉猎很广泛,尤其在历史和文

配置nginx使之支持pathinfo

phalcon项目,oneinstack环境lnmp.配置文件:/usr/local/nginx/conf/vhost/dldh.ccc.conf自动生成的. 问题:除首页外,其他都打不开,且样式文件也打不开.http://dldh.ccc/index.php/back/css/bootstrap.min.csshttp://dldh.ccc/index.php/backend/index/index都报: Access denied. 解决办法:作修改如下. server { listen 8

nginx 增加 spdy 支持并测试

安装spdy nginx从1.5开始是支持spdy格式的. http://nginx.org/en/docs/http/ngx_http_spdy_module.html#example 最新的nginx当然也支持,是spdy3. 编译的时候直接增加参数: –with-http_spdy_module ,即可. spdy配置 如果安装成功了spdy,直接修改nginx配置即可 server { listen 443 ssl spdy; ssl_certificate server.crt; ss

nginx 安装并支持upstream监控

nginx安装并支持upstream和tcp代理模块 yum groupinstall "Development tools" yum -y install pcre-devel openssl openssl-devel git wget http://nginx.org/download/nginx-1.4.5.tar.gz tar zxvf nginx-1.4.5.tar.gz cd nginx-1.4.5 git clone https://github.com/yaoweib

Let&#39;s Encrypt: 为CentOS/RHEL 7下的nginx安装https支持-具体案例

环境说明: centos 7 nginx 1.10.2 前期准备 软件安装 yum install -y epel-release yum install -y certbot 创建目录及链接 方法1:在网站根目录下创建一个.well-known的目录 方法2: mkdir -p /usr/local/nginx/cert/.well-known ln -s /usr/local/nginx/cert/.well-known /data/www/example.com/.well-known l