openresty开发系列11--openresty的api入门
openresty开发系列11--openresty的api入门
1)ngx_lua模块的hello world
编辑nginx下conf配置文件nginx.conf
# vi nginx.conf
在server模块加上
location /helloworld {
default_type text/html;
content_by_lua 'ngx.say("hello world")';
}
检查配置文件是否正确
# /usr/local/openresty/nginx/sbin/nginx -t -c /usr/local/openresty/nginx/conf/nginx.conf
重启nginx
# ./nginx -s reload
访问http://10.11.0.215/helloworld 输出 hello world
2)nginx的内部变量
名称 说明
$arg_name 请求中的name参数
$args 请求中的参数
$binary_remote_addr 远程地址的二进制表示
$body_bytes_sent 已发送的消息体字节数
$content_length HTTP请求信息里的"Content-Length"
$content_type 请求信息里的"Content-Type"
$document_root 针对当前请求的根路径设置值
$document_uri 与$uri相同; 比如 /test2/test.php
$host 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名
$hostname 机器名使用 gethostname系统调用的值
$http_cookie cookie 信息
$http_referer 引用地址
$http_user_agent 客户端代理信息
$http_via 最后一个访问服务器的Ip地址。
$http_x_forwarded_for 相当于网络访问路径
$is_args 如果请求行带有参数,返回“?”,否则返回空字符串
$limit_rate 对连接速率的限制
$nginx_version 当前运行的nginx版本号
$pid worker进程的PID
$query_string 与$args相同
$realpath_root 按root指令或alias指令算出的当前请求的绝对路径。其中的符号链接都会解析成真是文件路径
$remote_addr 客户端IP地址
$remote_port 客户端端口号
$remote_user 客户端用户名,认证用
$request 用户请求
$request_body 这个变量(0.7.58+)包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义
$request_body_file 客户端请求主体信息的临时文件名
$request_completion 如果请求成功,设为"OK";如果请求未完成或者不是一系列请求中最后一部分则设为空
$request_filename 当前请求的文件路径名,比如/opt/nginx/www/test.php
$request_method 请求的方法,比如"GET"、"POST"等
$request_uri 请求的URI,带参数; 比如http://localhost:88/test1/
$scheme 所用的协议,比如http或者是https
$server_addr 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费)
$server_name 请求到达的服务器名
$server_port 请求到达的服务器端口号
$server_protocol 请求的协议版本,"HTTP/1.0"或"HTTP/1.1"
$uri 请求的URI,可能和最初的值有不同,比如经过重定向之类的
写个配置文件,测试一下$uri变量
location /test_url {
echo "url:$uri";
}
location /test_url {
echo "url:$uri";
echo "full url : $host$request_uri";
}
重启nginx,访问
再此基础上测试$args变量
location /test_url {
echo "url:$uri----args:$args";
}
再此基础上测试$arg_name变量
location /test_url {
echo "url:$uri----args:$args--------arg_name:$arg_name";
}
说明一下,$arg_name表示取名为name的参数,如果想取其他名称的参数可以对应的取该参数名
location /test_url {
echo "url:$uri --- args:$args --- arg_name:$arg_name <br/>";
echo "arg_user:$arg_user --- arg_age:$arg_age<br/>";
echo "arg_test:$arg_test";
}
test参数名不存在,则为空。
自定义变量
location /test_def {
set $name "rainbow";
echo $name;
}
set 设置的变量 为局部变量,其他请求无法获取此$name的值
location /test_def {
set $name "rainbow";
echo_exec /test_def2; ##内部跳转,可以传递变量
}
location /test_def2 {
echo $name;
}
# 传递变量,访问http://www.server1.com/test_var1 可以打印cityname的值
location /test_var1{
set $cityname "shenzhen";
echo_exec /test_var2;
}
location /test_var2{
echo "test_var2=$cityname";
}
简单配置示例:
[root@node5 conf]# cat /usr/local/openresty/nginx/conf/nginx.conf
worker_processes ;
#pid logs/nginx.pid;
events {
worker_connections ;
}
http {
include mime.types;
#default_type application/octet-stream;
default_type text/html;
sendfile on;
keepalive_timeout ;
server {
listen ;
server_name www.server1.com;
location /lua {
content_by_lua 'ngx.say("hello world")';
}
location /test_url {
echo "url:$uri";
echo "full url : $host$request_uri";
echo "url:$uri --- args:$args";
echo "args_username:$arg_username";
set $name "jackson";
echo "$name";
}
location /test_url2{
echo $name;
}
location /test_var1{
set $cityname "shenzhen";
echo_exec /test_var2;
}
location /test_var2{
echo "test_var2=$cityname";
}
location / {
root html;
index index.html index.htm;
}
error_page /50x.html;
location = /50x.html {
root html;
}
}
}
openresty开发系列11--openresty的api入门的更多相关文章
- openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息
openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息 为了实现业务系统针对不同地区IP访问,展示包含不同地区信息的业务交互界面.很多情况下系统需要根据用户访问的IP信息 ...
- openresty开发系列37--nginx-lua-redis实现访问频率控制
openresty开发系列37--nginx-lua-redis实现访问频率控制 一)需求背景 在高并发场景下为了防止某个访问ip访问的频率过高,有时候会需要控制用户的访问频次在openresty中, ...
- openresty开发系列33--openresty执行流程之3重写rewrite和重定向
openresty开发系列33--openresty执行流程之3重写rewrite和重定向 重写rewrite阶段 1)重定向2)内部,伪静态 先介绍一下if,rewrite指令 一)if指令语法:i ...
- openresty开发系列33--openresty执行流程之2重写赋值阶段
openresty开发系列33--openresty执行流程之2重写赋值阶段 一)重写赋值阶段 1)set_by_lua 语法:set_by_lua $res <lua-script-str&g ...
- openresty开发系列28--openresty中操作mysql
openresty开发系列28--openresty中操作mysql Mysql客户端 应用中最常使用的就是数据库了,尤其mysql数据库,那openresty lua如何操作mysql呢? ...
- openresty开发系列26--openresty中使用redis模块
openresty开发系列26--openresty中使用redis模块 在一些高并发的场景中,我们常常会用到缓存技术,现在我们常用的分布式缓存redis是最知名的, 操作redis,我们需要引入re ...
- openresty开发系列24--openresty中lua的引入及使用
openresty开发系列24--openresty中lua的引入及使用 openresty 引入 lua 一)openresty中nginx引入lua方式 1)xxx_by_lua ---> ...
- openresty开发系列38--通过Lua+Redis 实现动态封禁IP
openresty开发系列38--通过Lua+Redis 实现动态封禁IP 一)需求背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单.对于黑名单之内的 IP ,拒绝 ...
- openresty开发系列36--openresty执行流程之6日志模块处理阶段
openresty开发系列36--openresty执行流程之6日志模块处理阶段 一)header_filter_by_lua 语法:header_filter_by_lua <lua-scri ...
随机推荐
- java 实现 单链表
class Node{ public int val; public Node next; public Node(int val){ this.val=val; } } class LinkList ...
- DT二次开发之-采购页面加入好看的倒计时
加入采购页面倒计时,个人感觉挺漂亮的,做下笔记. <span id="timer" ></span> {if $totime} <script typ ...
- 启动Vue项目,提示:Cannot find module 'webpack/bin/config-yargs'
"webpack-dev-server": "^2.11.5"
- 通过命令行运行java出现"错误: 找不到或无法加载主类 "解决办法
首先在命令行运行不需要写package路径, 而在ide中一般是有路径的 so举例说明 例如程序名为HelloWorldTest.java,程序中含有package helloWorld语句,而该包位 ...
- DELL--R420 CPU报警“CPU0000 cpu2 internal error (IERR)contact support”
按照以下操作解决: 请用户按以下操作,搞定. 请使用一台服务器测试: 开机看到dell标志时,按F2键→"System BIOS Setting" →"System Pr ...
- 学习Spring-Data-Jpa(一)---JPA、Spring-Data-Jpa简介
写在前面:在国内使用比较多的ORM框架应该就是Mybatis了,但是现在SpringBoot和SpringCloud这么火爆,而Spring-Data-Jpa同样作为Spring家族的成员,它们无缝的 ...
- [React] Create an Animate Content Placeholder for Loading State in React
We will create animated Content Placeholder as React component just like Facebook has when you load ...
- python字符串、字符串处理函数及字符串相关操作
python字符串.字符串处理函数及字符串相关操作 字符串介绍 python字符串表示 Python除处理数字外还可以处理字符串,字符串用单撇号或双撇号包裹: >>> 'spam e ...
- windbg调试托管代码 .Net clr
现在很多的程序都是多语言混合编程的,比如我司的产品,就是用C++/.net clr混合编制的.那么当我们调试这样的程序时,一定要注意,比如有时我们只看到c++的栈和名称,而.net clr的代码确看不 ...
- 普通的checkbox的回显功能
var ypxt=document.getElementsByName("map.LCSYLB"); var jgjg='${map.LCSYLB}'; ...