nginx异常处理
1、nginx不转发消息头header问题
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Server $host;
2、nginx 反向代理 proxy_set_header 自定义 header 头无效
String staffId = request.getHeader("staffId");
String sn = request.getHeader("sn");
String site_id = request.getHeader("site_id");
String photo_type = request.getHeader("photo_type");
前两个参数都可以获取,后两个参数通过nginx代理后始终为null。原因是nginx对自定义的header name的字符做了限制,默认underscores_in_headers为off,表示如果header name中包含下划线,则忽略掉,部署后就获取不到。
解决方案:
在header里不要用 “_” 下划线,可以用驼峰命名或者其他的符号(如减号-)代替。nginx默认忽略掉下划线可能有些原因。
在nginx里的 nginx.conf文件中配置http的部分添加:underscores_in_headers on;(默认值是off)
3、Nginx不识别中文
用windows记事本打开文件再保存会保存为UTF-8 BOM编码。这个编码在nginx中是不能被识别中文的。
我们只需要用notepad打开nginx.conf,选择编码为UTF-8无BOM编码后,查看中文显示是否正常,然后按Ctrl+s保存文件即可。
4、memc_nginx+srcache_nginx+memcached 遇到的问题
在使用 memc_nginx+srcache_nginx+memcached 时,出现了 memcached 只缓存响应头,响应主体却丢失了。具体文章参见:《memc_nginx+srcache_nginx+memcached 构建透明的动态页面缓存》。
缓存的内容被截断了。
查了些文档是由 upstream 响应截断时不报错导致的。
解决办法:
1. 打上下面的补丁
https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.4.2-upstream_truncation.patch
2. 使用最新版的 nginx
nginx 在 1.5.3 版本修复了这个 bug。
nginx purge 更新缓存 404 错误
nginx 默认安装就会带有反向代理的功能,但想要更好的使用,还得配备 frickle.com 的 ngx_cache_purge 模块,用于清除指定 URL 的缓存。 ngx_cache_purge 在安装的 nginx 的时候一起编译进去了,缓存功能一直正常。
文件地址: www.abc.com/includes/templates/zcen/buttons/english/button_in_cart.gif
如下图:
nginx purge 清理缓存失败
但是清理缓存的时候竟然会 404
地址: www.abc.com/purge/includes/templates/zcen/buttons/english/button_in_cart.gif
百思不得其解,网上遇到 nginx 清理缓存出现 404 的用户不在少数,网上一共有如下 3 中情况:
1、 ngx_cache_purge 版本与 nginx 版本不匹配
换了一个版本的 purge,发现依旧无效
2、 nginx 启动方法不对
很多人安装完 nginx,仅仅 reload 一次 nginx,实际上应该 stop 之后在 start。这不是我的解决方法。
3、 purge 未编译到 nginx 中
肯定不是这个问题, nginx –V 能查看编译参数
因为有其他事情,这个事情暂且搁置了,一天闲来无事,看着 nginx 的配置文件发呆,突然发现自己犯了一个很
大的错误: purge 的 location 放错了位置。
错误配置文件:
location /
{
proxy_pass http://xxx.ttlsa.com;
include proxy.conf;
}
location ~ .*\.(png|jpg|gif|GIF|jpeg|JPG|PNG|bmp|BMP|JPEG)?$
{
include proxy.conf;
proxy_pass http://xxx.ttlsa.com;
expires 1h;
access_log off;
}
location ~ /purge(/.*)
{
allow 127.0.0.1;
allow 192.168.12.0/24;
proxy_cache_purge cache_one $host$1$is_args$args;
}
正确配置文件:
location /
{
proxy_pass http://xxx.ttlsa.com;
include proxy.conf;
}
location ~ /purge(/.*)
{
allow 127.0.0.1;
allow 192.168.12.0/24;
proxy_cache_purge cache_one $host$1$is_args$args;
}
location ~ .*\.(png|jpg|gif|GIF|jpeg|JPG|PNG|bmp|BMP|JPEG)?$
{
include proxy.conf;
proxy_pass http://xxx.ttlsa.com;
expires 1h;
access_log off;
}
细心的兄弟很快能发现我把 purge 的位置放错了,每次更新图片缓存的时候它都只匹配到了图片后缀的
location,接着就返回了 404,根本没有匹配到 purge 这个 location 的机会。把 purge 调到前面就正常了。
nginx异常处理的更多相关文章
- Nginx:常用基本命令与异常处理
Nginx日志 - ./nginx-1.6.0-ems/logs/nginx.pid Nginx启动时应该使用cmd等命令行工具启动,双击启动同样会产生进程但会造成异常,判断条件是 ./nginx-1 ...
- Nginx使用默认配置启动异常处理
Ps1:错误问题:nginx: [error] OpenEvent("Global\ngx_reload_5988") failed (2: The system cannot f ...
- TCMalloc优化MySQL、Nginx、Redis内存管理
TCMalloc(Thread-Caching Malloc)与标准glibc库的malloc实现一样的功能,但是TCMalloc在效率和速度效率都比标准malloc高很多.TCMalloc是 goo ...
- python自动化开发-[第九天]-异常处理、进程
今日概要: 1.异常处理使用 2.进程 3.paramiko模块使用 一.异常处理 1.常见的错误异常 #错误异常一 print(a) #NameError #错误异常二 int('sdadsds') ...
- python 异常处理、进程
目录: 异常处理 python进程 python并发之多进程 一.异常处理(try...except...) 1.程序中难免出现错误,而错误分成两种: a.语法错误: b.逻辑错误(逻辑错误) 2.异 ...
- Linux环境Nginx安装、调试以及PHP安装
linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5 1.编译安装Nginx 官网:http://wiki.nginx.org/Install 下 ...
- Linux环境Nginx安装与调试以及PHP安装
linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5.28 1.编译安装Nginx 官网:http://wiki.nginx.org/Instal ...
- 2.scala控制结构、函数、异常处理
2.scala控制结构.函数.异常处理---小书匠,在线编辑器,MARKDOWN,Evernote,文件版本 a:focus { outline: thin dotted #333; outline: ...
- 2.爬虫 urlib库讲解 异常处理、URL解析、分析Robots协议
1.异常处理 URLError类来自urllib库的error模块,它继承自OSError类,是error异常模块的基类,由request模块产生的异常都可以通过这个类来处理. from urllib ...
随机推荐
- luogu3320 寻宝游戏 (dfs序+倍增lca+set)
一定是从随便某个点开始,然后按着dfs序的顺序跑一圈是最好的 所以说,新加一个点x,就减少了dis(pre,next),增加了dis(pre,x),dis(x,nxt) 删掉一个点同理 这个可以用se ...
- 51单片机 | I/O口直接输入输出实例
51单片机P0/P1/P2/P3口的区别: P0口要作为低8位地址总线和8位数据总线用,这种情况下P0口不能用作I/O,要先作为地址总线对外传送低8位的地址,然后作为数据总线对外交换数据: P1口只能 ...
- Java -- JDBC 学习--通过 ResultSet 执行查询操作
ResultSet: 结果集. 封装了使用 JDBC 进行查询的结果. 1. 调用 Statement 对象的 executeQuery(sql) 可以得到结果集. 2. ResultSet 返回的实 ...
- Linux下定时器
http://unix8.net/linux%E4%B8%8B%E5%AE%9A%E6%97%B6%E5%99%A8.html 一. 基础知识 1.时间类型.Linux下常用的时间类型有4个:time ...
- shoi2017小结
某省选 胡雨菲让我做的,她自己已经AK了... 在loj(自由oj?)上面搜索shoi2017即可. 洛谷上也有,搜六省联考就行 第一题:大水题枚举 P3745 看题目就很水:(其实是因为胡雨菲给我讲 ...
- 最短路算法模板--SPFA
初见SPFA时,直接认成了优先队列优化的Dijkstra,经过几位大佬的指点,我终于明白了他们的差异. Dijkstra是保证已经出队过的点不再入队,SPFA是已经在队列中不再入队.比较起来,SPFA ...
- CodeForces842C 树上dfs
http://codeforces.com/problemset/problem/842/C 题意: 有一个n个节点的数,每个点有一个点权,根到这个点的所有点权(包括这个点和根)的gcd值为这个点的答 ...
- python3写入文件时编码问题报错
在字符串写入文件时,有时会因编码问题导致无法写入,可在open方法中指定encoding参数 chfile = open(filename, 'w', encoding='utf-8') 这样可解决大 ...
- 如何解决win7系统无法运行cmd命令提示符
如何解决win7系统无法运行cmd命令提示符 CMD命令可以帮助我们很快的执行所需要的程序命令,可以查询系统中很多的信息和解决系统很多的故障,对我们来说非常方便,但是最近有用户反馈自己win7电脑 ...
- SQL记录-资源正忙online或nowait
1.多个tomcat 修改3个端口 2.oracle-00054:资源正忙 被锁住了 建立索引加online参数 1:创建索引时会产生的锁 2:dml 语句会产生的锁 3:索引创建时加上关键字 onl ...