1. Descrição do problema
Nginx é usado para implementar roteamento e encaminhamento entre sistemas internos.
Mas recentemente descobri que existe um sistema que costuma reportar erros 502, chegando a centenas de vezes por dia, o que é completamente insuportável.
2. Investigação de causa
Então verifiquei e descobri que o pessoal de configuração entendia a unidade de tempo limite de conexão ( server.tomcat.connection-timeout
) como segundos, mas na verdade era milissegundos.
Parte da configuração do SpringBoot é a seguinte:
# Tomcat
server:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
min-spare-threads: 30
connection-timeout: 60 # 错误在这里
port: 18080
servlet:
context-path: /
max-http-header-size: 102400
O valor da configuração original é que 60
se o GC for encontrado durante o processo de estabelecimento da conexão do cliente, e o tempo de pausa do GC atingir um total de mais de 60ms, o Tomcat verá que o tempo limite se esgota, o que fará com que a conexão não for estabelecido e o Nginx o enviará ao cliente. end retornará um erro 502.
3. Soluções
Modifique o tempo limite da conexão, por exemplo, modifique-o para 【server.tomcat.connection-timeout=6000
】, conforme mostrado abaixo:
# Tomcat
server:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
min-spare-threads: 30
connection-timeout: 6000
port: 18080
servlet:
context-path: /
max-http-header-size: 102400
problema resolvido.
Claro, o erro 502 não se limita a este motivo, e o link Nginx precisa ser verificado.
Autor: https://renfufei.blog.csdn.net/
Hora: 2 de setembro de 2020