当前位置:首页>正文

请问一下nginx中auth.php文件的默认路径在哪 如何解决nginx ssi解析include路径问题

2023-04-14 23:03:18 互联网 未知

请问一下nginx中auth.php文件的默认路径在哪?

1) nginx反向代理缓存的目录为/usr/local/nginx/cache;

2) 缓存文件的key和其它信息放在一个10M的共享内存中,命名为one;

3) 缓存文件最大占用1G磁盘空间;

如何解决nginx ssi解析include路径问题

这种语法格式在apache下木有问题,在nginx就使用不起
nginx 下 这种就能用,说明一点nginx解析的时候 不支持”..”路径!
问题应该可以解决 ,毕竟nginx是开源的。
顺便也验证了我之前文章里《工作5年多了,对所处行业环境及技能的一些认识!》提到的为什么开源比闭源的强的原因?
花了点时间 看了一下nginx 的源码 ,如下两个重要的文件表示是ssi模块
src/http/modules/ngx_http_ssi_filter_module.h
src/http/modules/ngx_http_ssi_filter_module.c 这个文件里 的函数 ngx_http_ssi_include 应该就是解释include指令
这个函数 里面 NGX_HTTP_LOG_UNSAFE ,NGX_HTTP_SSI_ERROR 表示的nginx错误信息处理。
那么就找到对应的函数ngx_http_parse_unsafe_uri 在src/http/ngx_http_parse.c里函数具体如下:

gx_int_t
ngx_http_parse_unsafe_uri(ngx_http_request_t *r, ngx_str_t *uri,
ngx_str_t *args, ngx_uint_t *flags)
{
u_char ch, *p
size_t len

len = uri->len
p = uri->data

if (len == 0 || p[0] == ?) {
goto unsafe
}

if (p[0] == . && len == 3 && p[1] == . && (ngx_path_separator(p[2]))) {
goto unsafe
}

for ( /* void */ len len--) {

ch = *p

if (usual[ch >> 5] & (1 << (ch & 0x1f))) {
continue
}

if (ch == ?) {
args->len = len - 1
args->data = p
uri->len -= len

return NGX_OK
}

if (ch == ) {
goto unsafe
}

if (ngx_path_separator(ch) && len > 2) {

/* detect "/../" */

if (p[0] == . && p[1] == . && ngx_path_separator(p[2])) {
goto unsafe
}
}
}

return NGX_OK

unsafe:

if (*flags & NGX_HTTP_LOG_UNSAFE) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"unsafe URI "%V" was detected", uri)
}
return NGX_ERROR
}

看到 这个 /* detect “/../” */ 注释 你就会明白为什么 不能执行这样的路径 ../../test/test.htm
nginx: 这样的路径存在安全隐患的。
安全的作法不修改nginx,调程序本身的路径,这里就不讨论了,目前的站点木有办法,要用就需要修改ssi模块,再重新编译nginx
修改如下:
src/http/modules/ngx_http_ssi_filter_module.c 这个文件函数 ngx_http_ssi_include里注释掉

if (ngx_http_parse_unsafe_uri(r, uri, &args, &flags) != NGX_OK) {
return NGX_HTTP_SSI_ERROR
}

如何让Nginx支持中文文件名

首先得让你的系统有中语语言包:
设置前可以执行:locale 看一下,如果显示是en_US.UTF-8,即是正常,不用按下面的步骤设置。如果显示其他编码需要按如下步骤设置。
CentOS
编辑/etc/sysconfig/i18n 文件,内容修改为:(可以使用vi、nano或winscp图形管理软件,依个人口味选择)
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
保存,重启系统。
Debian
apt-get install -y locales
dpkg-reconfigure locales
执行dpkg-reconfigure locales后会出现如下对话框:
用向下的方向键找到en_US.UTF-8 UTF-8,按空格选择,再按回车键。
再按向下键选择en_US.UTF-8,再按回车键确认,重启系统。
Ubuntu
编辑/etc/default/locale文件,修改内容为(没有的话创建一个):
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
保存,再执行:
locale-gen en_US en_US.UTF-重启系统。
执行:locale 看一下是否显示是en_US.UTF-8,如果报错,请在本文反馈。按以上步骤设置好后即可支持中文,可以上传中文的文件或中文的目录。
在nginx.conf文件里配置的字符集也是utf-server {
listen 80
server_name test.cn
root /data
index index.html index.jsp
charset utf-8
……
ay%PMG U0
客户端用的是secureCRT,用的字符集改为utf-8,用uft-8后再用rz上传文件,在ie下中文可以正常显示了。

随便看看