nginx自定义变量规则(nginx自定义模块)
nginx自定义模块
nginx负载均衡cookie携带就是ginx-sticky-module 是 Nginx 的一个扩展模块,实现了通过 Cookie 的会话粘贴效果。
Nginx以前对session 保持支持不太好,主要采用ip_hash把同一来源的客户(同一C段的IP)固定指向后端的同一台机器,ip_hash有个缺点是不能实现很好的负载均衡;直到nginx的扩展模块nginx-sticky-module的出现,解决了session sticky的问题。
基本的原理:
首先根据轮询RR随机到某台后端,然后在响应的Set-Cookie上加上route=md5(upstream)字段,第二次请求再处理的时候,发现有route字段,直接导向原来的那个节点。
nginx自定义变量怎么打印在日志里
使用docker logs nginx容器id即可查看nginx日志。
nginx自定义配置文件路径
在链接上服务器之后,只需查找文件名即可找到nginx的配置文件位置
nginx自定义模块编写
我用
bufs
可以获取到,用rb->buf不行if (rb && rb->
bufs
){body.data = (u_char *)rb->
bufs
->buf->pos;body.len = rb->
bufs
->buf->last - rb->bufs->buf->pos;ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "[xl][ngx_http_upstream_get_peer]request body \"%V\"", &body);
}
else{
ngx_log_debug(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "[xl][ngx_http_upstream_get_peer]request is null or request body is null or empty");
}
nginx设置变量
在nginx中$host变量是无法添加端口号的,即便是在请求中修改Host的内容,也无法修改让$host中增加端口信息。但是可以使用$http_host变量来做到这一点。
例如,如下的配置:使用如下的命令:$ curl -H "Host:127.0.0.1:8080" 'http://127.0.0.1:8080'可以得到如下结果:
因此,从结果看,即便是使用-H修改了请求中的host,但是$host变量仍然只是ip地址部分,而$http_host则可以显示成ip:port的形式。
nginx 配置文件定义变量
一、fpm模式
1、通过服务器传递
如在nginx的配置里设置:
fastcgi_param ENV_XXX 123456;
每次页面请求nginx都会将此变量传递给php,php可以通过getenv函数或$_SERVER全局变量获得。
2、通过fpm配置传递
fpm在每次启动时都会读取php-fpm.conf文件中的环境变量设置,如:
env[ENV_XXX]="test test"
或者让fpm读取系统环境变量,如:
env[ENV_XXX]=$ENV_XXX
注意此种方式要确保系统环境变量存在,且不被sudo禁用。
如果fpm是用sudo方式启动,默认sudo会禁用一些环境变量,可以通过以下方式放开限制:
vim /etc/sudoers
Defaults env_reset
Defaults env_keep = "ENV_XXX"
或者干脆放开所有限制:
Defaults !env_reset
最后,如果修改了php-fpm.conf中的设置需要重启fpm才能生效,同样php可以通过getenv函数或$_SERVER全局变量获得环境变量。
二、命令行模式
命令行模式限制较少,可以通过getenv函数或$_SERVER全局变量获取对当前执行用户有效的系统环境变量,同样要注意sudo的限制。
nginx自定义错误页面
感觉是css样式文件不正常建议用firebug分析一下,看看css文件是否存在,或者是否有语法错误
本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.