openresty的简单使用_u014036123的博客-CSDN博客_openresty include


本站和网页 https://blog.csdn.net/u014036123/article/details/79753823 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

openresty的简单使用_u014036123的博客-CSDN博客_openresty include
openresty的简单使用
u014036123
于 2018-03-30 10:30:08 发布
4913
收藏
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014036123/article/details/79753823
版权
Openresty: Nginx核心加很多第三方模块组成,默认集成lua开发环境,提供了大量组件如Mysql、Redis、Memcached等等。
安装
(1)步骤
#!/bin/bash
tar xvf openresty-1.9.7.3.tar.gz
cd openresty-1.9.7.3
./configure --with-luajit --with-http_drizzle_module --with-http_iconv_module --with-ld-opt="-Wl,-rpath,/usr/local/lib"  --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module
gmake
gmake install
--with-luajit              集成luajit模块
(2)安装结果
Luajit:luajit环境,lua是一种解释语言,通过luajit可以即时编译lua代码到机器代码,得到很好的性能。
Lualib:要使用的lua库,里边提供了一些默认的lua库,如redis,json库等,也可以把一些自己开发的或第三方库放在这。
Config:存放nginx配置文件。
(3)配置环境
a.配置配置文件路径
在http{}块中添加如下内容:
include     /usr/local/openresty/config/*.conf;
所有的配置文件存放在/usr/local/openresty/config/目录下。
b.另外,如果在测试环境中,为了在修改完lua代码之后立即生效,不需要执行nginx -s reload,可以在http{}块中添加lua_code_cache off;默认开启,表示缓存lua代码。
3、nginx+lua开发
(1)流程:
a).接收请求
nginx配置文件
在/usr/local/openresty/config/目录下创建xxx.conf文件,名字随意。
hello.conf
server {
   listen 80;
   server_name        xxx.xxx.xxx.xxx;
   access_log          /var/log/hello_access_80.log  main;
   location /hello {
     default_type "text/html";
     #接收到请求后,hello.lua做处理
     content_by_lua_file /usr/local/openresty/lua/hello.lua;
   }
对外提供的接口为http://xxx.xxx.xxx.xxx/hello
b).处理请求
hello.lua
local uri_args = ngx.req.get_uri_args()
for k, v in pairs(uri_args) do
  ngx.say(k, ": ", v, "
")
end
ngx.say("hello")
表示获取请求参数。以k:v方式输出。
c).获取响应
浏览器:http://xxx.xxx.xxx.xxx/hello?instance=100&params=test
params: testinstance: 100hello
(2)常用API
1、基础API
a).ngx.var: nginx变量
案例:
nginx配置文件:
location /var {
   default_type "text/html";
   set $a 1;
   set $b 2;
   content_by_lua_file /data/local/openresty/lua/var.lua;
lua文件:
local var = ngx.var
ngx.say("ngx.var.a: "..var.a.."
")
ngx.say("ngx.var.b: "..var.b.."
")
ngx.say("ngx.var.uri: "..var.uri.."
")   
ngx.say("ngx.var.remoteip: ".. ngx.var.remote_addr)    
ngx.var.uri获取location后的值。
ngx.var.remote_addr获取客户端ip。
b).ngx.req.get_method():获取请求类型
获取POST,GET等请求类型。
c).ngx.req.get_uri_args():获取url请求参数
适用于get请求的请求参数。参考上面的案例。
d).ngx.req.get_post_args():获取post请求内容体
在之前需要调用ngx.req.read_body()读取body体。
案例:
ngx.req.read_body()
local uri_args = ngx.req.get_post_args()
ngx.say(uri_args.method)
但采用postman发送请求,该方法无法获取到postman的参数,适用于表单以及js发送ajax请求。
e).ngx.req.get_body_data():获取post请求参数
cjson = require("cjson")
ngx.req.read_body()
local uri_args = ngx.req.get_body_data()
uri_args = cjson.decode(uri_args)
ngx.say(uri_args.method)
若通过postman发送post请求,获取到的参数是未解析的请求body体内容字符串,采用该方法获取参数。
f).ngx.say()、ngx.print():输出响应
ngx.say("hello")      --表示输出hello/r/n
ngx.print("hello")     --表示输出hello
3、nginx+lua全局内存
nginx是一个Master进程多个Worker进程的工作方式,因此我们可能需要在多个Worker进程中共享数据,那么此时就可以使用ngx.shared.DICT来实现全局内存共享。
(1)在nginx.conf文件中分配内存大小
lua_shared_dict shared_data 10m
(2)nginx路由配置
   location /dict {
     default_type "text/html";
     content_by_lua_file /usr/local/openresty/lua/dict.lua;
   }
(2)lua代码
a).案例1:
--获取共享内存变量
local shared_data = ngx.shared.shared_data
--获取字典值
local port = shared_data:get("port")
if not port then
  ngx.say("port is null ")
  --设置字典值
  shared_data:set("port", "3306")
end
--重新获取字典值
local port_new = shared_data:get("port")
ngx.say("port_new: "..port_new)
b).案例2:
local shared_data = ngx.shared.shared_data
--删除字典
shared_data:delete("port")
--获取字典
local port = shared_data:get("port")
if not port then
  ngx.say("port is null
")
end
4、nginx+lua访问控制模块
nginx共11个处理阶段,而相应的处理阶段是可以做插入式处理,即可插拔式架构;另外指令可以在http、server、server if、location、location if几个范围进行配置:
(1)init_by_lua、init_by_lua_file
使用范围:http
阶段:    loading-config
当 nginx master 进程在加载 nginx 配置文件时运行指定的 lua 脚本,通常用来注册 lua 的全局变量或在服务器启动时预加载 lua 模块。
案例1:
a).nginx.conf(在http{}块中)
init_by_lua 'cjson = require "cjson"';
b).配置文件
   location /init {
     default_type "text/html";
     content_by_lua 'ngx.say(cjson.encode({dog = 5, cat = 6}))';
   }
案例2:
a).nginx.conf(在http{}块中)
init_by_lua '
local shared_data = ngx.shared.shared_data;
shared_data:set("test",50)
';
b).配置文件
   location /test {
     default_type "text/html";
     content_by_lua '
local shared_data = ngx.shared.shared_data;
ngx.say(shared_data:get("test"))
';
   }
不要在这个阶段初始化你的私有lua全局变量,因为使用lua全局变量会照成性能损失,并且可能导致全局命名空间被污染。
(2)init_worker_by_lua、init_worker_by_lua_file
使用范围:http
阶段:starting-worker
这个hook通常用来创建每个工作进程的计时器(通过lua的ngx.timer API),进行后端健康检查或者其它日常工作。
(3)set_by_lua、set_by_lua_file
使用范围:server、server if、location、location if
阶段:rewrite
设置一个变量,常用与计算一个逻辑,然后返回结果 该阶段不能运行Output API、Control API、Subrequest API、Cosocket API。
Output API: (ngx.say和ngx.send_headers)
Control API: (ngx.exit)
Subrequest API: (ngx.location.capture和ngx.location.capture_multi)
Cosocket API: (ngx.sleep)
这个指令是为了执行短期、快速运行的代码因为运行过程中nginx的事件处理循环是处于阻塞状态的。耗费时间的代码应该被避免。
案例:
a).配置文件
   location /set {
     default_type "text/html";
     set $diff '';
     set_by_lua_file $num /usr/local/openresty/lua/set.lua;
     echo "sum = $num, diff = $diff";
   }
b).lua代码
local a = 32
local b = 56
ngx.var.diff = a - b;
return a + b;
set_by_lua_file运行Nginx外部的lua脚本,能够避免在配置文件里使用大量的转义。
(4)rewrite_by_lua、rewrite_by_lua_file
实现url重写。在rewrite阶段运行。
a).配置文件
   location /rewrite {
     default_type "text/html";
     rewrite_by_lua_file /data/local/openresty/lua/rewrite.lua;
     echo 'in rewrite';
   }
   location =/other {
     default_type "text/html";
     echo 'in other';
   }
b).lua代码
rewrite.lua代码
ngx.exec("/other")
此时发送请求http://xxx.xxx.xxx.xxx/rewrite,由于location被rewrite改写了,所以请求结果为in other。
(5)access_by_lua、access_by_lua_file
执行在access阶段。用于訪问控制。
a).配置文件
   location /access {
     default_type "text/html";
     access_by_lua_file /data/local/openresty/lua/access.lua;
     echo "welcome";
   }
b).lua代码
if ngx.var.arg_user == "ntes" then
  return
else
  ngx.exit(ngx.HTTP_FORBIDDEN)
end
当访问http://xxx.xxx.xxx.xxx/access?user=ntes,输出welcome
当访问http://xxx.xxx.xxx.xxx/access?user=test,输出403Forbidden
(6)content_by_lua、content_by_lua_file
在content阶段运行,生成http响应。因为content阶段仅仅能有一个handler。所以在与echo模块使用时,不能同一时候生效,我测试,添加echo后,只输出echo后的结果。
查看上面的案例。
(7)ngx.location.capture
用于发出一个同步的,非堵塞的Nginxsubrequest(子请求)。
a).配置文件
   location =/other {
     default_type "text/html";
     echo 'in other';
   }
   location /capture {
     default_type "text/html";
     content_by_lua_file /data/local/openresty/lua/capture.lua;
   }
b).lua代码
local res = ngx.location.capture("/other")
if res.status == 200 then
  ngx.print(res.body)
end
(8)ngx.location.capture_multi
并行的、非堵塞的发出多个子请求
a).配置文件
   location /son {
     default_type "text/html";
     echo "in son";
   }
   location /daughter {
     default_type "text/html";
     echo "in daughter";
   }
   location /multi {
     default_type "text/html";
     content_by_lua_file /data/local/openresty/lua/multi.lua;
   }
b).lua代码
local res1,res2 = ngx.location.capture_multi({{"/son"}, {"/daughter"}})
if res1.status == 200 then
  ngx.say(res1.body)
end
if res2.status == 200 then
  ngx.say(res2.body)
end
ngx.location.capture_multi并行的、非堵塞的发出多个子请求。这种方法在全部子请求处理完毕后返回。而且整个方法的执行时间取决于执行时间最长的子请求,并非全部子请求的执行时间之和。
在Lua代码中的网络IO操作仅仅能通过Nginx Lua API完毕。假设通过标准Lua API会导致Nginx的事件循环被堵塞,这样性能会急剧下降。在进行数据量相当小的磁盘IO时能够採用标准Lua io库,可是当读写大文件时这样是不行的,由于会堵塞整个NginxWorker进程。为了获得更大的性能。强烈建议将全部的网络IO和磁盘IO托付给Nginx子请求完毕(通过ngx.location.capture)。
5、nginx+lua web网页开发(模板渲染)
(1)下载template.lua
进入/usr/local/openresty/lualib/resty目录,下载template.lua
wget https://raw.githubusercontent.com/bungle/lua-resty-template/master/lib/resty/template.lua
(2)配置模板位置
在server{}中添加   
set $template_location "/template";
set $template_root "/usr/local/openresty/template/";
(3)nginx配置
   location /template {
     default_type "text/html";
     content_by_lua_file /usr/local/openresty/lua/template.lua;
   }
(4)lua代码(template.lua)
local template = require "resty.template"
  
local context = {  
    title = "测试",  
    name = "张三",  
    description = "成绩统计",  
    age = 20,  
    hobby = {"电影", "音乐", "阅读"},  
    score = {语文 = 90, 数学 = 80, 英语 = 70},  
    score2 = {  
        {name = "语文", score = 90},  
        {name = "数学", score = 80},  
        {name = "英语", score = 70},  
    }  
}    
template.render("template.html", context)
(7)html代码(template.html)
<!DOCTYPE html>
<html>
   <head>
     <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
   </head>
   <body>  
      {# 不转义变量输出 #}  
      姓名:{* string.upper(name) *}
      
 
      {# 转义变量输出 #}  
      简介:{{description}}
      
 
      {# 可以做一些运算 #}  
      年龄: {* age + 1 *}
      
 
      {# 循环输出 #}  
      爱好:  
      {% for i, v in ipairs(hobby) do %}  
         {* v *}  
      {% end %}
      
 
  
      成绩:  
      {% local i = 1; %}  
      {% for k, v in pairs(score) do %}  
         {* k *} = {* v *}  
         {% i = i + 1 %}  
      {% end %}
      
 
      成绩2:  
      {% for i = 1, #score2 do local t = score2[i] %}  
          {* t.name *} = {* t.score *}  
      {% end %}
      
 
      {# 中间内容不解析 #}  
   </body>
</html>
(8)访问http://xxx.xxx.xxx.xxx/template
可以随意改变lua中的值去渲染页面。
PS
下方是我个人订阅号,会一直更新各类技术文章,欢迎关注  :)
u014036123
关注
关注
点赞
收藏
打赏
评论
openresty的简单使用
Openresty: Nginx核心加很多第三方模块组成,默认集成lua开发环境,提供了大量组件如Mysql、Redis、Memcached等等。安装(1)步骤#!/bin/bashtar xvf openresty-1.9.7.3.tar.gzcd openresty-1.9.7.3./configure --with-luajit --with-http_drizzle_module --wi...
复制链接
扫一扫
OpenResty篇01-入门简介和安装配置
tinychen
02-27
943
本文主要对openresty做入门简介以及初始化的安装配置介绍。
1、OpenResty简介
了解过web服务器的同学肯定对nginx不陌生,nginx作为目前占有率第一的web服务器,本身作为静态web服务器、反向代理服务和四层、七层负载均衡器都有着非常优秀的表现。但是对于web服务器而言,nginx的很多功能都偏向于静态web应用,也就是说它的动态处理能力是有一定的缺失的。举个最简单的例子,nginx无法在配置中直接进行一个条件以上的逻辑判断,这对于一些架构设计来说有着较大的不便。OpenResty的
openresty健康检查lua-resty-upstream-healthcheck分析和拓展
u011468619的博客
07-16
3674
网关作为流量的入口,承上启下的中枢,对上游节点的健康状态监测是比不可少的;若上游节点异常,网关需要动态摘除此节点,避免流量转到异常节点去,保证服务的稳定。
本文主要分析lua-resty-upstream-healthcheck源码,以及在实际工作的优化应用。
一、背景介绍
目前本人负责的网关是基于orange二次开发的,health_check健康检查功能是基于插...
参与评论
您还未登录,请先
登录
后发表或查看评论
windows下安装openresty_lua的开发环境
最新发布
one_week的专栏
11-14
130
上面的命令中," -p ./ “表示将当前目录” D:\Program Files\openresty-1.19.9.1-win64"作为前缀路径,也就是 说,nginx-debug.conf配置文件中所用到的相对路径都加上这个前缀。Openresty的原始启动命令为Nginx,其参数大致有-v、-t、-p、-c、-s等,大致的使用说明如下。-t:表示测试Nginx的配置文件。打开openresty的中文官网,下载网站为:http://openresty.org/cn/download.html。
openresty-1.19.3.2安装以及nginx_upstream_check_module健康检查模块安装
qq_37139220的博客
05-17
880
1、背景说明:
OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
简单地说OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进
openresty (nginx)负载均衡+高可用配置
西京刀客
05-11
742
超详细的Nginx负载均衡+高可用配置(亲测附图)
参考URL: https://blog.csdn.net/IT_10/article/details/89365436
什么是负载均衡
当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。
我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器
谈openresty nginx upstream 模块健康检查bug
wzjudy的专栏
05-09
1639
openresty nginx upstream ,在工作过程中遇到过upstream的健康检查结果一开始为不健康后,断开网络,然后重启网络,后端恢复健康,但是upstream的健康检查还是为不健康bug,其该问题已有大神对其做了修改并提交github请见链接:https://github.com/yaoweibin/nginx_upstream_check_module/pull/146/fil...
openresty相关应用代理配置
xiaofengjiansa的博客
06-22
312
openresty相关应用代理配置修改响应头cookie加入secure
修改响应头cookie加入secure
header_filter_by_lua_block{
local cookies = ngx.header.set_cookie
if cookies then
if type(cookies) == “table” then
local cookie={}
for k,v in pairs(cookies) do
cookie[k]=v…";httponly"
end
ngx.header.
详解nginx的原生被动健康检查机制&灾备使用(含测试)
不懂的博客
09-16
2843
nginx作为一个集web服务器、cache、7层lb于一身的全能型选手,已经应用到互联网各种领域,其高性能、易使用的技术品质深得人心,连同在其基础上二开的tengine、openresty都有很大的用户量,今天剖开讲一下nginx健康检查和灾备的机制。
先简单说一下在生产环境的应用场景,健康检查就不多讲了,目的是为了实时摘掉有问题的后端。说一下灾备,我们业务上是为了做专线和公网的互备,因为有海...
Openresty Redis正确使用连接池(set_keepalive)
ole_triangle_java的博客
12-30
1396
最近在做一个openresty项目,每次访问需要通过openresty读取redis,判断是否可以允许访问。
问题:
如果每次访问就要与redis建立连接,当并发量大时,连接数会直接爆炸。影响性能和系统。
方案一:
在init_by_lua中先创建redis连接,在access_by_lua中直接使用:
init.lua:
local redis = require "redis"
client = redis.connect('127.0.0.1', 6379)
filter.lua(演示
Openresty最佳案例 | 第9篇:Openresty实现的网关权限控制
weixin_30666401的博客
11-23
935
转载请标明出处:
http://blog.csdn.net/forezp/article/details/78616779
本文出自方志朋的博客
简介
采用openresty 开发出的api网关有很多,比如比较流行的kong、orange等。这些API 网关通过提供插件的形式,提供了非常多的功能。这些组件化的功能往往能够满足大部分的需求...
OpenResty初步使用
Yoara的备忘录
09-09
8510
OpenResty
OpenResty ™ 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有
Openresty案例讲解
MKC__jiaoq的博客
12-03
548
前言
我们都知道Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者对其望而生畏。为了开发人员方便,所以接下来我们要介绍一种整合了Nginx和lua的框架,那就是OpenResty,它帮我们实现了可以用lua的规范开发,实现各种业务,并且帮我们弄清楚各个模块的编译顺序。关于OpenResty,我想大家应该不再陌生,随着系统架构的不断升级、优化,OpenResty在被广泛的.
openresty安装及配置
牧竹子
05-11
2806
资料准备
http://openresty.org/cn/download.html
centos 版本需要
参考资料:
https://moonbingbing.gitbooks.io/openresty-best-practices/content/ngx/if_is_evil.html
windows安装
下载windows版本的openresty:
解压启动nginx.exe:
双击ngi...
openresty及lor入门教程
隔壁老王呀的专栏
06-08
805
开发环境准备
openresty安装
下载openresty-1.13.6.1-win32.zip,解压到本地任一目录
eclipse安装lua插件
eclipse–>help–>eclipse marketplace–>输入lua,只能查到一个,下载并安装
环境配置说明
打开openresty的目录,找到conf文件夹下的nginx.conf
找到http下的server部分,listen对应的是端口号,可以修改。增加 include 语句,引入分配置文件,对应的是自己lua项目
第五章 常用Lua开发库3-模板渲染
jinnianshilongnian的专栏
03-01
368
动态web网页开发是Web开发中一个常见的场景,比如像京东商品详情页,其页面逻辑是非常复杂的,需要使用模板技术来实现。而Lua中也有许多模板引擎,如目前我在使用的lua-resty-template,可以渲染很复杂的页面,借助LuaJIT其性能也是可以接受的。
如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet来执行;而lua-rest...
Openresty的开发闭环初探
weixin_34214500的博客
01-13
90
为什么值得入手?
Nginx作为现在使用最广泛的高性能后端服务器,Openresty为之提供了动态预言的灵活,当性能与灵活走在了一起,无疑对于被之前陷于臃肿架构,苦于提升性能的工程师来说是重大的利好消息,本文就是在这种背景下,将初入这一未知的领域之后的一些经验与大家分享一下,若有失言之处,欢迎指教。
安装
现在除了能在 Download...
https请求 nginx 不生效_一个非常强大和友好的nginx基于lua-nginx-module(openresty)
weixin_29560137的博客
01-02
129
一个非常强大和友好的nginx基于lua-nginx-module(openresty),提供WAF,控制面板和仪表板VeryNginxVeryNginx是一个非常强大和友好的nginx。中文文档注意在v0.2之后,控制面板的输入uri被移动到 /verynginx/index.html描述VeryNginx基于lua_nginx_module(openrestry)。它实现了高级防火墙(waf)...
OpenResty使用实例
qq_35278597的博客
04-24
2551
OpenResty使用实例
OpenResty是什么
OpenResty是什么,官网是这样介绍的:
通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台
的确,OpenResty可以简单的理解为Nginx + Lua,通过Lua库引入数据库访问能力,真正的让Nginx向搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关这一目标迈出了重要的一步
OpenResty的配置
OpenResty的配置可以分为2类
lua脚本
Nginx配置文件
下面列举几个
在CentOS 6.6上搭建OpenResty 1.9.7.4并输出示例
雪峰流云
05-22
4193
下面是我在阅读《OpenResty最佳实践》时的实践细节,特此记录一下。这是一份值得反复阅读且十分宝贵的资料,感谢360的开源!
简介
OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。
OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本
ngx_lua模块API说明
zhangge3663的博客
09-29
1589
ngx_lua模块API说明
#Ngx指令
lua_code_cache on | off;
作用:打开或关闭Lua代码缓存,影响以下指令:set_by_lua_file,content_by_lua_file,rewrite_by_lua_file, access_by_lua_file及强制加载或者reload Lua模块等。缓存开启时修改LUA代码需要重启nginx,不开启时则不用。开...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
u014036123
CSDN认证博客专家
CSDN认证企业博客
码龄9年
暂无认证
17
原创
12万+
周排名
93万+
总排名
4万+
访问
等级
549
积分
粉丝
获赞
评论
21
收藏
私信
关注
热门文章
前端为什么要做组件化
15927
openresty的简单使用
4913
ingress安装和使用测试
3530
python urllib2 出现HTTP Error 400: Bad Request
2679
echart自动轮训显示tooltip
2650
分类专栏
rails
1篇
python
1篇
openresty
2篇
前端
2篇
k8s
2篇
helm
1篇
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
rails 自定义校验并只在创建接口的时候做校验
python urllib2 出现HTTP Error 400: Bad Request
lua加密
2019年6篇
2018年8篇
2017年1篇
2016年2篇
2015年4篇
目录
目录
分类专栏
rails
1篇
python
1篇
openresty
2篇
前端
2篇
k8s
2篇
helm
1篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
u014036123
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值

Copyright ©uecom 京ICP备18064371号-1 IPV6
2024-03-29 05:59:55
uenu.com
10.0.12.16