用户有路由器,网站路过交换机,但也有是境会出现 http 400 错误请求,这种现象往往很少发生,但也可能发生。
英文怎么说的:
This error (HTTP 400 Bad Request) means that Internet Explorer was able to connect to the web server, but the webpage could not be found because of a problem with the address.
中文:
此错误 (HTTP 400 坏请求) 意味着 Internet Explorer 是能够连接到 web 服务器,但由于的地址有问题找不到该网页。
在百度知道上有人回答:这是网站的问题,不必担心,变为了最佳答案,如:http://zhidao.baidu.com/question/83711863.html
可能的问题:
但在海量服务时,别人访问Ok,别的地区,海外都Ok,而你访问不行,那你可能还处于城中村的网络中,可能是交换机,也可能是路由器,更可能是防火墙,在http协议头里加入了空格,使这个协议出现不完整,进而返回了400请求,你可以建议该区寻找硬件及硬件配置的问题,为此,这种情况也只能在服务器端对该地的用户http请求头的数据进行抓包来分析其是否符合http协议。如果确定是在路途中给篡改了相关数据,是否可以修改网站的程序进行容错处理(如果你认为该地区很重要),否则,那就点到为此吧,中国是一片神奇的土地,也有神奇的网络,网路结构,要为用户提供好的服务,就看你的产品观和方法手段了,如何服务好你的用户,这是关键,用户没有错,因为有很多用户都生活在城中村里,我们能不能放弃他们,在于我们产品的定位。
英文怎么说的:
This error (HTTP 400 Bad Request) means that Internet Explorer was able to connect to the web server, but the webpage could not be found because of a problem with the address.
中文:
此错误 (HTTP 400 坏请求) 意味着 Internet Explorer 是能够连接到 web 服务器,但由于的地址有问题找不到该网页。
在百度知道上有人回答:这是网站的问题,不必担心,变为了最佳答案,如:http://zhidao.baidu.com/question/83711863.html
可能的问题:
但在海量服务时,别人访问Ok,别的地区,海外都Ok,而你访问不行,那你可能还处于城中村的网络中,可能是交换机,也可能是路由器,更可能是防火墙,在http协议头里加入了空格,使这个协议出现不完整,进而返回了400请求,你可以建议该区寻找硬件及硬件配置的问题,为此,这种情况也只能在服务器端对该地的用户http请求头的数据进行抓包来分析其是否符合http协议。如果确定是在路途中给篡改了相关数据,是否可以修改网站的程序进行容错处理(如果你认为该地区很重要),否则,那就点到为此吧,中国是一片神奇的土地,也有神奇的网络,网路结构,要为用户提供好的服务,就看你的产品观和方法手段了,如何服务好你的用户,这是关键,用户没有错,因为有很多用户都生活在城中村里,我们能不能放弃他们,在于我们产品的定位。
默认情况下,Apache服务器会列出网站目录中的文件及子目录,这对于用于发布站点的服务器来说是很不安全的,所以需要禁用,修改httpd.conf配置文件中的对应设置即可。
问题的现象:
如果你的网站目录下有一个xxx的文件夹,如果xxx文件夹下没有默认页面(index.*等),当用户使用URL:http://你的网址/a/ 访问你的网站的话,Apache会把xxx文件夹里的内容全列出来。
解决方法:
要禁止此功能,修改httpd.conf
找到下面这一句删除掉Indexes即可。
Options Indexes FollowSymLinks
上面这个是主的控制,后面有单个目录的控制。
而Nignx则是默认就不会列出这个,但是我现在想把一个二级域名指向的目录给列出来让大家下载,或者自己也要下载等的这样一个需求,于是要放开Apache或者Nginx对这个目录的列表,于是我查了下网络,最后做了尝试,发现这个目录其实还是要以Apache及Nginx的运行用户来进行设置这个目录可能让这个运行的用户可读才行,否则你就是配置对了也不能看到目录,会出现Denied这样的了情况,这个是要特别注意的,这次之所以有这个情况是因为我想把:/root/software上的软件给共享了,但这个root目录下的权限很高,但是我的apache和nginx都是以nobody.nogroup来运行的,所以配置对了也没有能列出来,老是说Denied,我还是分别列下我的Aapche和Nginx下的配置吧。
(1)Apache配置如下:
打开nginx.conf文件,在location server 或 http段中加入
autoindex on;
另外两个参数最好也加上去:
autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间
(2)Nginx显示目录配置实例:
问题的现象:
如果你的网站目录下有一个xxx的文件夹,如果xxx文件夹下没有默认页面(index.*等),当用户使用URL:http://你的网址/a/ 访问你的网站的话,Apache会把xxx文件夹里的内容全列出来。
解决方法:
要禁止此功能,修改httpd.conf
找到下面这一句删除掉Indexes即可。
Options Indexes FollowSymLinks
上面这个是主的控制,后面有单个目录的控制。
而Nignx则是默认就不会列出这个,但是我现在想把一个二级域名指向的目录给列出来让大家下载,或者自己也要下载等的这样一个需求,于是要放开Apache或者Nginx对这个目录的列表,于是我查了下网络,最后做了尝试,发现这个目录其实还是要以Apache及Nginx的运行用户来进行设置这个目录可能让这个运行的用户可读才行,否则你就是配置对了也不能看到目录,会出现Denied这样的了情况,这个是要特别注意的,这次之所以有这个情况是因为我想把:/root/software上的软件给共享了,但这个root目录下的权限很高,但是我的apache和nginx都是以nobody.nogroup来运行的,所以配置对了也没有能列出来,老是说Denied,我还是分别列下我的Aapche和Nginx下的配置吧。
(1)Apache配置如下:
打开nginx.conf文件,在location server 或 http段中加入
autoindex on;
另外两个参数最好也加上去:
autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间
(2)Nginx显示目录配置实例:
主要是对我的个人博客的PHP执行代码进行Cache,对于Js,CSS直接在客户端缓存即可,这儿重点是对PHP的CGI执行结果在服务器端进行缓存,以减少服务器的DB查询压力,这样DB从21次/秒降低到13次/秒。目前让nginx的proxy_store和proxy_cache支持ctrl+f5和PURGE结合删除缓存的方法二种:
一.让ngx_cache_purge来帮忙,通过Nginx对ctrl+f5的标志来进行重写清除日志。
二.用PHP来实现清除后并再次跳转到对应的Uri模块,以实现页面缓存更新后的显示。
三.修改ngx_cache_purge源代码。。。。:(暂时忽略。
阅读全文
一.让ngx_cache_purge来帮忙,通过Nginx对ctrl+f5的标志来进行重写清除日志。
二.用PHP来实现清除后并再次跳转到对应的Uri模块,以实现页面缓存更新后的显示。
三.修改ngx_cache_purge源代码。。。。:(暂时忽略。
阅读全文
我是回忆未来[向东],我对回忆未来[张宴]的关于nginx那文章有点不同的看法,哈哈,不知道他要是看到这个说法,他会不会。。。,反正都是熟人,咱就写两行了,呵呵:
文章来源:http://blog.s135.com/nginx_php_v5/
我个人回忆未来[向东]认为(认为:当然包含了很主观的看法哈)Nginx性能大概是Apache的1.5倍左右(这个1.5是咋估计出来的呢?我是拍脑袋的咯,哈哈),所谓十倍,我估计(又接着主观了:()是回忆未来[张宴]是把并发数而不是负载能力做为了衡量性能的标准,这里值得探讨,同时注意:单纯并发数如果全是不活动的死连接没有什么意义的. epoll et模式实现简单的http server,每秒能处理11000个请求/s左右,apche如果参数充分优化,也可以达到8000请求/s左右,这个不能算作是nginx的功劳,而是Linux 的内核以及Unix的kqueque的内核的功劳,当然,以我为主,为我所用,无所谓了,瞎侃两句,呵呵.
文章来源:http://blog.s135.com/nginx_php_v5/
我个人回忆未来[向东]认为(认为:当然包含了很主观的看法哈)Nginx性能大概是Apache的1.5倍左右(这个1.5是咋估计出来的呢?我是拍脑袋的咯,哈哈),所谓十倍,我估计(又接着主观了:()是回忆未来[张宴]是把并发数而不是负载能力做为了衡量性能的标准,这里值得探讨,同时注意:单纯并发数如果全是不活动的死连接没有什么意义的. epoll et模式实现简单的http server,每秒能处理11000个请求/s左右,apche如果参数充分优化,也可以达到8000请求/s左右,这个不能算作是nginx的功劳,而是Linux 的内核以及Unix的kqueque的内核的功劳,当然,以我为主,为我所用,无所谓了,瞎侃两句,呵呵.
curl之CURLOPT_HTTPHEADER
单个
我们在不设置host的时候提交到虚拟主机后,会出现:
Tencent:/usr/local/tads/htdocs/mhxy2010hn.act/crontab # curl "http://172.23.129.11*/user_v3/freere*g.php?act_id=109353"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /user_v3/freereg.php was not found on this server.</p>
</body></html>
设置host后就能找到了。
curl为我们用了CURLOPT_HTTPHEADER来做host的工作:
相当于:
这样一折腾,就ok了,呵呵!
其实这个主要是解决,在线上有host指向了,但是其他的需哟又需要这个host的域名,而ip不同的情况。
单个
<?php
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\n"));
?>
多个curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\n"));
?>
<?php
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\nOtherheader: stuff\n"));
?>
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Range: Bytes=0-50\nOtherheader: stuff\n"));
?>
我们在不设置host的时候提交到虚拟主机后,会出现:
Tencent:/usr/local/tads/htdocs/mhxy2010hn.act/crontab # curl "http://172.23.129.11*/user_v3/freere*g.php?act_id=109353"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /user_v3/freereg.php was not found on this server.</p>
</body></html>
设置host后就能找到了。
curl为我们用了CURLOPT_HTTPHEADER来做host的工作:
function curl_post($host, $data)
{
$ch = curl_init();
$res= curl_setopt ($ch, CURLOPT_URL,$host);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Host: act.*.qq.com"));
$xyz = curl_exec ($ch);
//echo $xyz;
if ($xyz == NULL) {
return 0;
}
return $xyz;
}
{
$ch = curl_init();
$res= curl_setopt ($ch, CURLOPT_URL,$host);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Host: act.*.qq.com"));
$xyz = curl_exec ($ch);
//echo $xyz;
if ($xyz == NULL) {
return 0;
}
return $xyz;
}
相当于:
172.23.129.* act.*.qq.com
这样一折腾,就ok了,呵呵!
其实这个主要是解决,在线上有host指向了,但是其他的需哟又需要这个host的域名,而ip不同的情况。
经常使用的是:
打日志
Valgrind 使用简单说明 得重点看,还有pc.lint MemCheck 等工具,同时你还可以手动查看,free内存占用情况, ps线程的情况,如内存占用等等。
PC-Lint简介
C/C++语言的语法拥有其它语言所没有的灵活性,这种灵活性带来了代码效率的提升,但相应也使得代码编写具有很大的随意性,另外C/C++编译器不进行强制类型检查,也不做任何边界检查,这就增加了代码中存在隐患的可能性。如果能够在代码提交测试之前发现这些潜在的错误,就能够极大地减轻测试人员的压力,减少软件项目的除错成本,可是传统的C/C++编译器对此已经无能为力,这个任务只能由专用的代码检查工具完成。
PC-Lint是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析工具,它的全称是PC-Lint/FlexeLint for C/C++,PC-Lint能够在Windows、MS-DOS和OS/2平台上使用,以二进制可执行文件的形式发布,而FlexeLint运行于其它平台,以源代码的形式发布。PC-lint在全球拥有广泛的客户群,许多大型的软件开发组织都把PC-Lint检查作为代码走查的第一道工序。PC-Lint不仅能够对程序进行全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针以及冗余的代码,还能够有效地帮你提出许多程序在空间利用、运行效率上的改进点。
http://hi.baidu.com/timegoneby/blog/item/ffaad71790bf060dc93d6dd6.html
http://www.ibm.com/developerworks/cn/linux/l-pow-debug/
Valgrind 介绍
Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。
Valgrind的主要功能
Valgrind工具包包含多个工具,如Memcheck,Cachegrind,Helgrind, Callgrind,Massif。下面分别介绍个工具的作用:
Memcheck 工具主要检查下面的程序错误:
使用未初始化的内存 (Use of uninitialised memory)
使用已经释放了的内存 (Reading/writing memory after it has been free’d)
使用超过 malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)
对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)
申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever)
malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)
Callgrind
Callgrind收集程序运行时的一些数据,函数调用关系等信息,还可以有选择地进行cache 模拟。在运行结束时,它会把分析数据写入一个文件。callgrind_annotate可以把这个文件的内容转化成可读的形式。
Cachegrind
它模拟 CPU中的一级缓存I1,D1和L2二级缓存,能够精确地指出程序中 cache的丢失和命中。如果需要,它还能够为我们提供cache丢失次数,内存引用次数,以及每行代码,每个函数,每个模块,整个程序产生的指令数。这对优化程序有很大的帮助。
Helgrind
它主要用来检查多线程程序中出现的竞争问题。Helgrind 寻找内存中被多个线程访问,而又没有一贯加锁的区域,这些区域往往是线程之间失去同步的地方,而且会导致难以发掘的错误。Helgrind实现了名为” Eraser” 的竞争检测算法,并做了进一步改进,减少了报告错误的次数。
Massif
堆栈分析器,它能测量程序在堆栈中使用了多少内存,告诉我们堆块,堆管理块和栈的大小。Massif能帮助我们减少内存的使用,在带有虚拟内存的现代系统中,它还能够加速我们程序的运行,减少程序停留在交换区中的几率。
Valgrind 安装
打日志
Valgrind 使用简单说明 得重点看,还有pc.lint MemCheck 等工具,同时你还可以手动查看,free内存占用情况, ps线程的情况,如内存占用等等。
PC-Lint简介
C/C++语言的语法拥有其它语言所没有的灵活性,这种灵活性带来了代码效率的提升,但相应也使得代码编写具有很大的随意性,另外C/C++编译器不进行强制类型检查,也不做任何边界检查,这就增加了代码中存在隐患的可能性。如果能够在代码提交测试之前发现这些潜在的错误,就能够极大地减轻测试人员的压力,减少软件项目的除错成本,可是传统的C/C++编译器对此已经无能为力,这个任务只能由专用的代码检查工具完成。
PC-Lint是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析工具,它的全称是PC-Lint/FlexeLint for C/C++,PC-Lint能够在Windows、MS-DOS和OS/2平台上使用,以二进制可执行文件的形式发布,而FlexeLint运行于其它平台,以源代码的形式发布。PC-lint在全球拥有广泛的客户群,许多大型的软件开发组织都把PC-Lint检查作为代码走查的第一道工序。PC-Lint不仅能够对程序进行全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针以及冗余的代码,还能够有效地帮你提出许多程序在空间利用、运行效率上的改进点。
http://hi.baidu.com/timegoneby/blog/item/ffaad71790bf060dc93d6dd6.html
http://www.ibm.com/developerworks/cn/linux/l-pow-debug/
Valgrind 介绍
Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。
Valgrind的主要功能
Valgrind工具包包含多个工具,如Memcheck,Cachegrind,Helgrind, Callgrind,Massif。下面分别介绍个工具的作用:
Memcheck 工具主要检查下面的程序错误:
使用未初始化的内存 (Use of uninitialised memory)
使用已经释放了的内存 (Reading/writing memory after it has been free’d)
使用超过 malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)
对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)
申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever)
malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)
Callgrind
Callgrind收集程序运行时的一些数据,函数调用关系等信息,还可以有选择地进行cache 模拟。在运行结束时,它会把分析数据写入一个文件。callgrind_annotate可以把这个文件的内容转化成可读的形式。
Cachegrind
它模拟 CPU中的一级缓存I1,D1和L2二级缓存,能够精确地指出程序中 cache的丢失和命中。如果需要,它还能够为我们提供cache丢失次数,内存引用次数,以及每行代码,每个函数,每个模块,整个程序产生的指令数。这对优化程序有很大的帮助。
Helgrind
它主要用来检查多线程程序中出现的竞争问题。Helgrind 寻找内存中被多个线程访问,而又没有一贯加锁的区域,这些区域往往是线程之间失去同步的地方,而且会导致难以发掘的错误。Helgrind实现了名为” Eraser” 的竞争检测算法,并做了进一步改进,减少了报告错误的次数。
Massif
堆栈分析器,它能测量程序在堆栈中使用了多少内存,告诉我们堆块,堆管理块和栈的大小。Massif能帮助我们减少内存的使用,在带有虚拟内存的现代系统中,它还能够加速我们程序的运行,减少程序停留在交换区中的几率。
Valgrind 安装



