在本文中,我们将给您介绍关于nginx限流,以及nginx直接返回json格式数据的详细内容,并且为您解答nginx如何实现限流的相关问题,此外,我们还将为您提供关于Centos7yum源安装ngin
在本文中,我们将给您介绍关于nginx 限流,以及nginx直接返回json格式数据的详细内容,并且为您解答nginx如何实现限流的相关问题,此外,我们还将为您提供关于Centos7 yum 源安装nginx以及nginx配置介绍、Django 1.8.11 查询数据库返回JSON格式数据、Go语言gin框架返回json格式里,怎么把某个int属性转成string返回?、nginx log以JSON格式记录的知识。
本文目录一览:- nginx 限流,以及nginx直接返回json格式数据(nginx如何实现限流)
- Centos7 yum 源安装nginx以及nginx配置介绍
- Django 1.8.11 查询数据库返回JSON格式数据
- Go语言gin框架返回json格式里,怎么把某个int属性转成string返回?
- nginx log以JSON格式记录
nginx 限流,以及nginx直接返回json格式数据(nginx如何实现限流)
高并发系统有三把利器用来保护系统:缓存、降级和限流
今天我们这里说说限流。一般会在应用层配合redis做限流策略,这里我们聊聊nginx层限流。
限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务,以防止非预期的请求对系统压力过大而引起的系统瘫痪(友好点比如直接返回相应的json或则页面提示用户访问高峰,稍后再试)
限流一般有三种: 计数器 、漏桶算法、令牌桶算
关于限流算法不是本文讨论范围,定义网上有大把介绍
1.先说下nginx里面配置直接返回json如何操作。
location /json/ {
default_type application/json;
add_header Content-Type ''text/html; charset=utf-8'';
return 200 ''{"code":"6666,"msg":"访问高峰期..."}'';
}
Nginx限流配置
#限流
limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=2r/s;
location / {
#限流
limit_req zone=myRateLimit burst=2 nodelay;
root html;
index index.html index.htm;
}
名词解释:
第1个参数:limit_req_zone定义在http块中,$binary_remote_addr表示保存客户端IP地址的二进制形式。
第2个参数:Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息约1MB,所以示例中区域可以存储160000个IP地址。
第3个参数:Rate定义最大请求速率。示例中速率不能超过每秒2个请求。
超过限流,默认返回503状态
然后我们在503错误页面配置返回相应json或者html页面即可。这里我们返回json
error_page 503 /503;
location = /503 {
default_type application/json;
add_header Content-Type ''text/html; charset=utf-8'';
return 200 ''{"code":"6666,"msg":"访问高峰期..."}'';
}
展示结果如下
正常返回结果
限流后返回结果
至此nginx限流搞定
Centos7 yum 源安装nginx以及nginx配置介绍
Centos7 yum 源安装Nginx以及Nginx配置介绍
(1)安装
1.1添加Nginx存储库
yum install epel-release
1.2开始安装Nginx
yum install Nginx
中途这两个命令会提示你是否继续 你只需要一路 yyyyyyyyyyy
到这里 Nginx已经安装好了
1.3Nginx启动需要注意的地方
1.Nginx端口是否被占用 ,Nginx默认端口为80端口
2.服务器是否开启80端口防护墙以及开放对应安全组
下方命令为开启80端口防火墙,云服务器的话设置安全组需要登录阿里云或者腾讯云开放安全组
firewall-cmd --zone=public --add-port=80/tcp --permanent
启动试一试!!
附带Nginx常用命令
#启动Nginx 两种命令都可以启动
systemctl start Nginx
Nginx
#设置Nginx开机启动
systemctl enable Nginx
#卸载Nginx命令
yum remove Nginx
#停止Nginx
Nginx -s stop
#重启Nginx
Nginx -s reload
如果没有修改Nginx默认端口 Nginx启动后直接访问服务器Ip(80可默认不写) 即可,如果修改了默认端口,访问方式为服务器 ip:Nginx端口
访问后网页出现一下提示则说明Nginx已成功安装并启动了
Welcome to CentOS
The Community ENTerprise Operating System
(2) Nginx配置
使用yum源安装的Nginx配置默认位置在
/etc/Nginx/Nginx.conf
# For more information on configuration, see:
# * Official English Documentation: http://Nginx.org/en/docs/
# * Official Russian Documentation: http://Nginx.org/ru/docs/
#运行用户
user Nginx;
#启动进程,每个Nginx进程平均耗费10M~12M内存。建议指定和cpu的数量一致即可
worker_processes auto;
#全局错误日志及PID文件
error_log /var/log/Nginx/error.log;
pid /run/Nginx.pid;
# Load dynamic modules. See /usr/share/doc/Nginx/README.dynamic.
include /usr/share/Nginx/modules/*.conf;
#工作模式
events {
#单个后台worker process进程的最大并发链接数
worker_connections 1024;
}
#http服务器,负载均衡以及反向代理都是使用它
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/Nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
#设定mime类型,类型由mime.type文件定义
include /etc/Nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/Nginx/conf.d directory.
# See http://Nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/Nginx/conf.d/*.conf;
#server 块是对虚拟主机的配置,server标志定义虚拟主机开始
server {
#listen用于指定虚拟主机的服务端口,启动后就是虚拟机ip+此指定的端口进行访问
listen 80 default_server;
listen [::]:80 default_server;
#server_name 用来指定IP地址或域名,多个域名之间用空格分开
server_name _;
#root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径
root /usr/share/Nginx/html;
#加载默认服务器组的配置文件.
include /etc/Nginx/default.d/*.conf;
#location块
#URL地址匹配 /a 访问就ip:端口/a
#下方location是我自己目前的配置
#在一个server中 可以配置多个location ,但是“/“必须有一个
location / {
#ftp文件主目录,只允许有一个
root /var/ftp/pub/;
#此访问的首页
index index.html index.htm index.PHP index.jpg index.mp4 index.txt;
}
#404页
error_page 404 /404.html;
location = /40x.html {
}
#500页
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
#第二个location
location /chexuan/ {
alias /ftp/chexuan/;
index index.html index.htm index.PHP index.jpg index.mp4 index.txt;
}
#举例
#访根目录/, 比如http://localhost/ 就会匹配 /var/ftp/pub/下的index文件
#访问目录/chexuan/ 比如http://localhost/chexuan/ 就会匹配 /ftp/chexuan/下的index文件
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/Nginx/html;
#
# ssl_certificate "/etc/pki/Nginx/server.crt";
# ssl_certificate_key "/etc/pki/Nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/Nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
其中location代码块中 root 和alias的区别
root实例:
location /t/ {
root /www/root/html/;
}
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。
alias实例:
location /t/ {
alias /www/root/html/leilei/;
}
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/leilei/a.html的文件。注意这里是leilei,因为alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
注意:
- 使用alias时,目录名后面一定要加"/"。
- alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
- alias只能位于location块中。(root可以不放在location中)
目前Nginx的学习到这就结束了,,后续深入的时候继续更新
Django 1.8.11 查询数据库返回JSON格式数据
Django 1.8.11 查询数据库返回JSON格式数据
和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式
环境
Win10 Python2.7 Django 1.8.11
返回多条数据
示例
import json
from django.http import HttpResponse
from django.core import serializers
def db_to_json(request):
scripts = Scripts.objects.all()[0:1]
json_data = serializers.serialize(''json'', scripts)
return HttpResponse(json_data, content_type="application/json")
返回结果
[{
"fields": {
"script_content": "abc",
"script_type": "1"
},
"model": "home_application.scripts",
"pk": "03a0a7cf-567a-11e9-8566-9828a60543bb"
}]
功能实现了,但是我需要返回一个约定好的JSON格式,查询结果放在 data 中
{"message": ''success'', "code": ''0'', "data": []}
代码如下:
import json
from django.http import HttpResponse
from django.core import serializers
def db_to_json2(request):
# 和前端约定的返回格式
result = {"message": ''success'', "code": ''0'', "data": []}
scripts = Scripts.objects.all()[0:1]
# 序列化为 Python 对象
result["data"] = serializers.serialize(''python'', scripts)
# 转换为 JSON 字符串并返回
return HttpResponse(json.dumps(result), content_type="application/json")
调用结果
{
"message": "success",
"code": "0",
"data": [{
"fields": {
"script_content": "abc",
"script_type": "1"
},
"model": "home_application.scripts",
"pk": "03a0a7cf-567a-11e9-8566-9828a60543bb"
}]
}
有点难受的是,每条数据对象包含 fields,model,pk三个对象,分别代表字段、模型、主键,我更想要一个只包含所有字段的字典对象。虽然也可以处理,但还是省点性能,交给前端解析吧。
返回单个对象
代码:
from django.forms.models import model_to_dict
from django.http import HttpResponse
import json
def obj_json(request):
pk = request.GET.get(''script_id'')
script = Scripts.objects.get(pk=pk)
# 转为字典类型
script = model_to_dict(script)
return HttpResponse(json.dumps(script), content_type="application/json")
返回JSON:
{
"script_id": "1534d8f0-59ad-11e9-a310-9828a60543bb",
"script_content": "3",
"script_name": "3",
"script_type": "1"
}
Go语言gin框架返回json格式里,怎么把某个int属性转成string返回?
Go语言gin框架返回json格式里,怎么把某个int属性转成string返回?
nginx log以JSON格式记录
nginx的日志配置可以参见《nginx日志配置》一文。如果要想以json格式记录nginx日志以便logstash分析,该如何指定日志格式呢?可以按照下面的格式来实现。
定义nginx日志格式:
log_format logstash_json ''{ "@timestamp": "$time_local", ''
''"@fields": { ''
''"remote_addr": "$remote_addr", ''
''"remote_user": "$remote_user", ''
''"body_bytes_sent": "$body_bytes_sent", ''
''"request_time": "$request_time", ''
''"status": "$status", ''
''"request": "$request", ''
''"request_method": "$request_method", ''
''"http_referrer": "$http_referer", ''
''"body_bytes_sent":"$body_bytes_sent", ''
''"http_x_forwarded_for": "$http_x_forwarded_for", ''
''"http_user_agent": "$http_user_agent" } }'';
指定记录日志格式:
access_log /data/logs/nginx/www.ttlsa.com.access.log logstash_json;
日志输出如下:
不利于阅读。复制到http://jsonlint.com/美化下格式。
关于nginx 限流,以及nginx直接返回json格式数据和nginx如何实现限流的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Centos7 yum 源安装nginx以及nginx配置介绍、Django 1.8.11 查询数据库返回JSON格式数据、Go语言gin框架返回json格式里,怎么把某个int属性转成string返回?、nginx log以JSON格式记录等相关内容,可以在本站寻找。
本文标签: