当前位置: 首页 > news >正文

深圳鼎诚网站建设企业手机版网站

深圳鼎诚网站建设,企业手机版网站,营销存在的问题及改进,四川建设厅网站首页nginx的脚本的语法和shell是很像的#xff0c;我大致看了一下觉得挺有意思的#xff0c;就想写写记录一下。我没看过shell脚本的引擎#xff0c;不知道nginx脚本引擎和shell脚本引擎像不像#xff0c;但是我觉得nginx的脚本引擎有点像C和汇编。 ngx_http_script_engine_t这…nginx的脚本的语法和shell是很像的我大致看了一下觉得挺有意思的就想写写记录一下。我没看过shell脚本的引擎不知道nginx脚本引擎和shell脚本引擎像不像但是我觉得nginx的脚本引擎有点像C和汇编。 ngx_http_script_engine_t这个结构就代表了一段脚本ip指向的是编译好的脚本sp指向的是一块内存用来存储脚本运行的时候产生的一些中间值。ip/sp从名字看就已经很像汇编了instruction pointer/stack pointer指令寄存器和栈寄存器呀当然是我瞎猜的有时间的话可以查一下官方文档。代码段里的各个指令长度不一定相同。 再来说说编译过程编译过程是在nginx_http_script_engine_t建立之前执行的我先画出了整个图是为了更好理解。举个set指令编译的的例子比如你在脚本里有这样的代码set $foo helloworld脚本编译的步骤如下 第一步首先在cmcf-variables_keys和cmcf-variables里增加一个变量foo这个变量是可写的。我之前写的nginx的变量系统里只说了变量的读取方法差别不大。 第二步把ngx_http_script_value_code_t指令放到代码段里code字段是一个回调函数赋值成ngx_http_script_value_code把ngx_http_script_var_code_t指令放到代码段里code字段是一个回调函数赋值成ngx_http_script_set_var_code。 第三步http请求来的时候会在rewrite阶段按顺序执行ip指向的这一段代码也就是执行ngx_http_script_value_code和ngx_http_script_set_var_code函数。 我们看一下这两个函数做了什么 void ngx_http_script_value_code(ngx_http_script_engine_t *e) {ngx_http_script_value_code_t *code;code (ngx_http_script_value_code_t *) e-ip;e-ip sizeof(ngx_http_script_value_code_t);e-sp-len code-text_len;e-sp-data (u_char *) code-text_data;ngx_log_debug1(NGX_LOG_DEBUG_HTTP, e-request-connection-log, 0,http script value: \%v\, e-sp);e-sp; }void ngx_http_script_set_var_code(ngx_http_script_engine_t *e) {ngx_http_request_t *r;ngx_http_script_var_code_t *code;code (ngx_http_script_var_code_t *) e-ip;e-ip sizeof(ngx_http_script_var_code_t);r e-request;e-sp--;r-variables[code-index].len e-sp-len;r-variables[code-index].valid 1;r-variables[code-index].no_cacheable 0;r-variables[code-index].not_found 0;r-variables[code-index].data e-sp-data; }第一条指令把“helloworld”这个字符串放到了sp里第二条指令把值从sp里取出来存到了变量系统的foo变量里任务完成看起来很简单。 set指令还可以这样用set $foo $x$y这就是所谓的变量插值过程和上面这个类似只不过第一条指令是先从变量系统里取出$x和$y的值再放入sp里。 其他指令和set指令的执行过程类似把我看到的也写一下吧 if指令同样举个最简单的例子if( $host www.foo.com )编译的时候依次把ngx_http_script_var_code/ngx_http_script_value_code_t/ngx_http_script_equal_code/ngx_http_script_if_code四条指令放到代码段里。脚本运行的时候这几条指令的工作分别是ngx_http_script_var_code把变量host的值取出来放到sp里。ngx_http_script_value_code_t把字符串“www.foo.com”放到sp里。ngx_http_script_equal_code比较sp里存的两个值是否相等并把两个值清除掉相等就在sp里写入“1”不相等就写入“0”比较完以后这两个值就没用了清除掉这两个值并且写入结果很像C里函数调用的过程。ngx_http_script_if_code检查sp里的值是不是“0”不是“0”说明条件为真继续执行之后的脚本是“0”说明条件为假就会跳过这一段代码执行ngx_http_script_if_code_t结构里next偏移之后的代码。所有的代码都是在一个代码段里不会因为有if把代码做嵌套只不过会用next跳来跳去。 有一点需要注意如果if在location里if体里可以做一些location的配置比如root之类的。当NGX_HTTP_REWRITE_PHASE阶段执行脚本的时候会把新的loc_conf赋值给r-loc_conf这个一定要注意是NGX_HTTP_REWRITE_PHASE阶段而不是NGX_HTTP_FIND_CONFIG_PHASE阶段设置loc_conf一般情况是在NGX_HTTP_FIND_CONFIG_PHASE阶段但是这次不是。 void ngx_http_script_if_code(ngx_http_script_engine_t *e) {ngx_http_script_if_code_t *code;code (ngx_http_script_if_code_t *) e-ip;ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e-request-connection-log, 0,http script if);e-sp--;if (e-sp-len (e-sp-len ! 1 || e-sp-data[0] ! 0)) {if (code-loc_conf) {e-request-loc_conf code-loc_conf;ngx_http_update_location_config(e-request);}e-ip sizeof(ngx_http_script_if_code_t);return;}ngx_log_debug0(NGX_LOG_DEBUG_HTTP, e-request-connection-log, 0,http script if: false);e-ip code-next; }return指令这个是比较简单的脚本执行到这个指令就直接返回了参数了可以带数据例如return 200 helloworld此外还可以重定向return 302 http://www.nginx.org。 break指令粗暴的结束目前的脚本但是有一点要注意如果break指令在location里面他并不会影响location其他字段的设置因为他们在不同的阶段执行。比如说设置如下的配置文件 location / {root html;break;index index.html;}这一点都不会影响你的index指令他们不在同一阶段index是在NGX_HTTP_FIND_CONFIG_PHASE阶段break是在NGX_HTTP_REWRITE_PHASE阶段就像if指令里说的那样。 rewrite指令这个略显麻烦但是道理是一样的休息明天接着写。转载于:https://www.cnblogs.com/4a8a08f09d37b73795649038408b5f33/p/9985528.html
http://wiki.neutronadmin.com/news/18439/

相关文章:

  • 可拖拽编程网站开发郑州发布
  • 小企业网站建设在哪里创建网站投资多少钱
  • 做网站专题的软件网站营销外包
  • 做视频网站怎么挣钱吗商标可以做网站吗
  • 滑县网站建设服务军民融合网站建设
  • 驻马店做网站公司wordpress seo模块
  • 宜昌最权威网站建设公司网络营销与直播电商专业就业方向
  • 网站建设对网络营销的影响万网网站设计
  • 在软件定义网络架构中管理员深圳网站建设专业乐云seo
  • 做美食推广的网站有哪些长沙营销型网站建设费用
  • 福州做企业网站wordpress哪个主题好
  • php网站架设教程网片钢筋生产厂家
  • 应聘网站开发题目室内设计软件自学
  • 网站建设验收wordpress 获取分类文章列表
  • 深圳手机网站建设牛商网做公司网站的公司
  • 做电子手抄报的网站伊春网络推广
  • 王晴儿网站建设方案盐山做网站价格
  • 上海做网站的深圳龙华新区
  • 电子政务网站系统内蒙古乌海建设局网站
  • 互联网运营培训课程重庆seo整站优化外包服务
  • 深圳手机网站建设服务新余公司做网站
  • 网站推广的方式与技巧专业网站开发软件
  • 用什么软件来建网站重庆装修公司口碑排名
  • 网站直接做标准曲线专业做网络推广
  • 网站建设需要上传数据库吗网站流量的重要性
  • 科普互联网站建设北京最近发布会直播
  • 有什么兼职做it的网站模板网站外链做不起来
  • 劳务公司网站怎么做如何在网站后台备份数据库表
  • dw中网站统计总访问量怎么做响应式网站做法
  • 网站建设高考题设计一个自己的电商网站