当前位置:首页 > 技术文章 > 正文内容

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

arlanguage5个月前 (12-14)技术文章45

前几天,重启了下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)

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/181.html

标签: nginx 错误500
分享给朋友:

“面试常问知识点:Nginx设置代理的一个注意点” 的相关文章

Nginx+keepalived实现高可用 nginx和keepalived如何搭建高可用集群

Nginx一般用来做服务网关,虽然Nginx的性能非常高,但是还是有宕机的风险,所以Nginx的高可用也是我们需要考虑的。常见的Nginx的高可用方案是使用keepalived浮动IP技术来实现。通过keepalived虚拟一个vip出来作为虚拟网关,所有请求都先通过虚拟网关找到真正网关,再往下走。...

Nginx路由匹配规则location的小总结

使用过nginx的同学都知道,在nginx配置文件中通过location配置路由转发规则,配置语法为:location [=|~|~*|^~] /uri/ { ... }中括号中为路由匹配符号,常见的有:1 =:精确匹配 2 ^~:精确前缀匹配 3 ~:区分...

【网络安全】关于PHP Study nginx解析高危漏洞的预警通报

网络安全近日,山石网科安全研究院监测发现PHPStudy Windows最新版本存在nginx解析漏洞,可以造成任意代码执行。一、漏洞情况phpStudy是一个PHP调试环境的程序集成包,该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装...

php高并发的瓶颈到底在哪

php高并发的瓶颈到底在哪?是同步阻塞?还是nginx+fpm不断创建-销毁进程资源过度消耗?高并发到底是什么问题,是语言问题嘛,为什么说php不适合高并发?求大佬指点从2009年后一直用lnmp,从5.2.17一直到现在的PHP7.4,做的项目无数个,大到日IP10W+、PV50W+的平台,小到日...

nginx命令——学习记录 nginx详细教程

nginx命令--学习记录查看80端口是否被占用netstat -ntlpnginx命令#/usr/local/nginx/sbin/nginx 启动命令#/usr/local/nginx/sbin/nginx -t 检测配置文件 #/usr/local/nginx/sbin/ngin...

安卓手机上安装Linux开源模拟器-Termux

什么是TermuxTermux是一款基于 Android 平台的开源 Linux 终端模拟器,使用 pkg(apt) 进行软件包的管理。最重要的是,它无需手机 root 权限,因此,绝大多数 Android 都可以运行。Termux本质上是一个终端模拟器加上一套Linux的最小系统。这里的系统指的是...