公司新上线了一个系统,通过Nginx进行反向代理,系统上线后,偶尔有请求出现请求找不到,响应 404
的问题。仅新系统会出现该问题,以前部署的系统没有;错误的请求随机出现,并不固定为某个特定的请求地址。Nginx部分配置如下:
root@iZbp1fsnzx88n3hcc46:/opt/nginx-1.12.2/conf# cat nginx.conf
worker_processes 4;
events {
worker_connections 25240;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server_tokens off;
access_log /var/log/nginx/access.log; # 全局访问日志
error_log /var/log/nginx/error.log; # 全局错误日志
include conf.d/*.conf; # 各系统分开配置
}
root@iZbp1fsnzx88n3hcc46:/opt/nginx-1.12.2/conf/conf.d# ll
total 44
drwxr-xr-x 2 root root 4096 Jun 16 18:27 ./
drwxr-xr-x 5 root root 4096 Dec 23 10:57 ../
-rw-r--r-- 1 root root 830 Feb 6 2020 old1.conf # 以前部署系统的配置
-rw-r--r-- 1 root root 1660 Apr 18 2019 old2.conf # 以前部署系统的配置
-rw-r--r-- 1 root root 5790 Jun 16 18:27 new.conf # 新上线系统的配置
root@iZbp1fsnzx88n3hcc46:/opt/nginx-1.12.2/conf/conf.d# cat new.conf
server {
listen 8080;
server_name localhost;
access_log /var/log/nginx/new.log; # 新系统访问日志
error_log /var/log/nginx/new.err; # 新系统错误日志
location / {
proxy http://localhost:8090;
}
}
root@iZbp1fsnzx88n3hcc46:/opt/nginx-1.12.2/conf/conf.d#
root@iZbp1fsnzx88n3hcc46:/opt/nginx-1.12.2/conf/conf.d#
跟踪日志发现无论全局错误日志还是新系统错误日志中,都没有对应记录,新系统访问日志中只有正常请求的记录,没有错误的记录。错误请求只有在全局访问日志文件中才有记录。最终在查看Nginx进程状态时,竟发现多了4个工作进程。
root@iZbp1fsnzx88n3hcc46:/opt# ps aux | grep nginx
root 2623 0.0 0.0 37524 6888 ? Ss 2020 0:00 nginx: master process nginx -c /etc/nginx/nginx.conf
nobody 4132 0.0 0.1 47980 17524 ? S 2020 0:00 nginx: worker process # 异常进程
nobody 4133 0.0 0.1 47980 17556 ? S 2020 0:00 nginx: worker process # 异常进程
nobody 4134 0.2 0.1 48468 18504 ? S 2020 0:00 nginx: worker process # 异常进程
nobody 4135 0.0 0.1 47980 17604 ? S 2020 0:00 nginx: worker process # 异常进程
nobody 8192 0.0 0.1 47980 17524 ? S 17:47 0:00 nginx: worker process
nobody 8193 0.0 0.1 47980 17556 ? S 17:47 0:00 nginx: worker process
nobody 8194 0.2 0.1 48468 18504 ? S 17:47 0:02 nginx: worker process
nobody 8195 0.0 0.1 47980 17604 ? S 17:47 0:00 nginx: worker process
root 8403 0.0 0.0 11748 920 pts/0 S+ 18:08 0:00 grep --color=auto nginx
仔细观察发现多出来的进程是很久以前启动的了,执行 nginx -s reload
命令,异常进程也不会终止,于是猜测错误请求是由异常的进程在处理,而异常的进程是很久以前启动的,并没有加载新系统的配置文件,导致报错,同时这也是为什么错误记录只存在全局访问日志中的原因。 kill
掉异常进程后,果然没有再出现 404
的问题了。
至于Nginx进程出现异常的原因我就没有再深究了,网上有人不建议使用 nginx -s reload
命令重启nginx,有时候会无效,公司Nginx在不久做过升级,或许是升级操作不当导致的也说不定。