微服务实战系列之Nginx(技巧篇)

前言

今天北京早晨竟然飘了一些"雪花",定睛一看,似雪非雪,像泡沫球一样,原来那叫"霰"。

自然中,雨雪霜露雾,因为出场太频繁,认识门槛较低,自然不费吹灰之力,即可享受它们的"恩泽"。

这个霰,就不一样了,可能容易被忽视,更可能容易被当成雪,自然不会给人们留下深刻的印象。

所以,博主私自为这个霰,提个建议:"欲留深刻在人间,必有一技抚人心"。

叙述到此,言归正传,博主继续向各位盆友分享微服务系列文章,深耕细作方的人心。

接下来,按博主的风格,继续拉出自家的队伍,欢迎三连,有求必应:

昨日,博主已对Nginx---这个微服务中的重量级选手,进行了基本的介绍,无论它作为负载均衡,还是代理服务,抑或缓存服务、web服务,都体现了Nginx的专职能力。那么,在实际应用过程中,通常有哪些技巧需要关注或具备呢?

今日,博主继续对掌握Nginx的必备基本技巧进行逐一解答,希望可以带来帮助。

技巧大观园

Q1:遇到权限异常,怎么办

首先涉及两个用户:一个安装用户,一个运行用户;

安装用户是Nginx安装时的执行用户,比如root或其他,即Nginx的操作用户;

运行用户是Nginx运行的用户,即conf中指定的user;

如果出现权限不允许之类的问题,首先确认这两个用户是否一致,然后逐一验证;

Q2:设置多少个worker合适

Nginx运行机制可以理解为Master-Worker模式,M与W之间是通过信号传递。所以实际上是Worker分摊了执行任务并占用运行的资源。

一般worker的数量与Cpu保持一致,比如4核,则worker_processes可以设置为4;

Q3:遇到跨域问题,怎么办

跨域问题一般出现在前后端分离模式的架构,由于前后端服务端口不一致导致被浏览器拦截。可通过conf新增允许跨域的配置即可。

powershell 复制代码
location /api {
    add_header 'Access-Control-Allow-Origin' '*'; //允许跨域
    proxy_pass http://localhost:9999;
}
Q4:访问静态资源404,怎么办

在我们使用过程中,经常会出现请求资源无效或404的问题,虽简单,却极易出错。如果出现了怎么办,稍安勿躁,静下心慢慢找原因。

  • 排查设置的root目录是否正确;
  • 排查设置的root目录下,是否存在相关资源;
  • 排查是否缓存导致,比如升级版本,未达预期,可以尝试先清理缓存;
Q5:搭建负载均衡时,流量分配不均甚至流量在单一节点集中

遇到此类问题,首先应该想到权重是否合理,如果权重配置无问题,继续排查网络原因。比如负载的集群间是否网络联通,或者Nginx与每个节点的网络是否联通。

此刻最常用的武器就是telnet ip port。

Q6:配置了SSL证书,https无法访问

https服务作为微服务界的标配和"宠儿",必须掌握如何使用。

https默认端口443,在conf中server模块配置,当然nginx可同时支持http和https。

如果无法访问,首先检查证书是否有效,ssl模块是否已安装,再确认端口是否开放防火墙,最后检查域名配置是否正常。

配置导致如下:

powershell 复制代码
server{
	listen 443 ssl; //服务端口,支持ssl协议
	server_name  www.xxxx.com;
	ssl_certificate      /ssl/xxx.pem; # 证书文件pem
	ssl_certificate_key  /ssl/xxx.key; # 证书文件key
}
Q7:配置反向代理服务后,数据返回不完整

比如接口报文太大,但是Nginx默认的支持的报文是有限的。可通过调整location下的参数:
proxy_buffers
proxy_buffer_size

Q8:配置了反向代理服务后,http状态显示超时

一般我们可以使用Nginx实现服务转发,即Nginx是代理服务,服务端可能是另外一个节点,首先应该检查Nginx服务节点与服务端节点是否网络联通。也可以合理设置一个相对合适的超时时间,不宜过长不易太短。

Q9:遇到502怎么办?

这个一般是后端服务问题导致。可从"肇事"后端服务中,通过日志中排查失败原因,确定问题所在。

Q10:如何正确的查看日志,排查问题

Nginx启动运行后,一般有2个日志:access和err。

access通常是请求nginx的日志记录,无论正常或异常,均可查找;

err通常是错误日志记录,从中可查相关的运行记录和http响应状态情况;

最后,博主来一张Nginx原理架构图,解决问题必抓本质,不然容易"捉襟见肘,顾此失彼"。


结语

综上所述,各位盆友在使用Nginx过程中,难免遇到一些棘手或者更复杂的问题,如果恰好是生产故障,那更惊心动魄了。博主精心为各位盆友选择10个易错环节或情景,希望可以为你们所用,助你们一臂之力。

时间有限,知识无涯,Nginx到此结束,下一篇主题是什么?各位盆友拭目以待。

博主有空接着聊,欢迎追订哈哈,不胜感激~

相关推荐
黄鹂鸟科技35 分钟前
软件定制开发设计要点:从需求梳理、原型确认到敏捷交付与持续维护
后端·物联网·系统架构
银河技术2 小时前
从脚本到 Operator:用 Go 构建可靠的微服务自动扩缩容控制器
开发语言·微服务·golang
草莓熊Lotso4 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
Chenyu_3109 小时前
DPDK、TC 和 XDP:Linux 高性能网络到底在优化什么
linux·服务器·网络·缓存
姜鱼问生14 小时前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
奔跑的架构师15 小时前
[A-51]ARMv9/v8-SCMI系统架构
linux·arm开发·架构·系统架构·arm
我不会起名字32216 小时前
微服务链路超时怎么设:逐层收敛的 4 条规则与 1 个反例
微服务·go·超时·熔断
黄鹂鸟科技20 小时前
进销存系统设计要点:从采购计划、库存监控到成本核算
后端·物联网·系统架构
吴建旭 智宅焕21 小时前
智能家居全国交付中异地高并发管理带宽的系统架构与AI半自动化实现
人工智能·系统架构·智能家居
hflmwl81 天前
RedisDesktopManager安装包中文版官方下载,redis可视化客户端工具下载
数据库·redis·缓存·可视化客户端工具