点赞
评论
收藏
分享
举报
调试Nginx的配置
发表于2020-08-30 09:01

浏览 1.2k

转载:https://segmentfault.com/a/1190000000703319 原文作者:yexiaoba

注:该文原文是 Debugging Nginx Configuration

默认,Nginx 仅仅记录标准错误日志到 Nginx 默认的 error 文件中,或是被 error_log 指令指定的文件中。

我们可以控制许多方面的错误日志,这将帮助我们调试我们 Nginx 配置文件。

重要:对于 Nginx 配置文件的任何改变,你都必须测试和重载 Nginx 的配置文件来让变更生效。在 Ubuntu 系统,你可以简单的运行 nginx -t && service nginx reload 命令。

在我们继续进行之前

在你复制粘贴任何 Nginx 配置之前,确保你移除了你不想要的代码。并且,每次你升级 Nginx,也请使用最新版 Nginx 提供的更新你的配置文件。

在我们开始之前,请详细阅读这些官方文章:通常的 Nginx 陷阱if 是恶魔location 指令和 Nginx 请求过程。你可能会单独使用它们来解决你的问题。

注:5 星推荐上面的几篇官方文章。

好吧,看起来你需要一些严谨的调试,让我们开始!

仅仅调试 rewrite 规则

大部分时间,你仅仅需要这个,特别是当你看见 404 或是不是期望的页面的时候。

server {
        #other config
        error_log    /var/logs/nginx/example.com.error.log;
        rewrite_log on;
        #other config
}

rewrite_log 仅仅是一个标志。当打开它,它将发送所有的 rewrite 相关的日志信息到 error_log 文件中,使用 [notice] 级别。

因此,一旦你打开了它,在 error_log 中查看日志信息。

设置 Nginx 日志的调试级别

下面的示例增加了 debug 级别,记录在指定的路径。

server {
        #other config
        error_log    /var/logs/nginx/example.com.error.log debug;
        #other config
}

debug 将记录最大的消息。你可以在这里看到其他值

注意:在一个高流量的网站,不要忘记恢复 error_log 日志的调试级别,error_log 可能会吃光你所有的可用磁盘空间,并引起服务器 crash。

设置 Nginx 仅仅记录来自于你的 IP 的错误

当你设置日志级别成 debug,如果你在调试一个在线的高流量网站的话,你的错误日志可能会记录每个请求的很多消息,这样会变得毫无意义。

为了促使 Nginx 记录仅仅来自于你的 IP 的错误日志,添加以下行到配置文件 /etc/nginx/nginx.conf 的 events{..} 。

确保使用你自己的公网 IP 替换 1.2.3.4,你可以在这里找到你的公网 IP

events {
        debug_connection 1.2.3.4;
}

你可以在这里查看更多的细节

Nginx 的 Location 指定错误日志

在 Nginx 中,我们使用 location{..}

为了调试一个应用的部分,你可以在一个或多个 location{..} 中指定 error_log 指令。

server {
        #other config
        error_log    /var/logs/nginx/example.com.error.log;
        location /admin/ { 
        error_log /var/logs/nginx/admin-error.log debug; 
    }         
    #other config
}

以上将仅仅调试你应用的 /admin/ 部分,错误日志将被记录到一个不同的文件中。

你可以组合使用 debug_connection 和 error_log 来获取更多的控制调试日志。

使用 Nginx 的 HttpEchoModule 模块调试

HttpEchoModule 是一个独立的 Nginx 模块,它可以帮助你完全以不同的方式调试。这个模块默认没有被 Nginx 绑定。

你需要重新编译 Nginx 来使用这个模块。对于 Ubuntu 用户,这是一个快速启动仓库

我最近在使用它,我还用它来调试项目。当我做完的时候,我将写一篇文章详细讲述。

为 Nginx 的配置使用 Perl/Lua 语言

如果你仍然有困难的时间,并且你定期配置你的 Nginx,应该考虑使用其他语言来处理你的 Nginx 配置。

这里有关于 Perl 语言 和 Lua 语言的 Nginx 模块。

我非常不善于学习新的语言,不会有太多的机会写更多关于这方面的东西,但是如果你知道或是可以非常容易学习 Perl/Lua,这会非常有趣。

扩展阅读

  • How Nginx’s location-if works!
  • Maintaining, Optimizing & Debugging WordPress-Nginx Setup
已修改于2023-03-09 02:16
创作不易,留下一份鼓励
守望

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
守望
这家伙很懒还未留下介绍~
89
文章
0
问答
17
粉丝
相关文章
介绍nginx网页配置工具QQ技术交流群1:1106758598QQ技术交流群2:560797506邮箱: cym1102@qq.com官网地址: http://www.nginxwebui.cn码云: https://gitee.com/cym1102/nginxWebUIgithub: https://github.com/cym1102/nginxWebUI功能特点nginxWebUI也可管理多个nginx服务器集群,随时一键切换到对应服务器上进行nginx配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理.部署此项目后,配置nginx再也不用上网各种搜索配置代码,再也不用手动申请和配置ssl证书,只需要在本项目中进行增删改查就可方便的配置和启动nginx。技术说明本项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库项目启动时会释放一个.sqlite.db到系统用户文件夹中,注意进行备份本系统通过Let'sencrypt申请证书,使用acme.sh脚本
点赞 6
浏览 6.3k
在MacOSX上使用VSCode查阅、调试NGINX代码NGINX是一款十分流行的开源软件,代码量有17万行。如何从代码学习、研读它成为一个很挑战的问题。如果能够凭借VSCode等调试工具的能力边调试跟踪边学习,效率和效果要好很多。 网上关于用GCC、GDB去编译调试NGINX代码的文章有很多。但是实际配置起来会出现各种各样的问题。这里经过实际验证把验证的过程总结下来,希望对大家有帮助。 编译器的选择我们先了解下gcc与clangllvm的关系 gcc和clang都是编译器。gcc诞生于GNU,clang和苹果关系更密切一些。clang是llvm的前端,他们共同组成了macOSX上编译套件。 我们不建议使用GCC、GDB在macosx上调试NGINX,而建议使用在macOSX上兼容性更好的的编译套件,MacOSX上使用GDB还会出现以下问题: UnabletofindMachtaskportforprocess-id57304:(os/kern)failure(0x5). (please
点赞 2
浏览 2.2k
  前三周学习了陶辉老师的“NGINX基础培训系列课程”,感觉受益良多,在这里想把一些知识点记录一下,和大家分享一下知识点,也方便日后的随手查看,温故知新。  首先,我们了解到了Nginx的版本,Nginx发布版本分为主线版本和稳定版本,区分两个版本也非常简单,主线版本版本号为单数,比如1.19,稳定版本为双数,比如1.18,今天我要说的是稳定版本,这个版本会尽量少的减少Nginx的bug问题,适用于生产环境,这里我不建议使用Nginx和其他软件一样在生产环境中落后一个或多个大版本使用,之前生产环境做过漏扫,发现我们编译自带的Nginx版本为:nginx/1.13.3(查询命令为nginx-V),结果出现了多个漏洞,四个高危和一个中危漏洞:        通过升级Nginx到稳定版最新版本后修复!  其次,是Nginx发行版本的选择,目前比较流行的有:nginx、nginxplus、Tengine、openresty、ope
点赞 1
浏览 3.4k