首页 > 其他分享 >API网关【gateway 】- 2

API网关【gateway 】- 2

时间:2022-11-30 12:05:18浏览次数:40  
标签:网关 log worker echo access nginx API 日志 gateway

最近在公司进行API网关重写,公司内采用serverMesh进行服务注册,调用,这里结合之前学习对API网关服务进行简单的总结与分析。

由于采用了大量的nginx相关的东西,所以在此记录一下:

配置连接数

worker_processes:表示开启nginx的worker进程的个数,nginx启动会开两种进程,master进程用来管理调度,worker进程用来处理请求,

优化手段,

方法一:worker_processes auto;

  表示设置服务器cpu核数匹配开启nginx开启的worker进程数

  查看cpu核数:cat /proc/cpuinfo

方法二:nginx设置cpu亲和力【进行手动设置】

  worker_processes 8;

  worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

  00000001表示启用第一个CPU内核,00000010表示启用第二个CPU内核,以此类推

这种设置方法更高效,因将每个cpu核提供给固定的worker进程服务,减少cpu上下文切换带来的资源浪费

比如,2核CPU,开启2个进程,设置如下

worker_processes     2;

worker_cpu_affinity 01 10;

比如:4核CPU,开启4个进程,设置如下

worker_processes     4;

worker_cpu_affinity 0001 0010 0100 1000;

网关功能之一 :日志 

使用log_format指令进行配置文件格式

nginx的log_format有很多可选的参数用于指示服务器的活动状态,默认的是:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    '$status $body_bytes_sent "$http_referer" '    '"$http_user_agent" "$http_x_forwarded_for"';

192.168.31.247 - - [11/Apr/2019:16:26:43 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3350.0 Safari/537.36" "-"

参数说明

参数                      说明                                         示例
$remote_addr 客户端地址 211.28.65.253
$remote_user 客户端用户名称 --
$time_local 访问时间和时区 11/Apr/2019:16:26:43 +0800
$request 请求的URI和HTTP协议 "GET /article-10000.html HTTP/1.1"
$http_host 请求地址,即浏览器中你输入的地址(IP或域名)   www.wang.com 192.168.100.100
$status HTTP请求状态 200
$upstream_status upstream状态 200
$body_bytes_sent 发送给客户端文件内容大小 1547
$http_referer url跳转来源 https://www.baidu.com/
$http_user_agent 用户终端浏览器等信息 "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocol SSL协议版本 TLSv1
$ssl_cipher 交换数据中的算法 RC4-SHA
$upstream_addr 后台upstream的地址,即真正提供服务的主机地址 10.10.10.100:80
$request_time 整个请求的总时间 0.205
$upstream_response_time 请求过程中,upstream响应时间 0.002
$http_x_forwarded_for 是反向代理服务器转发客户端地址的参数

假设将Nginx服务器作为Web服务器,位于负载均衡设备、Squid、Nginx反向代理之后,不能获取到客户端的真实IP地址了。

原因是经过反向代理后,由于在客户端和Web服务器之间增加了中间层,因此Web服务器无法直接拿到客户端的IP。

通过$remote_addr变量拿到的将是反向代理服务器的IP地址。

但是,反向代理服务器在转发请求的HTTP头信息中,可以增加X-Forwarded-For信息,用以记录原有的客户端IP地址和原来客户端请求的服务器地址。

这时候,要用log_format指令设置日志格式,让日志记录X-Forearded-For信息中的IP地址,即客户的真实IP。

日志文件路径配置

access_log指令

语法: access_log path [format [buffer=size [flush=time]]];

access_log path format gzip[=level] [buffer=size] [flush=time];
access_log off;

默认值: access_log logs/access.log combined;

配置段:

gzip : 压缩等级。

buffer : 设置内存缓存区大小。

flush : 保存在缓存区中的最长时间。

access_log off : 不记录日志:

使用默认combined格式记录日志:access_log logs/access.log 或 access_log logs/access.log combined;

值得注意的是,Nginx进程设置的用户和组必须对日志路径有创建文件的权限,否则,会报错。

此外,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off)。

3)日志文件切割

server1.log

----> server1-2019-04-09.log

----> server1-2019-04-10.log

----> server1-2019-04-11.log

通过mv命令 把当前log文件重命令

再用信号控制指令 发送重读日志指令 产生了新的日志log文件

可以利用sh脚本的方式执行日志分割,在每天凌晨执行一个计划任务 调用sh脚本,就完成的系统自动切割日志文件

例如脚本:

# touch cutlog.sh脚本
# vi cutlog.sh
#!/bin/bash
LOGS_PATH=/usr/local/nginx/logs
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid) # 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件

设定定时任务:

设置定时任务
# vi /etc/crontab
0 0 * * * root /usr/local/nginx/logs/cutlog.sh

nginx模块安装

查看nginx安装的现有模块指令

/usr/local/nginx/sbin/nginx -V 
nginx version: nginx/1.13.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
configure arguments:

下载需要的echo模块

https://github.com/openresty/echo-nginx-module/tags
# wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz
# tar zxvf v0.61.tar.gz
# mv echo-nginx-module-0.61 nginx-tools/

重新编译nginx,安装echo-nginx模块

进入nginx源文件,重新编译

# ./configure --add-module=nginx安装目录下面/echo-nginx-module-0.61 #安装echo模块(文件夹名echo-nginx-module-0.61)
# make

平滑升级 nginx

备份一下旧的nginx

# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
# cp -f objs/nginx /usr/local/nginx/sbin/nginx

平滑升级:

# make upgrade 
# make clean (清除编译产生的文件)

echo用法举例:

location /module {
echo 'hello world';
}
--------------------
location /module {
echo_exec /set;
}

location /set {
set $foo 'hello world'; #自定义变量
echo "$request_uri"; #显示nginx全局变量的内容
echo $foo;
}

 

源码面前,了无秘密



标签:网关,log,worker,echo,access,nginx,API,日志,gateway
From: https://blog.51cto.com/zhenghongxin/5898200

相关文章

  • UPEK API 代码
     UPEKAPI代码 usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text......
  • Spring Boot + @Async 太好用了,助你大大提升 API 并发能力!
    来源:https://developer.aliyun.com/article/694020异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是“异步调用”?“异步调用”对应的是“同步调用”,同步调用......
  • .net core .net6 webapi 连接mysql 8
    1.表结构:CREATETABLE`table2`(`id`BIGINTNOTNULLAUTO_INCREMENT,`myname`varchar(255)NOTNULL,`create_time`DATETIMENOTNULL,PRIMARYKEY(`......
  • EventTarget.addEventListener() - Web API 接口参考
    EventTarget.addEventListener()-WebAPI接口参考  https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener#%E8%AF%AD%E6%B3%95  <......
  • 三大实例带你搞定 Prometheus API 使用
    作为一位优秀的技术人员,往往能通过对数据的最大化利用来产生更多价值。而Prometheus的监控数据则是可以为我们所用的重要数据,它并不只能用于日常的监控和告警使用,也可以用......
  • 跨平台.NET应用UI组件DevExpress XAF v22.1 - 增强Web API Service
    DevExpressXAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。DevExpressXAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比......
  • ISAPI和CGI限制中没有ASP.NET v4.0
    文章来源:http://t.zoukankan.com/heyangyi-p-8515812.html[服务器搭建]ISAPI和CGI限制中没有ASP.NETv4.0解决方式:1.确保安装IIS时确实安装了ASP.NET,如果没有的话,勾上重......
  • 怎么给IIS添加ISAPI和CGI限制功能?
    https://www.aiufida.com/jcufida/616.html在IIS中添加ISAPI和CGI限制功能是非常必要的,因为如果在IIS中不添加添加ISAPI和CGI限制功能可能会引起软件运行过程中报错,或者直......
  • 使用 Hypercorn HTTP/2 ASGI 部署 FastAPI
    AnotherASGIwebserverthatsupportsHTTP/2andHTTP/3specifications我已经介绍了很多关于FastAPI的教程,其中服务器部署了Uvicorn,一个快速的ASGIWeb......
  • .NET6之MiniAPI(二十四):用Polly重试
    为了保障系统的稳定和安全,在调用三方服务时,可以增加重试和熔断。重试是调用一次失败后再试几试,避免下游服务一次闪断,就把整个链路终止;熔断是为了防止太多的次数的无效访......