五个常见的 Nginx 配置错误

Nginx配置文件语法错误的报错与修复 Nginx配置文件语法错误排查指南 本文总结了Nginx配置常见的8类语法错误及解决方案,包括:符号缺失、指令拼写错误、块嵌套错误等。文章提供了错误定位三步法(语法检查、日志查看、调试工具)和详细的修复示例,如补充分号、纠正拼写、调整块结构等。还介绍了复杂场景处理(包含文件错误、第三方模块问题)和预防性维护策略(配置备份、语法检查钩子)。最后通过SSL配置和负载均衡等实战案例,帮助运维人员快速诊断和修复Nginx配置问题。 阅读详情

作为互联网上最常用的 Web 服务器之一,Nginx 因轻巧、模块化并且有对用户友好的配置格式而广受欢迎。一旦 Nginx 出现错误配置,那么你的网站就很危险。Detectify 分析了从 GitHub 下载的近 50000 个不重复的 Nginx 配置文件,发现了一些常见的错误配置:

根目录位置丢失

off-by-slash

不安全的变量使用

原始后端响应读取

merge_slashes设置为 off

根目录位置丢失

server {
    
    root /etc/nginx;

    location /hello.txt {
            try_files $uri $uri/ =404;
            proxy_pass http://127.0.0.1:8080/;
    }
}
复制代码

root 指令指定 Nginx 的根文件夹。在上面的示例中,根文件夹是/etc/nginx,这意味着我们可以访问该文件夹中的文件。上面的配置没有针对/ (location / {...})的位置,只有/hello.txt的位置。因此,root 指令会被设置为全局,这意味着对/的请求会将你带到本地路径/etc/nginx。

像GET /nginx.conf这样简单的请求都能显示存储在/etc/nginx/nginx.conf中 Nginx 配置文件的内容。如果将根设置为/etc,则对/nginx/nginx.conf的GET请求将显示配置文件。在某些情况下,访问者可能会访问其他配置文件、访问日志甚至 HTTP 基本身份验证的加密凭据。

在我们收集的近 50000 个 Nginx 配置文件中,最常见的根路径如下:

 经常配置错误的 Nginx 根路径

off-by-slash

server {
    
    listen 80 default_server;

    server_name _;

    location /static {
            alias /usr/share/nginx/static/;
    }

    location /api {
            proxy_pass http://apiserver/v1/;
    }
}
复制代码

这个配置错误指的是由于缺少一个斜杠,所以有可能沿路径上移一步。OrangeTsai 在 Blackhat 演讲 ““Breaking Parser Logic!””中让这项技术广为人知。

在这个演讲中,他展示了如何结合一条缺少尾斜杠的location指令与一条alias指令,来读取 Web 应用程序的源代码。前端培训鲜为人知的是,它还可以与其他指令(例如proxy_pass)一起使用。我们来分解一下究竟发生了什么事情,以及为什么它能起作用。

 location /api {
            proxy_pass http://apiserver/v1/;
    }
复制代码

如果一个 Nginx 服务器运行能在 server 访问的以下配置,则可以假定访问者只能访问http://apiserver/v1/下的路径。

http://server/api/user -> http://apiserver/v1//user

当请求http://server/api/user时,Nginx 将首先规范化 URL。然后,它会查看前缀/api是否与 URL 匹配,本例中是匹配的。

然后,服务器从 URL 中删除该前缀,保留/user路径。再将此路径添加到proxy_pass URL 中,从而得到最终 URL http://apiserver/v1//user

请注意,这个 URL 中存在双斜杠,因为 location 指令不以单斜杠结尾,并且proxy_pass URL 路径以单斜杠结尾。大多数 Web 服务器会将http://apiserver/v1//user标准化为http://apiserver/v1/user,这意味着即使配置错误, 所有内容仍将按预期运行,并且可能不会引起注意。请求http://server/api../可以利用这种错误配置,这将导致 Nginx 请求 URL http://apiserver/v1/../,其标准化为http://apiserver/。这可能产生的影响取决于利用这种错误配置可以达到的效果。例如,这可能导致 Apache 服务器状态通过 URL http://server/api../server-status公开,或者可能让不希望公开访问的路径可访问。

Nginx 服务器配置错误的一个迹象是,当 URL 中的一个斜杠被删除时,服务器仍会返回相同的响应。例如,如果http://server/api/user和http://server/apiuser返回相同的响应,则服务器可能容易受到攻击。这将导致发送以下请求:

http://server/api/user -> http://apiserver/v1//user http://server/apiuser -> http://apiserver/v1/user

不安全的变量使用 一些框架、脚本和 Nginx 配置会不安全地使用 Nginx 存储的变量。这可能会导致诸如 XSS、绕过 HttpOnly 保护、信息泄露,甚至在某些情况下的 RCE 之类的问题。

SCRIPT_NAME

像下面这样的配置:

location ~ \.php$ {
            
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass 127.0.0.1:9000;
    }
复制代码

主要问题是 Nginx 会将所有 URL 发送到以.php结尾的 PHP 解释器,即使该文件在磁盘上不存在。这是 Nginx 创建的“陷阱和常见错误”文档中提到的,在许多 Nginx 配置中都常见的错误。如果这个 PHP 脚本试图基于SCRIPT_NAME定义一个基本 URL,则将发生 XSS。

 使用 $uri 可导致 CRLF 注入

与 Nginx 变量有关的另一个错误配置是使用uri或uri或uri或document_uri代替requesturi。request_uri。requestu​ri。uri和documenturi包含标准化的URI,而Nginx中的normalization包括对URI解码的URL。Volema发现,在Nginx配置中创建重定向时经常会使用document_uri包含标准化的 URI,而 Nginx 中的normalization包括对 URI 解码的 URL。Volema 发现,在 Nginx 配置中创建重定向时经常会使用documentu​ri包含标准化的URI,而Nginx中的normalization包括对URI解码的URL。Volema发现,在Nginx配置中创建重定向时经常会使用uri,结果导致 CRLF 注入。

一个易受攻击的 Nginx 配置的示例如下:

location / {

return 302 https://example.com$uri;
}
复制代码

HTTP 请求的换行符为\r(回车)和\n(换行)。对换行符进行 URL 编码将导致以下字符表示形式%0d%0a。如果将这些字符包含在对配置错误的服务器的一个请求中(例如http://localhost/%0d%0aDetectify:%20clrf),则该服务器将使用一个名为Detectify的新标头进行响应,因为 $uri 变量包含 URL 解码的换行符。

  • HTTP/1.1 302 Moved Temporarily
  • Server: nginx/1.19.3
  • Content-Type: text/html
  • Content-Length: 145
  • Connection: keep-alive
  • Location: example.com/
  • Detectify: clrf

Any 变量

在某些情况下,用户提供的数据可以视为 Nginx 变量。目前尚不清楚为什么会发生这种情况,但如这份H1报告所示,这种情况并不罕见或不容易测试。如果搜索错误消息,我们可以看到它是在中SSI过滤器模块找到的,表明这是由 SSI 引起的。

一种测试方法是设置一个引用标头值:

$ curl -H ‘Referer: bar’ http://localhost/foo$http_referer | grep ‘foobar’

我们扫描了这种错误配置,发现了几个实例,用户可以在其中打印 Nginx 变量的值。我们发现易受攻击实例的数量有所下降,这可能表明这个漏洞已经做了修补。

原始后端响应读取

使用 Nginx 的proxy_pass,可以拦截后端创建的错误和 HTTP 标头。如果你要隐藏内部错误消息和标头以便 Nginx 处理,这个方法会非常有用。如果后端回答一个错误,Nginx 将自动提供一个自定义错误页面。但如果 Nginx 无法理解这是一个 HTTP 响应怎么办?

如果一个客户端向 Nginx 发送了一个无效的 HTTP 请求,则该请求将按原样转发到后端,后端将使用其原始内容来应答。然后,Nginx 将无法理解无效的 HTTP 响应,而将其转发给客户端。想象一个这样的 uWSGI 应用程序:

def application(environ, start_response): start_response('500 Error', [('Content-Type', 'text/html'),('Secret-Header','secret-info')]) return [b"Secret info, should not be visible!"]

并在 Nginx 中使用以下指令:

http { error_page 500 /html/error.html; proxy_intercept_errors on; proxy_hide_header Secret-Header; }

如果后端的响应状态大于 300,proxy_intercept_errors将提供一个自定义响应。在上面的 uWSGI 应用程序中,我们将发送一个500 Error,Nginx 将拦截该错误。

proxy_hide_header可以自解释;它将从客户端隐藏任何指定的 HTTP 标头。

如果我们发送一个普通的 GET 请求,则 Nginx 将返回:

  • HTTP/1.1 500 Internal Server Error
  • Server: nginx/1.10.3
  • Content-Type: text/html
  • Content-Length: 34
  • Connection: close

但是,如果我们发送一个无效的 HTTP 请求,例如:

  • GET /? XTTP/1.1
  • Host: 127.0.0.1
  • Connection: close

我们将收到以下答复:

  • XTTP/1.1 500 Error
  • Content-Type: text/html
  • Secret-Header: secret-info
  • Secret info, should not be visible!

merge_slashes 设置为 off

默认情况下,merge_slashes指令设置为“on”,这是一种将两个或多个正斜杠压缩为一个的机制,因此///将变为/。如果 Nginx 用作反向代理,并且被代理的应用程序容易受到本地文件包含内容的影响,则在请求中使用额外的斜杠可能会留出恶意利用空间。

我们发现 33 个 Nginx 配置文件的merge_slashes设置为“off”。

总结 Nginx 是一个非常强大的 Web 服务器平台,很好理解为什么它会被广泛使用。但是,灵活的配置意味着你更容易犯错误,而这些错误可能会对安全性产生影响。请不要使用这些常见的错误配置,以免攻击者轻易地入侵你的网站。

Nginx常见错误及解决方式 Nginx是一款高性能的Web服务器和反向代理服务器,广泛应用于各种网站和应用程序中。在使用Nginx的过程中,可能会遇到一些常见错误。本文将详细列出一些常见Nginx错误及其处理方法,帮助开发者快速定位和解决问题。 阅读详情

相关推荐

【STK】手把手教你利用STK进行进行光电红外仿真02-STK/EOIR模块属性之一 传感器选项设置

EOIR传感器可以从空间几何属性、光谱属性、光学属性、辐射属性四个方面进行设置,并且可以设置信号传播路径中的大气特性,包括大气模型、气溶胶模型、气象学可见性和大气湿度。在定义EOIR传感器时,需要Sensor——Definition属性页中,将Sensor Type设置为EOIR。单击下面的按钮打开传感器的EOIR配置页,可以对传感器的属性进行配置,此外,还可以在场景中视情况添加相关的中心体。路径辐射损耗影响上述特性的计算,计算的结果考虑了传感器、目标位置的影响,但是还没考虑地球临边背景的影响。

weixin_44184852的博客 3147

Nginx知识点介绍

文章目录一、简介及使用场景二、Nginx与高并发三、Nginx负载均衡及性能优化四、Nginx性能优化五、Nginx与Apache 一、简介及使用场景 1.简介 Nginx是基于Http的高并发(异步),低消耗,热部署,高拓展,高可用的反向代理服务器。 注:正向代理是客户端,反向是服务器端 2.使用场景 代替Apache作为http server,反向代理服务器,实现负载均衡,虚拟主机。 二、Nginx与高并发 Nginx实现高并发原理:基于事件模型。每进来一个 request ,会有一个 worker 进

tttalk的博客 3185

LabVIEW-to-FX3U.rar_FX3U与labview_LABVIEW FX3U_Labview FX3U_PLC读

LabVIEW与FX系列PLC FX3U通讯范例,读取和写入D地址数据,跟PLC实际测试OK

Nginx13】Nginx学习:HTTP核心模块(十)Types、AIO及其它配置

Nginx学习:HTTP核心模块(十)Types、AIO及其它配置今天学习的内容也比较简单,主要的是 Types 相关的配置,另外还会了解一下 AIO 以及部分没有特别大的分类归属的配置指令的使用。后面的内容都是 HTTP 核心模块中比较小或者比较简单的部分了。有很多配置项其实我们平常并不常用,甚至很多在学习之前我都不知道有它们的存在。做为扩展知识眼界来说,非常有意义,也能够学习到很多之前并不了解...

硬核项目经理 2096

常见五个 Nginx 配置错误

作为互联网上最常用的 Web 服务器之一,Nginx 因轻巧、模块化并且有对用户友好的配置格式而广受欢迎。一旦 Nginx 出现错误配置,那么你的网站就很危险。Detectify 分析了从 GitHub 下载的近 50000 个不重复的 Nginx 配置文件,发现了一些常见错误配置: 根目录位置丢失 off-by-slash 不安全的变量使用 原始后端响应读取 merge_slashes设置为 off 根目录位置丢失 server { r

zjjcchina的博客 2243

五个常见Nginx配置错误,看了都说好!

点击上方 "编程技术圈"关注,星标或置顶一起成长后台回复“大礼包”有惊喜礼包!每日英文Sometimes, the same thing, we can go to th...

程序员小乐 1399

nginx 403

解决 Nginx 403 错误通常涉及识别具体原因后进行针对性的解决步骤。

m0_73256973的博客 1950

小白必看:Nginx出现403错误的5个简单解决方法

最近在折腾Nginx的时候,经常遇到403 Forbidden的错误页面,作为新手真的是一头雾水。经过一番摸索和请教大佬,终于总结出几个最常见的原因和解决办法,分享给同样被这个问题困扰的朋友们。它的在线编辑器可以直接修改配置文件,一键部署就能看到效果,不用折腾本地环境,出错也能快速回滚。对于想学习Nginx的朋友来说,这种即时反馈的体验真的很友好。简单来说,就是Nginx没有权限访问你请求的文件或目录。Nginx的报错信息其实很详细,慢慢积累经验后,这些错误都能轻松解决。或者明确允许目录列表。

GoldEagle19的博客 1287

CentOS 7 Nginx 错误集合

为什么80%的码农都做不了架构师?>>> ...

weixin_34242819的博客 465

Nginx新手必看:服务启动失败的5个常见原因

Nginx服务启动失败的原因多种多样,但通过系统化的排查和正确的工具,问题通常不难解决。希望这篇文章能帮你少走弯路,顺利搭建自己的Web服务。如果有任何疑问,欢迎在评论区交流!

ThunderstormLynx23的博客 461

Nginx常见错误及处理方法

404 bad request 一般原因:请求的Header过大 解决方法:配置nginx.conf相关设置 client_header_buffer_size16k; large_client_header_buffers464k; 413 Request Entity Too Large 一般原因:一般出现在上传文件 解决方法:配置nginx.conf相关设置 clien...

sinat_38036426的博客 1万+

nginx 常见错误

摘要:本文总结了Nginx常见错误及解决方法,包括:1)启动报错libpcre.so缺失的软链接修复;2)400错误需调整client_header_buffer_size等参数;3)502错误需优化PHP执行超时设置;4)413上传限制需修改client_max_body_size;5)504超时需调整fastcgi缓冲区及超时参数;6)日志关闭方法;7)权限不足警告需设置SUID;8)SSL模块依赖OpenSSL安装;9)缺失gd库的修复方案。针对不同错误提供了详细的配置参数调整建议,涵盖Nginx运行

1236

Nginx常见错误及解决方法

1、Nginx 常见启动错误 有的时候初次安装nginx的时候会报这样的错误 sbin/nginx -c conf/nginx.conf 报错内容:sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory 启动时如果报异常 error while loading shared libraries: libpcre

任我行的博客 1万+

面试官问烂了的Nginx,这10道面试题带你快速掌握Nginx的精髓

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,也是目前百度、京东、新浪、网易、腾讯、淘宝等大型互联网公司的必备网站服务器。因此,也是目前这些大厂的面试必考题目之一,本文我们为大家带来了精选的10道Nginx面试题,但愿对正在找工作的你,或是正在学Nginx的小伙伴有所帮助。 1.什么是 Nginx? Nginx是一个web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。 2.使用“反向代理服务器”的优点是什么?

f5465245的博客 1186

nginx常见问题

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器

weixin_46651125的博客 5934

Nginx 去除多斜杠 (//)

某些历史遗留问题,可能链接中有出现双斜杠或者是多斜杠现象,需要去掉多余的只保留1个斜杠。 Nginx直接再server或者是对应的位置加上下面两行配置即可 server { listen 80; server_name localhost; location / { proxy_pass http://nginx-A; } //去除多斜杠的配置 merge_

qq_33601179的博客 5126

Nginx常见面试题

Nginx常见面试题1、解释一下什么是Nginx?2、请列举Nginx的一些特性3、解释Nginx如何处理HTTP请求4、在Nginx中,如何使用未定义的服务器名称来阻止处理请求?5、使用“反向代理服务器”的优点6、解释Nginx服务器上的Master和Worker进程7、如何通过不同于80的端口开启Nginx?8、请解释是否有可能将Nginx错误替换为502错误、503?9、在Nginx中,解...

ghw15221836342的博客 2027

nginx:在Nginx中,如何在URL中保留双斜杠

分级控制:根据业务需求分location配置监控指标:监控异常URL请求模式渐进式方案阶段一:仅关闭关键API的斜杠合并阶段二:实施安全防护规则阶段三:全链路监控和告警性能调优# 对静态资源保持默认合并通过本文的深度解析,读者应该能够构建完整的Nginx URL处理知识体系,在面试和实际架构设计中游刃有余。记住,技术决策需要平衡业务需求、安全要求和性能考量。

weixin_43290370的博客 841

HTTP状态码详解

转载自:http://tool.oschina.net/commons?type=5 里面还有许多常用表哦! 状态码 含义 100 客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。 101

rising__star的专栏 512

前端开发-Nginx配置报错汇总

nginx报错:500 Internal Server Error

tw2496907023的博客 1952
上一篇: Spring Bean的生命周期(详细解读)
下一篇: 10个实用的Python库,用过后保准你会爱上
千锋IT教育
博客等级 码龄4年 469粉丝 304原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值