图片来源于网络
监控大屏实现地区性能指标响应时间展示,对外系统使用nginx作为访问代理,通过在nginx上进行获取地理信息,将日志采集后在大屏进行实时展示,本文介绍如何获取地理信息。
准备环境
sudo tar -xvf libmaxminddb-1.6.0.tar.gz
cd libmaxminddb-1.6.0
#安装
sudo ./configure && sudo make && sudo make install
#加入lib path
sudo sh -c "echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf"
sudo ldconfig
Nginx添加geoip模块
./configure --prefix=/data/app/nginx --sbin-
path=/data/app/nginx/sbin/nginx --conf-
path=/data/app/nginx/conf/nginx.conf --error-log-
path=/data/log/nginx/error.log --http-log-
path=/data/log/nginx/access.log --pid-path=/run/nginx.pid --
user=nginx --group=nginx --with-http_ssl_module --with-
http_stub_status_module --with-pcre --with-http_v2_module --
with-stream --with-http_gzip_static_module --add-dynamic-
module=/data/app/geo2db/ngx_http_geoip2_module-3.3
makemake install
/data/app/nginx/sbin#./nginx -V
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/data/app/nginx --sbin-
path=/data/app/nginx/sbin/nginx --conf-
path=/data/app/nginx/conf/nginx.conf --error-log-
path=/data/log/nginx/error.log --http-log-
path=/data/log/nginx/access.log --pid-path=/run/nginx.pid --
user=nginx --group=nginx --with-http_ssl_module --with-
http_stub_status_module --with-pcre --with-http_v2_module --
with-stream --with-http_gzip_static_module --add-dynamic-
module=/data/app/geo2db/ngx_http_geoip2_module-3.3
Nginx配置
#user nobody;
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
load_module modules/ngx_http_geoip2_module.so;
events {
worker_connections 4096;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main 1234mutouren "$http_x_forwarded_for" - $remote_addr - $remote_user [$time_local] "$request"
$status $body_bytes_sent "$http_referer"
"$http_user_agent" "$http_x_forwarded_for"
"$connection" "$request_time"
- "$geoip2_country_name_en" "$geoip2_city_name_en"
= "$geoip2_longitude" "$geoip2_latitude" ;
#access_log logs/access.log main;
log_format json_logs escape=json
{"@timestamp":"$time_iso8601",
"host":"$hostname",
"server_ip":"$server_addr",
"client_ip":"$remote_addr",
"remote_user":"$remote_user",
"xff":"$http_x_forwarded_for",
"domain":"$host",
"url":"$uri",
"referer":"$http_referer",
"upstreamtime":"$upstream_response_time",
"responsetime":"$request_time",
"request_method":"$request_method",
"status":"$status",
"size":"$body_bytes_sent",
"request_length":"$request_length",
"protocol":"$server_protocol",
"upstreamhost":"$upstream_addr",
"file_dir":"$request_filename",
"http_user_agent":"$http_user_agent",
#获取国家英文名称
"geoip2_country_name_en":"$geoip2_country_name_en",
"number":"$status",
#获取城市英文名称
"name":"$geoip2_city_name_en",
#获取经纬度
"logLat":"$geoip2_longitude,$geoip2_latitude"
};
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 300;
client_body_buffer_size 15M;
client_body_temp_path clientpath 3 2;
client_max_body_size 30M;
gzip off;
gzip_static on;
gzip_min_length 10k;
gzip_buffers 4 16k;
gzip_comp_level 6;
gzip_types *;
gzip_disable "MSIE [1-6].";
gzip_vary on;
map $http_x_forwarded_for $realip {
~^(d+.d+.d+.d+) $1;
default $remote_addr;
}
#测试 mmdblookup --file /data/app/geo2db/GeoLite2-City.mmdb --ip 202.175.105.131
geoip2 /data/app/geo2db/GeoLite2-Country.mmdb {
auto_reload 5m;
$geoip2_metadata_country_build metadata build_epoch;
#国家编码
$geoip2_country_code source=$realip country iso_code;
#国家英文名
$geoip2_country_name_en source=$realip country names en;
#国家中文名
$geoip2_country_name_cn source=$realip country names zh-CN;
}
geoip2 /data/app/geo2db/GeoLite2-City.mmdb {
$geoip2_metadata_city_build metadata build_epoch;
#城市英文名,大多是拼音,有重复情况
$geoip2_city_name_en source=$realip city names en;
#城市中文名,部分城市没有中文名
$geoip2_city_name_cn source=$realip city names zh-CN;
#城市id,maxmaind 库里的id,非国际标准
$geoip2_data_city_code source=$realip city geoname_id;
#经度,longitude
$geoip2_longitude source=$realip location longitude ;
#维度,latitude
$geoip2_latitude source=$realip location latitude ;
}
# HTTPS server
#
server {
listen 443 ssl;
server_name XXX.XXX.com;
# server_name XXX.XXX.com;
ssl_certificate cert/data.com.pem;
ssl_certificate_key cert/data.com.key;
ssl_session_timeout 5m;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256::!MD5;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
access_log /data/log/nginx/access.log json_logs;
location / {
try_files $uri $uri/ /index.html;
root /data/app/pos ;#静态资源目录
index index.html index.htm;
}
location /api/pos/ {
proxy_pass http://10.50.XXX.XXX:9999/;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /WeChat {
alias /data/app/WeChat ;#静态资源目录
index cfca.html;
}
}
server {
listen 80;
location /nginx_status {
stub_status on;
access_log off;
}
access_log logs/access.log json_logs;
location = /geo {
default_type text/plain;
return 200 countryCode:$geoip2_country_code countryNameEn: $geoip2_country_name_en countryNameCn: $geoip2_country_name_cn cityNameEn: $geoip2_city_name_en cityNameCn: $geoip2_city_name_cn cityCode: $geoip2_data_city_code ;
}
}
}
访问测试
#curl -H "X-Forwarded-For: 124.72.XXX.255,42.248.50.9,202.5.XX.71" 10.XX.133.159/geo
countryCode:CN
countryNameEn: China
countryNameCn: 中国
cityNameEn: xxzhou
cityNameCn: XX市
cityCode: 18x0821
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129438.html
摘要:自带的上传进度功能,需要扩展支持。于是想到利用的模块来实现上传进度。接下来使用模块替代的文件上传功能,目的是提高文件上传的性能。而且可以避免上传大文件时执行超时引起错误。新建一个对象,把设置成刚上传的文件。 Drupal 8 自带的上传进度功能,需要PECL uploadprogress library扩展支持。安装后发现效果还是不太好,不知道什么原因,进度条不能正常显示,而且上传较大...
摘要:自带的上传进度功能,需要扩展支持。于是想到利用的模块来实现上传进度。接下来使用模块替代的文件上传功能,目的是提高文件上传的性能。而且可以避免上传大文件时执行超时引起错误。新建一个对象,把设置成刚上传的文件。 Drupal 8 自带的上传进度功能,需要PECL uploadprogress library扩展支持。安装后发现效果还是不太好,不知道什么原因,进度条不能正常显示,而且上传较大...
摘要:需求背景系统有数据识别数据脱敏逻辑,支持可配置规则,自定义等,需要进行异构数据同步,大数据量。可用性分析可用性表格分析场景影响降级原因某台数据同步下线无影响数据同步无状态,调度平台重连其他的数据同步服务。 需求背景 系统有数据识别、数据脱敏逻辑,支持可配置规则,自定义等,需要进行异构数据同步,大数据量。现在针对以下几个需求进行讲解 1、支持冗余设计2、支持任务自动分发,支持自动负载均衡...
摘要:例如响应部分通过的形式获取或设置响应头信息。以某个状态码返回响应内容,状态码常量对应关系见部分,也支持数字形式的状态码。重定向当前请求到新的,响应状态码可选列表为默认。具体内容如下相关文章进入的世界在的应用 首发于 樊浩柏科学院 当 Nginx 标准模块和配置不能灵活地适应系统要求时,就可以考虑使用 Lua 扩展和定制 Nginx 服务。OpenResty 集成了大量精良的 Lua 库...
摘要:从主关注点中分离出横切关注点是面向侧面的程序设计的核心概念。最终我们采用的是通过的模块来将以面向侧面的思路耦合。原文使用优化面向侧面的架构 面向侧面的程序设计(aspect-oriented programming,AOP),通过将解决特定领域问题的代码从业务逻辑中独立出来,从而提高代码的可维护性。 从主关注点中分离出横切关注点是面向侧面的程序设计的核心概念。分离关注点使得解决特定领域...
阅读 1346·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1858·2023-01-11 13:20
阅读 4099·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3594·2023-01-11 13:20