Nginx疑难杂症汇总

这里主要是为了记录在使用 Nginx 的时候遇到的问题及其处理解决方法。

诡异的问题时常发生,如果正确的处理它们呢?将是一个值得思考和学习的问题!通过对错误和异常问题的排除和处理,能够增长我们的知识储备已经掌握处理问题最为有效和使用的方式。这里将会记录常见的集群使用的问题,以备不时之需。

Nginx疑难杂症汇总
# 获取帮助信息
$ nginx -h
nginx version: nginx/1.18.0 (Ubuntu)
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/share/nginx/)
  -c filename   : set configuration file (default: /etc/nginx/nginx.conf)
  -g directives : set global directives out of configuration file

1. 值得一说的就是 -s(发送信号)/-g(从配置文件中设置全局指令) 参数
stop: 快速停止nginx服务
quit: 完整有序的停止nginx服务
reopen: 重新打开日志文件(日志文件mv等操作后会重新生成)
reload: 修改配置后重新加载生效

1. 简述reload命令的执行步骤
1. master进程检查配置文件的正确性,若错误则返回错误信息并终止(采用原配置文件继续工作;因为worker并未受到影响),若正常则继续后续步骤。
2. 用新的配置文件,启动新的worker进程。
3. nginx将新的请求,分配新的worker进程。
4. 等待以前的worker进程的全部请求已经都返回后,关闭相关worker进程。
5. 重复上面过程,知道全部旧的worker进程都被关闭掉。

1. 提示 Cookie 长度超限

报错信息:Request Request Header Or Cookie Too Large

  • [问题起因] 服务新建之后,其他用户登录网页的时候,页面提示 400: Bad Request 错误,大致如下所示:
Nginx疑难杂症汇总 - 提示Cookie长度超限
  • [解决方法] 后来发现,是因为多个服务公用同一个域名导致在该域名下面存储的 Cookie 太多导致的,可以设置如下两个参数来缓解该问题的出现。
  • 设置读取客户端请求头的缓冲区大小。对于大多数请求,1K 字节的缓冲区就足够了。但是,如果一个请求包含很长的 cookie,或者来自 WAP 客户端,那么它可能不适合 1K。如果请求行或请求头字段不适合这个缓冲区,那么将分配更大的缓冲区,由 large_client_header_buffers 指令配置。