编程技术分享平台

网站首页 > 技术教程 正文

面试常问知识点:Nginx设置代理的一个注意点

xnh888 2024-09-10 22:56:12 技术教程 27 ℃ 0 评论

前几天,重启了下Nginx代理服务,发现报错了,以下是本次的思考。

1:先解决问题

查看Nginx错误日志:

40 SSL_do_handshake() failed (SSL: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:SSL alert number 40) while SSL handshaking to upstream

是SSL校验的问题,主要原因就是SNI TLS扩展没有传递,先说解决方法,主要和Nginx proxy_ssl_server_name指令有关,其官方解释:

Enables or disables passing of the server name through TLS Server Name Indication extension (SNI, RFC 6066) when establishing a connection with the proxied HTTPS server.

有点晦涩,该指令默认是关闭的,如果打开,Nginx会读取后端服务器的主机名,作为SNI值发送给后端服务器,这样代理服务器和后端能够正确的HTTPS握手。

设置很简单:

proxy_ssl_server_name on;

2:进一步思考

可为什么原来没问题,重启后就有问题?自己属实没想明白,不过思考作为代理服务器,那些指令应该显示的传递呢,下面列举了一些:

location /ai {
    proxy_pass http://;
    proxy_redirect     off;
    proxy_ssl_server_name on;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_max_temp_file_size    0;
    proxy_connect_timeout       3;
    proxy_send_timeout          15;
    proxy_read_timeout          165;
    proxy_buffer_size           4k;
    proxy_buffers               4 32k;
    proxy_busy_buffers_size     64k;
    proxy_temp_file_write_size  64k;
}

具体就不解释了,超时设置应该重点关注。

3:超时

连接超时、写入超时、读取超时,主要关注读取时间,也就是等待服务器响应,先看图:

结构很复杂的,图中的网关和代理工作机制是差不多的,但角色不一样。

记住一个原则就行:下游(比如上图中的客户端就是第一个下游)设置的超时时间要大于上游的时间。

下面是两种情况:

  • client超时时间 > 代理时间,则503报错(Service Unavailable)
  • client超时时间 < 代理时间,则504报错(Gateway Timeout)


欢迎大家关注公众号【Java烂猪皮】,回复【666】,获取最新Java后端架构VIP学习资料以及视频学习教程,然后一起学习,一文在手,面试我有。

公众号【Java烂猪皮】里面每天都会分享很多独家的干货内容,比如:Java后端学习路线,分享实战项目,源码分析,百万级系统设计,系统上线的一些坑,MQ专题,真实面试题,每天都会回答大家提出的问题。

每一个专栏都是大家非常关心,和非常有价值的话题,我相信在专栏中你会学到很多东西,一起共勉。

作者:虞大胆

出处:Nginx设置代理的一个注意点 (qq.com)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表