配置nginx代理后访问系统卡顿(响应慢)问题原因与解决方法

一、系统环境

操作系统:windows Server 2016

Nginx版本:nginx/1.25.4.1

后端应用服务器:Apache Tomcat 9.0.54

二、问题描述

我们使用nginx配置了SSL和代理,对外通过HTTPS提供访问。在实际使用中发现转发后访问起来系统却非常卡顿(响应慢),绕开nginx测试直接访问tomcat内部端口,一切非常丝滑。通常情况下,使用nginx反向代理后的服务访问速度应该和源地址访问速度基本无差距的,这时候就应该考虑是配置上哪里出了出问题。

通过postman各种测试和对比,最后发现是http协议版本导致的,代理之后走的是http 1.0会导致请求变慢。

三、解决办法

在nginx配置文件中增加proxy 版本配置proxy_http_version  1.1; 指定为1.1版本即可。

修改前(有问题时的配置)

server {
	listen       8000;
	server_name  localhost;

	
    client_max_body_size 100m;

    proxy_http_version  1.1;
		
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # To resolve nginx 504 issue
    proxy_connect_timeout 1800s;
    proxy_send_timeout 1800s;
    proxy_read_timeout 1800s;
    
    client_body_timeout 1800s;

    # 这里是后端系统地址
    location /ReTool {
        proxy_pass http://127.0.0.1:8099;
    }
}
四、更多知识

如果nginx地址配置了localhost,但是在操作系统的host文件中没有配置映射【127.0.0.1】也会导致卡顿问题。

nginx先试着访问localhost,访问不成功(超时)之后才会访问127.0.0.1,这是nginx的转发机制决定的,卡顿的点就在于中间那一段超时等待的时间段,这样虽然是能够访问,但是响应太慢甚至失败,严重影响用户体验。

因此建议 配置nginx转发的时候要格外注意不要使用localhost而是使用域名或具体ip代替。

猜你喜欢

转载自blog.csdn.net/gmaaa123/article/details/141679364