[转帖]5.Nginx常遇问题入坑出坑整理

nginx,问题,整理 · 浏览次数 : 0

小编点评

**问题描述:** 安装了Nginx时出现以下错误信息: ``` ./configure: error: the GeoIP module requires the GeoIP library. You can either do not enable the module or install the library. ``` **解决方法:** 1. **安装GeoIP库:** ``` apt-get install libgeoip-dev0x01 ``` 2. **修改nginx.conf文件:** ``` sudo nano /usr/local/nginx/conf/nginx.conf ``` 将 `geo_module geoip;` 注释掉,即: ``` # GeoIP module geoip_enable on; geoip_path /usr/share/GeoIP.dat; ``` 3. **重启Nginx服务:** ``` sudo systemctl restart nginx ``` 4. **重载nginx服务:** ``` sudo systemctl reload nginx ``` **其他建议:** * 确保您使用的是最新的Nginx版本,因为旧版本可能包含此错误。 * 如果您想在页面上显示动态生成的日志,请确保日志文件可写。 * 请确保您拥有权限更改日志文件。

正文

https://cloud.tencent.com/developer/article/2129777?areaSource=105001.10&traceId=zTlrks12HlQGZpAUZE_y4

 

0x00 Nginx 安装与编译

1.在Ubuntu系统上进行Nginx源码编译安装时指定了–with-stream_geoip_module模块报error: the GeoIP module requires the GeoIP library.错误信息,解决办法。

错误信息: 安装的nginx的geo的模块在编译nginx的时候遇到报错,报错信息如下:

./configure: error: the GeoIP module requires the GeoIP library.
You can either do not enable the module or install the library.

解决办法:apt-get install libgeoip-dev


0x01 Nginx 启动与使用

1.启动Nginx后报nginx: [emerg] unknown log format "main" in错误提示,解决办法。

错误信息: 在执行 nginx -s reload 后续出现了 nginx: [emerg] unknown log format "proxy_log" in /usr/local/macports/etc/nginx/nginx.conf:147 错误问题。

问题原因: 默认的 nginx 配置中的 log_format 选项被注释。

解决办法: 打开 nginx.conf 将 log_format 选项前面的#去掉。

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

2.使用Nginx代理转发php后端应用时报 Nginx 502 Bad Gateway错误问题解决。

  • 错误信息: Nginx 502 Bad Gateway_
  • 问题原因: php-cgi进程数不够用、php执行时间长(mysql慢)、或者是php-cgi进程死掉,都会出现502错误与php-fpm.conf的设置有关;而Nginx 504 Gateway Time-out则是与nginx.conf的设置有关。
  • 检查流程:

查看当前的PHP FastCGI进程数是否够用: netstat -anpo | grep "php-cgi" | wc -l

部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间:

http {
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
}

3.Nginx 启动时报413 Request Entity Too Large错误问题解决。

错误信息:413 Request Entity Too Large

错误原因: client_max_body_size:指令指定允许客户端连接的最大请求实体大小,它出现在请求头部的Content-Length字段. 如果请求大于指定的值,客户端将收到一个”Request Entity Too Large” (413)错误

解决办法:

#conf增大
client_max_body_size
#php.ini中增大
post_max_size 和upload_max_filesize

4.访问 Nginx 提供的网页时报403 forbidden错误问题解决。

问题描述: directory index of “/xx/xx/xx/“ is forbidden,网页访问403; 解决思路:

# nginx.conf
autoindex on;  #进行列目录查看是否可以列目录为排错准备;

# 需要排查的思路
1.selinux
2.目录下有没有index.html 文件(如果有就需要配套有 index  index.html index.php)
3.权限问题 chown -R nginx:www-data /var/www/html

5.Nginx 成功配置虚拟主机并且启动nginx可以看见有nginx线程存在但是无监听端口

问题原因: 由于在设置多个虚拟主机的时候在nginx.conf主配置文件中去掉了server {…} 添加的 include domains/*,其中domains目录不是在于conf/子目录中;

解决办法:

mkdir -vp /usr/local/nginx/conf/domains
cat>/usr/local/nginx/conf/domains/v1.weiyigeek.top.conf<<EOF
server {
    listen       80;
    server_name  $NGX_VHOSTS;

    location / {
        root   html/$NGX_VHOSTS;
        index  index.html index.htm;
    }
    #Nginx 监控模块启用
    location /nginxStatus {
      stub_status;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}
EOF

6.启动 nginx 时报 [error] invalid PID number "" in "/usr/local/var/run/nginx.pid错误解决办法

错误原因: nginx根本就没有启动过,所以pid文件的值为空没法平滑启动,先启动了才能平滑启动。

解决方法:

解决方案1:sudo nginx -s reload -c  /usr/local/etc/nginx/nginx.conf
解决方案2:先启动nginx然后测试配置文件语法无误后再进行重载。

7.使用Nginx判断无效$host变量时返回JSON文本字符串便直接下载而非在页面显示。

解决办法:

location ^~ / {
  # JSON 返回
  if ( $host !~* weiyigeek\.top ) {
  add_header Content-Type 'application/json; charset=utf-8';
  return 200 '{"status":"error","Author":"WeiyiGeek","Site":"https://www.weiyigeek.top","Chinese":"大佬, 请不要把你的域名解析到我的服务器上","English":"Friend, Please do not resolve your domain name to my server"}';
  # return 301 https://space.bilibili.com/385802642;
  }

  # html 返回
  if ($host !~* weiyigeek\.top) {
    add_header Content-Type 'text/html;charset=utf-8'
    return 200 'Warnning, This domain not is www.weiyigeek.top!';  
  }
}

温馨提示: 在百度中搜索的方法中说使用default_type text/html;关键字来默认指定显示文档类型,但在最新的1.21.6版本中会报错,例如。

location ~ ^/weiyigeek/(.*)_(\d+).html$ { 
  default_type text/html; 
  set $s $1; 
  set $d $2; 
  return 200 str:$s$d; 
}

8.在动态生成Nginx日志路径配置后报[emerg] buffered logs cannot have variables in name错误问题解决。

问题原因: 如果设置缓存写入日志,则不支持路径中存在变量。 解决办法:

# 不正确写法
access_log /var/log/nginx/access-${logdate}.log main buffer=128k gzip flush=1m;;  

# 正确写法
access_log /var/log/nginx/access-${logdate}.log main;

补充说明: 通常设置以日期分隔日志, 如果执行 nginx 的用户权非root用户则可能包如下错误,此时我们需要赋予其可以修改日志(不建议使用root,此处假设使用nginx用户), 然后重启nginx。

# 错误信息
2022/04/12 14:22:00 [crit] 594763#594763: *55883 open() "/var/log/nginx/ip-2022-04-12.log" failed (13: Permission denied) while logging request, client: 71.6.232.7, server: 82.15.1.23, request: "GET / HTTP/1.1", host: "82.15.1.23"

# 解决办法
$ chown -R nginx:root /var/log/nginx
$ nginx -s reload

与[转帖]5.Nginx常遇问题入坑出坑整理相似的内容:

[转帖]5.Nginx常遇问题入坑出坑整理

https://cloud.tencent.com/developer/article/2129777?areaSource=105001.10&traceId=zTlrks12HlQGZpAUZE_y4 0x00 Nginx 安装与编译 1.在Ubuntu系统上进行Nginx源码编译安装时指定了–

[转帖]Nginx(5):进程绑定CPU:从nginx源码里给你刨功能出来

https://cloud.tencent.com/developer/article/1886150?from=article.detail.1767994&areaSource=106000.11&traceId=akXSS578NgvCLH6Eiqbla 希望打开这篇对你有所帮助。 文章目录

【转帖】nginx变量使用方法详解-5

https://www.diewufeiyang.com/post/579.html 前面在 (二) 中我们已经了解到变量值容器的生命期是与请求绑定的,但是我当时有意避开了“请求”的正式定义。大家应当一直默认这里的“请求”都是指客户端发起的 HTTP 请求。其实在 Nginx 世界里有两种类型的“请

[转帖]Nginx(四)负载均衡

一 nginx目录的说明 1 nginx/ 3 |-- client_body_temp 4 |-- conf #这是Nginx所有配置文件的目录,极其重要 5 | |-- fastcgi.conf 'fastcgi相关参数的配置文件' 6 | |-- fastcgi.conf.default #f

[转帖]Keepalived如何实现Nginx高可用

https://www.jb51.net/article/266305.htm Keepalived安装可参考Mysql+Keepalived实现双主热备 Master上的keepalived.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

[转帖]Nginx 40 问~~~

https://zhuanlan.zhihu.com/p/485159477 Nginx是一个 轻量级/高性能的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国

[转帖]探索惊群 ③ - nginx 惊群现象

https://wenfh2020.com/2021/09/29/nginx-thundering-herd/ nginx kernel 本文将通过测试,重现 nginx(1.20.1) 的惊群现象,并深入 Linux (5.0.1) 内核源码,剖析惊群原因。 1. nginx 惊群现象 2. 原因

[转帖]centos7 firewall-cmd主机之间端口转发

目录 1. firewalld1.1 firewalld守护进程1.2 控制端口/服务1.3 伪装IP1.4 端口转发 2. 案例2.1 配置ServerA2.2 安装nginx测试 (可选)2.3 开启端口2.4 伪装IP2.5 端口转发2.6 配置ServerB2.7 修改nginx页面显示内容

[转帖]探索惊群 ①

https://wenfh2020.com/2021/09/25/thundering-herd/ 惊群比较抽象,类似于抢红包 😁。它多出现在高性能的多进程/多线程服务中,例如:nginx。 探索惊群 系列文章将深入 Linux (5.0.1) 内核,透过 多进程模型 去剖析惊群现象、惊群原理、惊

[转帖]5、docker 访问仓库

很早之前看的文章,进行了简单的排版整理,找不到源地址了,如有侵权,请联系删除。 仓库(Repository)是集中存放镜像的地方。 一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以