免费做网站的app,html制作简单的个人网页代码,个人网站网站,私活网站开发多少钱序言 什么样的人可以称之为有智慧的人呢#xff1f;如果下一个定义#xff0c;你会如何来定义#xff1f; 所谓智慧#xff0c;就是能区分自己能改变的部分#xff0c;自己无法改变的部分#xff0c;努力去做自己能改变的#xff0c;而不要天天想着那些无法改变的东西如果下一个定义你会如何来定义 所谓智慧就是能区分自己能改变的部分自己无法改变的部分努力去做自己能改变的而不要天天想着那些无法改变的东西不然的话就只能越来越消极了消极的原因大部分也在于总是关注于自己无法改变的现实。 nginx返回404问题排查 背景 大部分的人在看到nginx返回404的时候要么就是请求了一个不存在的资源或者接口要么就是location写的有问题基本不会想到是协议导致的。 架构 现在的应用程序都讲究前后端分离分离不完整的时候就会进行修改架构在修改之前的架构如下 为了从统一入口进来从而将架构修改为如下 修改之后的好处主要是能减少客户端能接触的东西从而减少暴露面当有攻击的时候排查或者封杀的面不会很多。 1 前端nginx进行重新配置 在前端nginx上面其实只要增加一段location的配置即可从而使用了极简的配置 upstream backend {server 192.168.1.1;server 192.168.1.2;
}
location /api/{proxy_pass http://backend;proxy_set_header X-Real_IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} 在添加完成配置之后将nginx进行reaload让配置生效再次进行验证请求之后发现后端请求的接口全部变成了404. 此时的你该如何去解决这个问题 对应该第一时刻进行回滚备份的配置先让生产跑起来再来解决问题。 2 查看前端和后端的日志 变更导致的问题要么看配置是不是有问题要么看日志查查问题出现的点在哪里。 在查看nginx的accesslog的时候重要的看请求发到了哪个后端404是不是后端返回的如果404是nginx直接返回的说明还没到达后端如果是后端的返回的那么就要看后端nginx的日志了。 在此处的问题中查看前端nginx日志的时候发现是后端nginx返回的404因为upsteam_status 为404而且能找到对应的upsteam server的ip从而到对应的后端nginx上去查看日志。 但是非常奇怪的是在后端nginx上面未看到任何请求日志在后端nginx上面使用的是vhost的配置也就是虚拟主机。 那么现在可以得到一个初步结论 1 404 的确是后端nginx返回的
2 后端nginx上面没找到对应的访问日志 3 可能出现问题的地方 根据如上的结论那么哪些地方可能出现问题呢 首先再看了一眼加了location配置的地方比平时的配置少一些东西 proxy_set_header Host $host;
proxy_set_header Connection ;
proxy_http_version 1.1; 在后端的nginx对应的server段的配置的日志路径上面没找到对应的日志信息但是前端的nginx返回中说明是后端nginx返回的从而找到对应的默认主机也就是default server中发现默认配置没有那么就找到在vhost中第一个主机段查看它的日志发现了请求。 从而问题已经找到因为在nginx的默认配置中如果不指定http协议版本的话那么默认是1.0版本而对于http 1.0版本来说默认是不会加上host头部的从而当请求到后端nginx的时候找不到对应server name进行处理从而走了默认的server段进行处理从而导致了对应的虚拟主机没有日志而在默认的虚拟主机中找到了对应的访问日志。 从而再将host头部进行设置然后切换发现访问正常。 那么再尝试一下第二种方案不加host后端而指定http协议为1.1因为http1.1协议默认会传输host头部从而无需显示指定发现也是ok的。 最后再把这三个头部加上主要是为了让两个nginx之间保持长连接从而减少三次握手的时间当然upsteam之中也要将keepalive指令打开不然也是不能激活长连接的因为nginx的默认值如下 Syntax: keepalive connections;
Default: —
Context: upstream 风言风语 一个东西使用的多了就能遇到各种各样的问题而在一些资料上看到的东西你会发现那都是基础中的基础解决不了任何问题但是却是解决问题的根基简单的报错但是中间就充斥着各种可能得组合原因。就像做数学基础都是11然后来个32都是同样的道理。 知道并不代表能灵活运行能猜到可能的原因和解法对比法也是一个比较好的方法。 努力的方向也是自己能改变的东西也是自己能掌控的东西如果努力的方向都是不能改变的不可控的那么这种努力也将是一种徒劳。