php 打印测试技巧
Php/Js/Shell/Go jackxiang 2012-6-30 10:30
点评:值得借鉴其方法,所以转载如下:
以前习惯用 echo,print_r 等方法来测试php输出,这样多多少少会影响到代码的正常运行,现改成“把测试变量输出到文本”的形式,可实现日志形式的调试,代码如下:
主要是用到“File_writefile”函数,对上面的 “File_writefile”函数再包装一下:
应用如下:
输出结果:
来自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/12/02/2272161.html
以前习惯用 echo,print_r 等方法来测试php输出,这样多多少少会影响到代码的正常运行,现改成“把测试变量输出到文本”的形式,可实现日志形式的调试,代码如下:
主要是用到“File_writefile”函数,对上面的 “File_writefile”函数再包装一下:
应用如下:
输出结果:
来自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/12/02/2272161.html
尝试方法:进入控制面板--程序--程序功能--打开或关闭windows功能--勾选.Net3.5,这个包含了2.0版本。然后等待下载完成即可,这种方法可以解决多数朋友经常遇到的win8程序无响应的问题。
小知识:. NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。
小知识:. NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。
微软免费杀毒软件MSE(Microsoft Security Essentials)当前的最新版本是4.0,日前MSE预发布项目提供了最新版MSE供用户体验测试,新版为MSE 4.1预发布版(具体版本号4.1.204.0),这也意味着MSE 4.1即将发布,想要提前体验MSE 4.1的用户不妨安装此预发布版。
MSE 4.1修复了之前版本中存在的Bug,完善了性能,还包括以下新功能:
— 一键整合的Windows Defender Offline:只需一键,用户就可以轻松地使用Windows Defender Offline删除恶意软件,无需从单独的引导媒体重新启动。
— 云清洁修复:增强恶意软件清理,从云端下载清洁版本从而修复恶意软感染过的系统文件。
— 重新设计的网络防护引擎,提供了更好的防护性、可扩展性和性能;
— 完善启动体验。
MSE 4.1预发布版当前仅提供了英文版本,官方下载:
32位(10.2MB):http://download.microsoft.com/download/2/8/5/2859559A-3A1B-4331-AC88-4F59D789F9B9/mse_x86_prerelease_install.exe
64位(12.5MB):http://download.microsoft.com/download/2/8/5/2859559A-3A1B-4331-AC88-4F59D789F9B9/mse_x64_prerelease_install.exe
MSE 4.1修复了之前版本中存在的Bug,完善了性能,还包括以下新功能:
— 一键整合的Windows Defender Offline:只需一键,用户就可以轻松地使用Windows Defender Offline删除恶意软件,无需从单独的引导媒体重新启动。
— 云清洁修复:增强恶意软件清理,从云端下载清洁版本从而修复恶意软感染过的系统文件。
— 重新设计的网络防护引擎,提供了更好的防护性、可扩展性和性能;
— 完善启动体验。
MSE 4.1预发布版当前仅提供了英文版本,官方下载:
32位(10.2MB):http://download.microsoft.com/download/2/8/5/2859559A-3A1B-4331-AC88-4F59D789F9B9/mse_x86_prerelease_install.exe
64位(12.5MB):http://download.microsoft.com/download/2/8/5/2859559A-3A1B-4331-AC88-4F59D789F9B9/mse_x64_prerelease_install.exe
表单提交数据大小的限制:Firebug 达到了 Post 请求大小限制。
Php/Js/Shell/Go jackxiang 2012-6-28 10:15
今天,遇到:... Firebug 达到了 Post 请求大小限制。 ...
今天在做post表单提交多个textarea控件中的内容时,出现一些意外情况,为了避免以后再出现这种情况,有个清晰的思路,特此写下以下琐碎细节。测试环境为windows的iis。
以下内容针对一个textarea输入内容测试遇到的问题。当提交数据量比较小时,保存正常。当提交数据量为一篇文章时(大约30k左右),点击保存出现白页现象,没有任何反应。通过firebug查看网络查看表单提交情况,post选项中出现“... Firebug 达到了 Post 请求大小限制。 ...”这样的提示。
总结:
(1)post提交表单数据量限制为100k左右,超过将无法提交。
(2)在iis6.0中表单最大传输大小为200k,因此需要通过以下方式修改配置文件,实现大数据传输
1. 关闭 IIS Admin Service 服务
2. 打开 %WinDir%\system32\inetsrv\metabase.xml
3. 修改 AspMaxRequestEntityAllowed 的值为自己需要的, 默认为 204800,AspBufferingLimit也改成相同值,
4. 启动 IIS Admin Service
(3)在iis5.1以下post 方法限制传递的数据为2M
(3)get最大提交数据量为4k左右
(4)表单控件(如textarea)最大提交的数据量为30k左右,超过将出现以上异常情况,导致表单无法提交成功.
来自:http://blog.csdn.net/zouqingfang/article/details/7220229
今天在做post表单提交多个textarea控件中的内容时,出现一些意外情况,为了避免以后再出现这种情况,有个清晰的思路,特此写下以下琐碎细节。测试环境为windows的iis。
以下内容针对一个textarea输入内容测试遇到的问题。当提交数据量比较小时,保存正常。当提交数据量为一篇文章时(大约30k左右),点击保存出现白页现象,没有任何反应。通过firebug查看网络查看表单提交情况,post选项中出现“... Firebug 达到了 Post 请求大小限制。 ...”这样的提示。
总结:
(1)post提交表单数据量限制为100k左右,超过将无法提交。
(2)在iis6.0中表单最大传输大小为200k,因此需要通过以下方式修改配置文件,实现大数据传输
1. 关闭 IIS Admin Service 服务
2. 打开 %WinDir%\system32\inetsrv\metabase.xml
3. 修改 AspMaxRequestEntityAllowed 的值为自己需要的, 默认为 204800,AspBufferingLimit也改成相同值,
4. 启动 IIS Admin Service
(3)在iis5.1以下post 方法限制传递的数据为2M
(3)get最大提交数据量为4k左右
(4)表单控件(如textarea)最大提交的数据量为30k左右,超过将出现以上异常情况,导致表单无法提交成功.
来自:http://blog.csdn.net/zouqingfang/article/details/7220229
为什么不使用nginx+php(fastcgi)作为生产环境?
Php/Js/Shell/Go jackxiang 2012-6-25 20:54
前言,近来fastCGI流行,也有人提出了相反的看法,并作出了原因解释,觉得有道理,So。。。
php群里的兄弟:
nginx这么厉害吗?答:我测试,10000次,10次并发 机器,就是不死 65%cpu了,还不死。。。nginx防盗链牛逼可以根据参数加密。
php-fpm确实,听蛋疼的 5个进程,每个占12% 我操,cpu干不了别的了,php-fpm是相当的不行 cpu占用太厉害.用apache啊.apache有些特性不行。。。
Nginx 502:
fast_cgi设置
fastcgi_connect_timeout 30;
fastcgi_send_timeout 30;
fastcgi_read_timeout 30;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
Php-fpm设置
<value name="listen_address"> /dev/shm/php-fpm.sock </value>
<value name="max_children">128</value>
<value name="request_terminate_timeout">10s</value>
<value name="request_slowlog_timeout">5s</value>
<value name="slowlog">/path/to/slow.log</value>
<value name="rlimit_files">65535</value>
php(fastcgi)不够稳定,经常出现502错误,生成相对复杂的页面没有优势,反而会使php-cgi进程变为僵尸进程.
安全性,多用户多站点权限问题.php(fastcgi)在应对多用户多站点往往捉襟见肘,不易于实施.
整合其他开发语言,apache表现得游刃有余.资源利用恰到好处.
为什么采用nginx做前端,apache作为后端的方案?nginx在处理静态内容上较apache是几倍或几十倍的差异,因而放在前面过滤静态内容是最为恰当的.同时nginx也是一个负载均衡器,低资源消耗,高性能转发是它的特点.经过nginx在前面的过滤,后端的apache需要处理的内容相对就比较少了.只需负责处理动态内容就可以了.在性能与稳定性的权衡下,使用nginx+apache搭配会让它们在各自擅长的领域展现自身的价值.
http://www.vpser.net/build/nginx-apache-guide.html
php群里的兄弟:
nginx这么厉害吗?答:我测试,10000次,10次并发 机器,就是不死 65%cpu了,还不死。。。nginx防盗链牛逼可以根据参数加密。
php-fpm确实,听蛋疼的 5个进程,每个占12% 我操,cpu干不了别的了,php-fpm是相当的不行 cpu占用太厉害.用apache啊.apache有些特性不行。。。
Nginx 502:
fast_cgi设置
fastcgi_connect_timeout 30;
fastcgi_send_timeout 30;
fastcgi_read_timeout 30;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
Php-fpm设置
<value name="listen_address"> /dev/shm/php-fpm.sock </value>
<value name="max_children">128</value>
<value name="request_terminate_timeout">10s</value>
<value name="request_slowlog_timeout">5s</value>
<value name="slowlog">/path/to/slow.log</value>
<value name="rlimit_files">65535</value>
php(fastcgi)不够稳定,经常出现502错误,生成相对复杂的页面没有优势,反而会使php-cgi进程变为僵尸进程.
安全性,多用户多站点权限问题.php(fastcgi)在应对多用户多站点往往捉襟见肘,不易于实施.
整合其他开发语言,apache表现得游刃有余.资源利用恰到好处.
为什么采用nginx做前端,apache作为后端的方案?nginx在处理静态内容上较apache是几倍或几十倍的差异,因而放在前面过滤静态内容是最为恰当的.同时nginx也是一个负载均衡器,低资源消耗,高性能转发是它的特点.经过nginx在前面的过滤,后端的apache需要处理的内容相对就比较少了.只需负责处理动态内容就可以了.在性能与稳定性的权衡下,使用nginx+apache搭配会让它们在各自擅长的领域展现自身的价值.
http://www.vpser.net/build/nginx-apache-guide.html
响应消息的第一行为下面的格式:
HTTP-Version SP Status-Code SP Reason-Phrase CRLF
HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。
Status-Code是一个三个数字的结果代码。
Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
响 应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。响应头域包含Age、 Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW- Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。
典型的响应消息:
HTTP/1.0200OK
Date:Mon,31Dec200104:25:57GMT
Server:Apache/1.3.14(Unix)
Content-type:text/html
Last-modified:Tue,17Apr200106:46:28GMT
Etag:”a030f020ac7c01:1e9f”
Content-length:39725426
Content-range:bytes554554-40279979/40279980
上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。
Location响应头
Location响应头用于重定向接收者到一个新URI地址。
Server响应头
Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。
来自:http://yhjhappy234.blog.163.com/blog/static/31632832201131483532764/
HTTP-Version SP Status-Code SP Reason-Phrase CRLF
HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。
Status-Code是一个三个数字的结果代码。
Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
响 应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。响应头域包含Age、 Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW- Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。
典型的响应消息:
HTTP/1.0200OK
Date:Mon,31Dec200104:25:57GMT
Server:Apache/1.3.14(Unix)
Content-type:text/html
Last-modified:Tue,17Apr200106:46:28GMT
Etag:”a030f020ac7c01:1e9f”
Content-length:39725426
Content-range:bytes554554-40279979/40279980
上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。
Location响应头
Location响应头用于重定向接收者到一个新URI地址。
Server响应头
Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。
来自:http://yhjhappy234.blog.163.com/blog/static/31632832201131483532764/
SecureCRT for MAC 无限试用方法
Unix/LinuxC技术 jackxiang 2012-6-25 13:15
Linux下开发的兄弟有福了:
SecureCRT for MAC :SecureCRT-6.7.1-188.osx_x86.dmg
1.上官网下载SecureCRT for MAC
2.因为试用期有30天,等到差不多到期时,就可以删除文件“SecureCRT_eval.lic ”
rm Users/用户名/Library/Application Support/VanDyke/SecureCRT/Config/SecureCRT_eval.lic
3.SecureCRT Version 6.7.1 (build 188) - Official Release 测试通过^0^
PS:写个crontab或开机自动运行sh程序一劳永逸,不过每次打开软件都后会显示还有多少天到期有点烦哈:)
SecureCRT for MAC :SecureCRT-6.7.1-188.osx_x86.dmg
1.上官网下载SecureCRT for MAC
2.因为试用期有30天,等到差不多到期时,就可以删除文件“SecureCRT_eval.lic ”
rm Users/用户名/Library/Application Support/VanDyke/SecureCRT/Config/SecureCRT_eval.lic
3.SecureCRT Version 6.7.1 (build 188) - Official Release 测试通过^0^
PS:写个crontab或开机自动运行sh程序一劳永逸,不过每次打开软件都后会显示还有多少天到期有点烦哈:)
Demo:
查看:
tail -f /tmp/jack.txt
一:tee
方法一、配置文件
在服务器上的/etc/my.cnf中的[client]加入
tee =/tmp/client_mysql.log即可.
方法二、命令行
1.mysql -uroot --tee=/tmp/client_mysql.log
2.这个类似于sqlplus的spool功能,可以将命令行中的结果保存到外部文件中。如果指定已经存在的文件,则结果会附加到文件中。
mysql> tee client_mysql.log
Logging to file 'client_mysql.log '
或者
mysql> \T client_mysql.log
Logging to file 'client_mysql.log '
mysql> notee
Outfile disabled.
或者
mysql> \t
Outfile disabled.
二:mysql pager、tee、prompt说明:
当表中数据行很多,一页看不完时,可以使用pager [cmd]更改mysql的查询输出,cmd为linux的标准命令,如:
mysql> pager less;
mysql> select * from test.dept;
查询输出都是通过管道传给less命令,可以实现分页浏览
mysql> nopager;即可回到标准输出stdout
还可使用如下语句将输出发送到文件中:
mysql> pager cat>/home/pw/osq.txt;
less说明:
退出:“:q”
下一页:“F”
上一页:“B”
查询
向前搜索
/ - 使用一个模式进行搜索,并定位到下一个匹配的文本
n - 向前查找下一个匹配的文本
N - 向后查找前一个匹配的文本
向后搜索
? - 使用模式进行搜索,并定位到前一个匹配的文本
n - 向后查找下一个匹配的文本
N - 向前查找前一个匹配的文本
tee说明
mysql>tee filename
可以将之后在mysql的所有输入输出操作记录到filename中。
prompt说明
用于修改mysql提示符
[mysql]
prompt=(
来自:http://blog.sina.com.cn/s/blog_45722cc00100z5wm.html
阅读全文
查看:
tail -f /tmp/jack.txt
一:tee
方法一、配置文件
在服务器上的/etc/my.cnf中的[client]加入
tee =/tmp/client_mysql.log即可.
方法二、命令行
1.mysql -uroot --tee=/tmp/client_mysql.log
2.这个类似于sqlplus的spool功能,可以将命令行中的结果保存到外部文件中。如果指定已经存在的文件,则结果会附加到文件中。
mysql> tee client_mysql.log
Logging to file 'client_mysql.log '
或者
mysql> \T client_mysql.log
Logging to file 'client_mysql.log '
mysql> notee
Outfile disabled.
或者
mysql> \t
Outfile disabled.
二:mysql pager、tee、prompt说明:
当表中数据行很多,一页看不完时,可以使用pager [cmd]更改mysql的查询输出,cmd为linux的标准命令,如:
mysql> pager less;
mysql> select * from test.dept;
查询输出都是通过管道传给less命令,可以实现分页浏览
mysql> nopager;即可回到标准输出stdout
还可使用如下语句将输出发送到文件中:
mysql> pager cat>/home/pw/osq.txt;
less说明:
退出:“:q”
下一页:“F”
上一页:“B”
查询
向前搜索
/ - 使用一个模式进行搜索,并定位到下一个匹配的文本
n - 向前查找下一个匹配的文本
N - 向后查找前一个匹配的文本
向后搜索
? - 使用模式进行搜索,并定位到前一个匹配的文本
n - 向后查找下一个匹配的文本
N - 向前查找前一个匹配的文本
tee说明
mysql>tee filename
可以将之后在mysql的所有输入输出操作记录到filename中。
prompt说明
用于修改mysql提示符
[mysql]
prompt=(
来自:http://blog.sina.com.cn/s/blog_45722cc00100z5wm.html

1:在终端下:mysql -V。 以下是代码片段:
[shengting@login ~]$ mysql -V
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)
2:在mysql中:mysql> status;
以下是代码片段:
mysql> status;
--------------
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)
Connection id: 416
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 3.23.56-log
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: latin1
UNIX socket: /tmp/mysql_3311.sock
Uptime: 62 days 21 hours 21 min 57 sec
Threads: 1 Questions: 584402560 Slow queries: 424 Opens: 59664208 Flush tables: 1 Open tables: 64 Queries per second avg: 107.551
3:在help里面查找
以下是代码片段:
[shengting@login ~]$ mysql --help | grep Distrib
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)
4:使用mysql的函数
以下是代码片段:
mysql> select version();
+-------------+
| version() |
+-------------+
| 3.23.56-log |
+-------------+
1 row in set (0.00 sec)
来自:http://www.cnblogs.com/end/archive/2011/10/18/2216461.html
[shengting@login ~]$ mysql -V
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)
2:在mysql中:mysql> status;
以下是代码片段:
mysql> status;
--------------
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)
Connection id: 416
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 3.23.56-log
Protocol version: 10
Connection: Localhost via UNIX socket
Client characterset: latin1
Server characterset: latin1
UNIX socket: /tmp/mysql_3311.sock
Uptime: 62 days 21 hours 21 min 57 sec
Threads: 1 Questions: 584402560 Slow queries: 424 Opens: 59664208 Flush tables: 1 Open tables: 64 Queries per second avg: 107.551
3:在help里面查找
以下是代码片段:
[shengting@login ~]$ mysql --help | grep Distrib
mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686)
4:使用mysql的函数
以下是代码片段:
mysql> select version();
+-------------+
| version() |
+-------------+
| 3.23.56-log |
+-------------+
1 row in set (0.00 sec)
来自:http://www.cnblogs.com/end/archive/2011/10/18/2216461.html
[实践Ok]在CentOS6.2下安装DNS并快速配置实例,共八步,心路历程如下:
背景介绍:
在日常的开发中,往往会在测试机和外网的Http的Url实际接口是不一样的,在测试机一个Url地址,在外网中又是一个地址。
这样在我们在开发时,在上线时就会去修改一下接口,在线下测试时用线下的Url接口,最后的情况是,在SVN的管理中会变得
很混乱,也就是在上线上的版本和线下测试的版本在改动上来回切换,版本号不段的切换,为此,为了解决这个问题,必须引入
自己建立一套内网测试系统的DNS来实现其和外网一样的环境,进而在实际开发中就不会出现因URL的接口包含的不同域名而导致
了代码版本管理的版本号不段攀升。
实际操作:
在Linux下尤其是CentOS这样的免费系统上有Yum这样的包管理工具来安DNS服务器,但是我在实践中发现其并不理想,可能是打出的Rpm包多少有些
不太让人满意,我试过用直接运行:yum install bind bind-utils bind-libs bind-chroot caching-nameserver,但后来在配置DNS时出现这样那样的问题.
找不到配置文件?(loading from master file 225.168.192.in-add.arpa failed: file not found)我X,什么权限问题都试了,但就是搞不定,于是否,
改用源码安装,这样来得更保险此些,操控性也强很多,有人问我,你的人生由谁来操盘:我操!
我的上手安装和配置如下:
一:开始安装DNS服务器Bind:
下载 bind http://www.isc.org,解压bind-9.9.1-P1.tar.gz。
tar -zxvf bind-9.9.1-P1.tar.gz
进入 bind-9.9.1-P1.tar.gz文件夹
cd bind-9.9.1-P1
创建安装目录,我是安装在 /usr/local/named
mkdir /usr/local/named
编译,指定安装目录,指定man目录,开启多线程支持(测试环境也就没有必要搞多线程了,要整看帮助。)
./configure --prefix=/usr/local/named
Make 大约需要几分钟,只要不报错就继续下去。
make
Make install 安装
make install
没有报错,就表示安装成功了。
创建以下目录以备用
mkdir /usr/local/named/namedb
二:开始配置bind
创建 rndc.conf文件,用bind自带程序生成
cd /usr/local/named/
sbin/rndc-confgen > etc/rndc.conf //一直死在这儿了,只得强制终止。
查原因,在网上搜索:linux安装dns,rndc-confgen没反应,哈,有一篇文章说到点上了,
Url:http://www.nginxs.com/linux/43.html,他说是,摘录如下:
在官方网站上看到这么一条信息
You must use the keyboard to create entropy, since your system is lacking
/dev/random (or equivalent)
start typing:
rndc-confgen: generate key: out of entropy
大概意思就是服务器上没有random产生器,这种情况下我们就手动伪造一个文件代替/dev/random的功能
###新建一个 random 文件随即输入一串数字“记得要长~~
shell $> vim random
asdkfjalsjdflajsldfjlasjdflajsldfjalsjdflajslfjalsjflasjfl
###查看 rndc-confgen 帮助
shell $> ../sbin/rndc-confgen –help
rndc-confgen: invalid argument –
Usage:
rndc-confgen [-a] [-b bits] [-c keyfile] [-k keyname] [-p port] [-r randomfile] [-s addr] [-t chrootdir] [-u user]
-a: generate just the key clause and write it to keyfile (/usr/local/named/etc/rndc.key)
-b bits: from 1 through 512, default 128; total length of the secret
-c keyfile: specify an alternate key file (requires -a)
-k keyname: the name as it will be used in named.conf and rndc.conf
-p port: the port named will listen on and rndc will connect to
-r randomfile: a file containing random data
-s addr: the address to which rndc should connect
-t chrootdir: write a keyfile in chrootdir as well (requires -a)
-u user: set the keyfile owner to “user” (requires -a)
,上面这一句是核心,自己整个Random文件是桥梁。
tail -10 rndc.key | head -9 | sed 's/# //g' > named.conf
把这个named.conf放在etc的文件夹子下:/usr/local/named/etc/named.conf。
ok 问题解决了,接下来我们配置 我们的 域名服务器吧。
三:配置篇
编辑named.conf
# vi /usr/local/named/etc/named.conf
写入以下内容:我的Ip:192.168.225.128 ,注意:225.168.192.in-add.arpa是Ip的反解,刚好倒过来。
退出,保存。
创建并编辑 localhost.zone 文件
vi /usr/local/named/localhost.zone
写入以下内容:
创建并编辑 localhost.rev 文件
# vi /usr/local/named/localhost.rev
因前面在,51test.com这个是在其他网页上抄过来的简单示例,于是也就顺便把文件也贴上:
vi /usr/local/named/51test.com.zone
再不是51test.com的反解配置文件:
vi /usr/local/named/225.168.192.in-add.arpa
配置注意事项:
配置文件中的 "@" 符号前不能有任何空白字符
配置文件中的 "IN" 字符前必须有空格或TAB
到此,配置大功告成。
四:
下载一个named.root 到/usr/local/named/下
ftp://ftp.rs.internic.net/domain/named.root
Ftp失效,从这儿下载:
http://www.smth.edu.cn/bbsgcon.php?board=FreeBSD&num=1209
特别注意:bind的配置文档是区分大小写的,因现在那个FTP好像下载不了,于是我也贴下面。
vi /usr/local/named/named.ca
五:运行Bind程序,如下方式加载配置文件启动,加上调试信息参数:
如果运行结果最后一行显示Running
表明安装并启动成功。
最后需要注意的内容是不要忘了是否真正的开启服务器端口(以下是named.conf文件中端口的设置语句,可以看到端口号是 53:telnet x.x.x.x 53)
当然也可以用:nmap localhost ,没有yum安装,这种小工具问题不大用yum来做。
yum install nmap
Total download size: 2.3 M
Installed size: 7.5 M
Is this ok [y/N]: y
Downloading Packages:
root@192.168.225.128:/usr/local/named# nmap localhost
Starting Nmap 5.21 ( http://nmap.org ) at 2012-06-18 03:09 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000033s latency).
Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1
Not shown: 994 closed ports
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tcp open http
111/tcp open rpcbind
3306/tcp open mysql
9000/tcp open cslistener
端口号是 53就是DNS Bind的端口。
六:停止及启动:
root@192.168.225.128:/usr/local/named# ps aux|grep name
root 19024 0.0 1.2 10624 6216 pts/0 T 03:00 0:00 /usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf
root@192.168.225.128:/usr/local/named# kill -9 19024
root@192.168.225.128:/usr/local/named# ps aux|grep name
[2]+ 已杀死 /usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf
七:本机测试,外部机器测试是否dns生效:
vi /etc/resolv.conf
加上,去掉注释其他Dns的Ip值:
nameserver 192.168.225.128
启动Dns后,清楚Bind服务器上的Dns缓存:
root@192.168.225.128:/usr/local/named# ./sbin/rndc flush
root@192.168.225.128:/usr/local/named# ping www.51test.com
PING www.51test.com (192.168.225.128) 56(84) bytes of data.
64 bytes from 192.168.225.128: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from 192.168.225.128: icmp_seq=2 ttl=64 time=0.058 ms
八:将服务设置为开机自启,把named 添加到启动项,随操作系统一起启动即可:
但是,我们现在是源码的安装,So,得这样子喔。
修改来自Apache里的启动shell(参看一下自启动的标准),也可以不用修改,直接如下也成,内容如下:
1)保存为/etc/init.d/dns
脚本执行权限添加:
2)chmod -R a+x /etc/init.d/dns //env: /etc/init.d/dns: 权限不够 ,必须给加上。
3)把脚本拷贝至/etc/init.d/目录下,执行命令:
ln -s /etc/init.d/dns /etc/rc.d/rc3.d/S61dns
ln -s /etc/init.d/dns /etc/rc.d/rc4.d/S61dns
ln -s /etc/init.d/dns /etc/rc.d/rc5.d/S61dns
再执行:
chkconfig --add dns //解释:相当于Windows下的自动启动服务,特别要注意:chkconfig –add dns的时候,出现dns服务不支持chkconfig。
如果想让服务支持chkconfig,必须定义服务的启动级,启动优先级,关闭优先级,还有描述,如上,必须得加上描述等。
chkconfig --levels dns345 on //也成
开机启动设置完毕:
service dns start
-----------------------------------------------
下次一开机也就会运行这个脚本,以启动自己定义的Dns服务器。
启动后,查看是否自己就启动了呢?如下:
果然,又启动起来了,大功告成,整完收工。
Dns服务器从安装到调试配置并测试完成,Eof。Write and Opt By:jackxiang 2012/06/17 20:30:00
后来,我自己配置了一个新的域名:naimanqi.com.cn ,我的Linux机器IP是:192.168.1.105
修改配置文件:
1)共用如下:
3)反向解析文件:
4)正向解析的文件:
注意这一行: IN A 192.168.1.105
这个目的是把浏览器访问:naimanqi.com.cn这个域名也给解析到IP: 192.168.1.105上来,跟在后面的www IN A 192.168.1.105 这个是对www解析的,其实它是一个二级域名和admin 这种二级域名是一个意思:admin IN A 192.168.1.105 。。。EOF。
最后,可以这样玩这个DNS,这个CentOs6.3的Linux 不是建立在这个NAT下的嘛,后修改为Bridge(桥连),这样后,反正是在一个网段内(路由器下),把自己外网的这台Windows下的机器的DNS由192.168.1.1修改为:192.168.1.105,这样既可以调试刚才配置的内部DNS进行调试,也可 以访问外网,为什么呢?是因为:
是因,内部DNS没有找到那个地址后,它自动转给上一级DNS去了,后得到那个外部网站的IP地址了。但修改为NAT后,好像启动Centos里的DNS后,再在Windows上修改IP为桥连后的IP好像DNS解析不了,在Linux自己修改 /etc/resolve.conf后是可以的,所以,建议用桥连方式来开发,少用NAT方式,这样可以在一个路由器下的电脑都可以配置上这个Dns来访问该网站和开发网部(samba),很是方便,而DNS设置后,如果没有这个网站在内网,它便会访问外网,这种机制也是很好的。
背景介绍:
在日常的开发中,往往会在测试机和外网的Http的Url实际接口是不一样的,在测试机一个Url地址,在外网中又是一个地址。
这样在我们在开发时,在上线时就会去修改一下接口,在线下测试时用线下的Url接口,最后的情况是,在SVN的管理中会变得
很混乱,也就是在上线上的版本和线下测试的版本在改动上来回切换,版本号不段的切换,为此,为了解决这个问题,必须引入
自己建立一套内网测试系统的DNS来实现其和外网一样的环境,进而在实际开发中就不会出现因URL的接口包含的不同域名而导致
了代码版本管理的版本号不段攀升。
实际操作:
在Linux下尤其是CentOS这样的免费系统上有Yum这样的包管理工具来安DNS服务器,但是我在实践中发现其并不理想,可能是打出的Rpm包多少有些
不太让人满意,我试过用直接运行:yum install bind bind-utils bind-libs bind-chroot caching-nameserver,但后来在配置DNS时出现这样那样的问题.
找不到配置文件?(loading from master file 225.168.192.in-add.arpa failed: file not found)我X,什么权限问题都试了,但就是搞不定,于是否,
改用源码安装,这样来得更保险此些,操控性也强很多,有人问我,你的人生由谁来操盘:我操!
我的上手安装和配置如下:
一:开始安装DNS服务器Bind:
下载 bind http://www.isc.org,解压bind-9.9.1-P1.tar.gz。
tar -zxvf bind-9.9.1-P1.tar.gz
进入 bind-9.9.1-P1.tar.gz文件夹
cd bind-9.9.1-P1
创建安装目录,我是安装在 /usr/local/named
mkdir /usr/local/named
编译,指定安装目录,指定man目录,开启多线程支持(测试环境也就没有必要搞多线程了,要整看帮助。)
./configure --prefix=/usr/local/named
Make 大约需要几分钟,只要不报错就继续下去。
make
Make install 安装
make install
没有报错,就表示安装成功了。
创建以下目录以备用
mkdir /usr/local/named/namedb
二:开始配置bind
创建 rndc.conf文件,用bind自带程序生成
cd /usr/local/named/
sbin/rndc-confgen > etc/rndc.conf //一直死在这儿了,只得强制终止。
查原因,在网上搜索:linux安装dns,rndc-confgen没反应,哈,有一篇文章说到点上了,
Url:http://www.nginxs.com/linux/43.html,他说是,摘录如下:
在官方网站上看到这么一条信息
You must use the keyboard to create entropy, since your system is lacking
/dev/random (or equivalent)
start typing:
rndc-confgen: generate key: out of entropy
大概意思就是服务器上没有random产生器,这种情况下我们就手动伪造一个文件代替/dev/random的功能
###新建一个 random 文件随即输入一串数字“记得要长~~
shell $> vim random
asdkfjalsjdflajsldfjlasjdflajsldfjalsjdflajslfjalsjflasjfl
###查看 rndc-confgen 帮助
shell $> ../sbin/rndc-confgen –help
rndc-confgen: invalid argument –
Usage:
rndc-confgen [-a] [-b bits] [-c keyfile] [-k keyname] [-p port] [-r randomfile] [-s addr] [-t chrootdir] [-u user]
-a: generate just the key clause and write it to keyfile (/usr/local/named/etc/rndc.key)
-b bits: from 1 through 512, default 128; total length of the secret
-c keyfile: specify an alternate key file (requires -a)
-k keyname: the name as it will be used in named.conf and rndc.conf
-p port: the port named will listen on and rndc will connect to
-r randomfile: a file containing random data
-s addr: the address to which rndc should connect
-t chrootdir: write a keyfile in chrootdir as well (requires -a)
-u user: set the keyfile owner to “user” (requires -a)
,上面这一句是核心,自己整个Random文件是桥梁。
tail -10 rndc.key | head -9 | sed 's/# //g' > named.conf
把这个named.conf放在etc的文件夹子下:/usr/local/named/etc/named.conf。
ok 问题解决了,接下来我们配置 我们的 域名服务器吧。
三:配置篇
编辑named.conf
# vi /usr/local/named/etc/named.conf
写入以下内容:我的Ip:192.168.225.128 ,注意:225.168.192.in-add.arpa是Ip的反解,刚好倒过来。
退出,保存。
创建并编辑 localhost.zone 文件
vi /usr/local/named/localhost.zone
写入以下内容:
创建并编辑 localhost.rev 文件
# vi /usr/local/named/localhost.rev
因前面在,51test.com这个是在其他网页上抄过来的简单示例,于是也就顺便把文件也贴上:
vi /usr/local/named/51test.com.zone
再不是51test.com的反解配置文件:
vi /usr/local/named/225.168.192.in-add.arpa
配置注意事项:
配置文件中的 "@" 符号前不能有任何空白字符
配置文件中的 "IN" 字符前必须有空格或TAB
到此,配置大功告成。
四:
下载一个named.root 到/usr/local/named/下
ftp://ftp.rs.internic.net/domain/named.root
Ftp失效,从这儿下载:
http://www.smth.edu.cn/bbsgcon.php?board=FreeBSD&num=1209
特别注意:bind的配置文档是区分大小写的,因现在那个FTP好像下载不了,于是我也贴下面。
vi /usr/local/named/named.ca
五:运行Bind程序,如下方式加载配置文件启动,加上调试信息参数:
如果运行结果最后一行显示Running
表明安装并启动成功。
最后需要注意的内容是不要忘了是否真正的开启服务器端口(以下是named.conf文件中端口的设置语句,可以看到端口号是 53:telnet x.x.x.x 53)
当然也可以用:nmap localhost ,没有yum安装,这种小工具问题不大用yum来做。
yum install nmap
Total download size: 2.3 M
Installed size: 7.5 M
Is this ok [y/N]: y
Downloading Packages:
root@192.168.225.128:/usr/local/named# nmap localhost
Starting Nmap 5.21 ( http://nmap.org ) at 2012-06-18 03:09 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000033s latency).
Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1
Not shown: 994 closed ports
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tcp open http
111/tcp open rpcbind
3306/tcp open mysql
9000/tcp open cslistener
端口号是 53就是DNS Bind的端口。
六:停止及启动:
root@192.168.225.128:/usr/local/named# ps aux|grep name
root 19024 0.0 1.2 10624 6216 pts/0 T 03:00 0:00 /usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf
root@192.168.225.128:/usr/local/named# kill -9 19024
root@192.168.225.128:/usr/local/named# ps aux|grep name
[2]+ 已杀死 /usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf
七:本机测试,外部机器测试是否dns生效:
vi /etc/resolv.conf
加上,去掉注释其他Dns的Ip值:
nameserver 192.168.225.128
启动Dns后,清楚Bind服务器上的Dns缓存:
root@192.168.225.128:/usr/local/named# ./sbin/rndc flush
root@192.168.225.128:/usr/local/named# ping www.51test.com
PING www.51test.com (192.168.225.128) 56(84) bytes of data.
64 bytes from 192.168.225.128: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from 192.168.225.128: icmp_seq=2 ttl=64 time=0.058 ms
八:将服务设置为开机自启,把named 添加到启动项,随操作系统一起启动即可:
但是,我们现在是源码的安装,So,得这样子喔。
修改来自Apache里的启动shell(参看一下自启动的标准),也可以不用修改,直接如下也成,内容如下:
1)保存为/etc/init.d/dns
脚本执行权限添加:
2)chmod -R a+x /etc/init.d/dns //env: /etc/init.d/dns: 权限不够 ,必须给加上。
3)把脚本拷贝至/etc/init.d/目录下,执行命令:
ln -s /etc/init.d/dns /etc/rc.d/rc3.d/S61dns
ln -s /etc/init.d/dns /etc/rc.d/rc4.d/S61dns
ln -s /etc/init.d/dns /etc/rc.d/rc5.d/S61dns
再执行:
chkconfig --add dns //解释:相当于Windows下的自动启动服务,特别要注意:chkconfig –add dns的时候,出现dns服务不支持chkconfig。
如果想让服务支持chkconfig,必须定义服务的启动级,启动优先级,关闭优先级,还有描述,如上,必须得加上描述等。
chkconfig --levels dns345 on //也成
开机启动设置完毕:
service dns start
-----------------------------------------------
下次一开机也就会运行这个脚本,以启动自己定义的Dns服务器。
启动后,查看是否自己就启动了呢?如下:
果然,又启动起来了,大功告成,整完收工。
Dns服务器从安装到调试配置并测试完成,Eof。Write and Opt By:jackxiang 2012/06/17 20:30:00
后来,我自己配置了一个新的域名:naimanqi.com.cn ,我的Linux机器IP是:192.168.1.105
修改配置文件:
1)共用如下:
3)反向解析文件:
4)正向解析的文件:
注意这一行: IN A 192.168.1.105
这个目的是把浏览器访问:naimanqi.com.cn这个域名也给解析到IP: 192.168.1.105上来,跟在后面的www IN A 192.168.1.105 这个是对www解析的,其实它是一个二级域名和admin 这种二级域名是一个意思:admin IN A 192.168.1.105 。。。EOF。
最后,可以这样玩这个DNS,这个CentOs6.3的Linux 不是建立在这个NAT下的嘛,后修改为Bridge(桥连),这样后,反正是在一个网段内(路由器下),把自己外网的这台Windows下的机器的DNS由192.168.1.1修改为:192.168.1.105,这样既可以调试刚才配置的内部DNS进行调试,也可 以访问外网,为什么呢?是因为:
是因,内部DNS没有找到那个地址后,它自动转给上一级DNS去了,后得到那个外部网站的IP地址了。但修改为NAT后,好像启动Centos里的DNS后,再在Windows上修改IP为桥连后的IP好像DNS解析不了,在Linux自己修改 /etc/resolve.conf后是可以的,所以,建议用桥连方式来开发,少用NAT方式,这样可以在一个路由器下的电脑都可以配置上这个Dns来访问该网站和开发网部(samba),很是方便,而DNS设置后,如果没有这个网站在内网,它便会访问外网,这种机制也是很好的。
虚拟机默认启动Mysql,发现没有启动得了,于是,看了下Mysql的启动日志,如下:
解决办法:
这主要是没有权限读取,给个权限就OK了
1: 初始化数据库做了没有?
/usr/local/mysql/bin/mysqld_install_db --user=mysql
2:权限问题
chown -R root.mysql /usr/local/mysql/
chown -R mysql /usr/local.mysql/var/
调整lib库路径:
echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
重新加载配置
ldconfig
启动mysql
/usr/local/mysql/bin/mysql_safe --user=mysql &
查看是否启动了
netstat -ntpl | grep 3306
解决办法:
这主要是没有权限读取,给个权限就OK了
1: 初始化数据库做了没有?
/usr/local/mysql/bin/mysqld_install_db --user=mysql
2:权限问题
chown -R root.mysql /usr/local/mysql/
chown -R mysql /usr/local.mysql/var/
调整lib库路径:
echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
重新加载配置
ldconfig
启动mysql
/usr/local/mysql/bin/mysql_safe --user=mysql &
查看是否启动了
netstat -ntpl | grep 3306
MySQL 命令自动补齐功能
实践得知,这个只是在本服务器上,且在是自己的client连接自己的db时有这个补全,但是呢,这有个问题是补全并不很智能。
方法一、
vi /etc/my.cnf
[mysql]
#no-auto-rehash
auto-rehash #添加auto-rehash
默认是:
[mysql] [mysql]
no-auto-rehash auto-rehash
在重启一下mysql服务,补全命令按 TAB 建,效果如下
mysql> select co
code comment commentCount consumeAmount content country connect
方法二、
在mysql启动时加参数auto-rehash
mysqld_safe --user=mysql --auto-rehash &
http://blog.chinaunix.net/uid-11327712-id-165736.html
实践得知,这个只是在本服务器上,且在是自己的client连接自己的db时有这个补全,但是呢,这有个问题是补全并不很智能。
方法一、
vi /etc/my.cnf
[mysql]
#no-auto-rehash
auto-rehash #添加auto-rehash
默认是:
[mysql] [mysql]
no-auto-rehash auto-rehash
在重启一下mysql服务,补全命令按 TAB 建,效果如下
mysql> select co
code comment commentCount consumeAmount content country connect
方法二、
在mysql启动时加参数auto-rehash
mysqld_safe --user=mysql --auto-rehash &
http://blog.chinaunix.net/uid-11327712-id-165736.html
问题:
Q: Could not find install dir for editor ...?
A: 找不到 编辑器的安装路径,绿色版本的一般会出现该问题;
编辑“tools\EditPlus安装路径.reg”,将其中的EditPlus路径修改为你自己的,然后保存,然后双击导入注册表即可。
或者打开regedit,在HKEY_CURRENT_USER\Software\ES-Computing\EditPlus 3\Install,设置Path字符串属性,值为 编辑器安装路径,不存在项或者目录就建立新的。
如果是EditPlus2,记得修改为EditPlus 2。
依旧不行后,找到了解决办法:
打开注册表编辑器
运行——>regedit
找到分支:HKEY_CURRENT_USER\SoftWare\ES-Computing\EditPlus 3
把EditPlus 3 修改为 EditPlus 2 ,对!就是只改个数字,原因请看下面的问题分析。
问题分析:
在sf上下载的OpenCTags版本号是 1.0.0 ,最后更新时间是2006年,当时还没发布editplus 3.
请看下面的源码被下划线修饰的那行。
附带openctags下载地址:
http://sourceforge.net/projects/openctags/files/openctags/
来自:http://my.oschina.net/u/135304/blog/61341
Q: Could not find install dir for editor ...?
A: 找不到 编辑器的安装路径,绿色版本的一般会出现该问题;
编辑“tools\EditPlus安装路径.reg”,将其中的EditPlus路径修改为你自己的,然后保存,然后双击导入注册表即可。
或者打开regedit,在HKEY_CURRENT_USER\Software\ES-Computing\EditPlus 3\Install,设置Path字符串属性,值为 编辑器安装路径,不存在项或者目录就建立新的。
如果是EditPlus2,记得修改为EditPlus 2。
依旧不行后,找到了解决办法:
打开注册表编辑器
运行——>regedit
找到分支:HKEY_CURRENT_USER\SoftWare\ES-Computing\EditPlus 3
把EditPlus 3 修改为 EditPlus 2 ,对!就是只改个数字,原因请看下面的问题分析。
问题分析:
在sf上下载的OpenCTags版本号是 1.0.0 ,最后更新时间是2006年,当时还没发布editplus 3.
请看下面的源码被下划线修饰的那行。
附带openctags下载地址:
http://sourceforge.net/projects/openctags/files/openctags/
来自:http://my.oschina.net/u/135304/blog/61341
关于php中设置session过期时间的问题
Php/Js/Shell/Go jackxiang 2012-6-13 16:43
关于php的session文件垃圾回收机制。我已经在网上看了不少资料。大致是说session过期并不会马上清除session文件,而是每次有请求过来的时候根据session.gc_probability/session.gc_divisor的值为概率去遍历以便session目录下的session文件看是否存在过期的session文件,如果过期则清楚。
阅读全文

Windows下如何用C语言清空特定文件夹中的所有文件
Unix/LinuxC技术 jackxiang 2012-6-13 12:33
来自:http://software.intel.com/zh-cn/blogs/2011/10/12/c-13/?cid=sw:prccsdn2030
背景:nginx 请求php的9000端口也是一个问题,nginx就是客户端,实践发现类似shell 正常返回0,错误返回1,fastcgi的php也是一样,php有一个队列,backlog =sysctl_somaxconn; //也就是说当backlog=-1时,在内核中backlog被赋值为/proc/sys/net/core/somaxconn 的值,本机上为262144,性能差是由于php-fpm backlog参数设置为-1,导致fpm没能及时取出完成连接队列的socket,出现SYN 超时,最终导致压不上去,表现出性能差。
所以安装php-fpm时backlog一定要重新设置,不能用fpm默认配置的-1 ,可以根据机器的并发量来设置,建议设置在1024以上,最好是2的幂值(因为内核会调整成2的n次幂)。而只要这个backlog满了nginx还向php发请求就会返回503,即拒绝客户端的连接。
502 Bad Gateway(处理超过php的设置时间,并不是执行错误,执行错误是500)
The server was acting as a gateway or proxy and received an invalid response from the upstream server.
503 Service Unavailable(PHP的队列backlog满了还来请求如队列被拒绝的状态码)
The server is currently unavailable (because it is overloaded or down for maintenance). Generally, this is a temporary state.
504 Gateway Time-out
The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.
more:https://m.zyku.net/nginx/1753.html
ngx_http_limit_req_module 模块,这个可以限制每秒的请求,超过就返回 503 错误码。
是用共享内存实现的:http://www.cnblogs.com/fll369/archive/2012/11/26/2789572.html
2012.1.7 更新
编译的时候推荐使用nginx-1.0以上版本,不要加--with-debug参数编译,(感谢agentzh指出)。
hashdos这个事,严格意义上不是各种语言的错了(不过perl的确处理得很好),但是用nginx来擦屁股要干净些。
借鉴tomcat的作法,实现了下面这个nginx-http-hashdos-module,通过设置hashdos(默认on)的开关和body_max_count(默认值1000),对nginx后面的服务进行安全防护,相比对php或者java进行patch,这或许是最好的办法了。
nginx-http-hashdos-module项目地址
https://github.com/54chen/nginx-http-hashdos-module
如何使用
1.下载zip后保存到一个目录,如~/nginx-http-hashdos-module。
2.cd nginx-1.0.9/
3.重新编译和安装nginx
./configure --prefix=/opt/soft/nginx --with-pcre --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --add-module=/path_to/nginx-http-hashdos-module/ && make && make install
4.配置打开:
hashdos on;
body_max_count 1000;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /opt/soft/nginx/conf/fastcgi_params;
client_body_buffer_size 2m;
client_max_body_size 2m;
}
注意事项
因为计算参数都在内存中进行,所以client_body_buffer_size 与 client_max_body_size 的值一定要相等。推荐2m。
TODO
改进in-file时的post分析。
原理
介于微博上有网友对此文扫一眼之后以为是简单通过client_body_buffer_size和client_max_body_size来做的判断,特加此节。
nginx-reqeust-body在接到请求时,根据header中的声明,判断是保存在内存还是在硬盘中,当大小超过两个buf和client_body_buffer_size大小时,会写入临时文件。
防止hashdos的终极目标是filter用户的输入,所以对用户的输入参数数量进行计数。超过1000(body_max_count的默认数量)时,返回一个413给攻击者。希望不要再渔到各种高级工程师。
参考:http://www.54chen.com/_linux_/nginx-hashdos-help.html
nginx 防止小型ddos攻击
所以安装php-fpm时backlog一定要重新设置,不能用fpm默认配置的-1 ,可以根据机器的并发量来设置,建议设置在1024以上,最好是2的幂值(因为内核会调整成2的n次幂)。而只要这个backlog满了nginx还向php发请求就会返回503,即拒绝客户端的连接。
502 Bad Gateway(处理超过php的设置时间,并不是执行错误,执行错误是500)
The server was acting as a gateway or proxy and received an invalid response from the upstream server.
503 Service Unavailable(PHP的队列backlog满了还来请求如队列被拒绝的状态码)
The server is currently unavailable (because it is overloaded or down for maintenance). Generally, this is a temporary state.
504 Gateway Time-out
The server was acting as a gateway or proxy and did not receive a timely response from the upstream server.
more:https://m.zyku.net/nginx/1753.html
ngx_http_limit_req_module 模块,这个可以限制每秒的请求,超过就返回 503 错误码。
是用共享内存实现的:http://www.cnblogs.com/fll369/archive/2012/11/26/2789572.html
2012.1.7 更新
编译的时候推荐使用nginx-1.0以上版本,不要加--with-debug参数编译,(感谢agentzh指出)。
hashdos这个事,严格意义上不是各种语言的错了(不过perl的确处理得很好),但是用nginx来擦屁股要干净些。
借鉴tomcat的作法,实现了下面这个nginx-http-hashdos-module,通过设置hashdos(默认on)的开关和body_max_count(默认值1000),对nginx后面的服务进行安全防护,相比对php或者java进行patch,这或许是最好的办法了。
nginx-http-hashdos-module项目地址
https://github.com/54chen/nginx-http-hashdos-module
如何使用
1.下载zip后保存到一个目录,如~/nginx-http-hashdos-module。
2.cd nginx-1.0.9/
3.重新编译和安装nginx
./configure --prefix=/opt/soft/nginx --with-pcre --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --add-module=/path_to/nginx-http-hashdos-module/ && make && make install
4.配置打开:
hashdos on;
body_max_count 1000;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /opt/soft/nginx/conf/fastcgi_params;
client_body_buffer_size 2m;
client_max_body_size 2m;
}
注意事项
因为计算参数都在内存中进行,所以client_body_buffer_size 与 client_max_body_size 的值一定要相等。推荐2m。
TODO
改进in-file时的post分析。
原理
介于微博上有网友对此文扫一眼之后以为是简单通过client_body_buffer_size和client_max_body_size来做的判断,特加此节。
nginx-reqeust-body在接到请求时,根据header中的声明,判断是保存在内存还是在硬盘中,当大小超过两个buf和client_body_buffer_size大小时,会写入临时文件。
防止hashdos的终极目标是filter用户的输入,所以对用户的输入参数数量进行计数。超过1000(body_max_count的默认数量)时,返回一个413给攻击者。希望不要再渔到各种高级工程师。
参考:http://www.54chen.com/_linux_/nginx-hashdos-help.html
nginx 防止小型ddos攻击
linux 启动ftp服务,sftp服务
Unix/LinuxC技术 jackxiang 2012-6-12 20:51
启动ftp服务:
在/etc/rc.d/init.d/目录下:命令 service vsftp start
启动ssh服务,sftp服务
在/etc/init.d/目录下: 命令 /etc/init.d/sshd start 注意这里需要在绝对路径下执行sshd start
开启root可以通过ftp软件连接的功能:
默认有一些用户是不能通过ftp连接服务器的,比如root。如果需要开启这些用户,就需要做一些修改才可以。
(1)编辑/etc/vsftp/ftpusers文件,去掉里面root一行
这个文件里存放的是被禁止的登录名
(2)编辑/etc/vsftp/user_list文件,去掉里面root一行
说明:当文件/etc/vsftpd/vsftpd.conf中userlist_deny=YES时
文件user_list和ftpusers中的登录名列表被禁止
具体查看ftpusers,user_list文件的注释
在/etc/rc.d/init.d/目录下:命令 service vsftp start
启动ssh服务,sftp服务
在/etc/init.d/目录下: 命令 /etc/init.d/sshd start 注意这里需要在绝对路径下执行sshd start
开启root可以通过ftp软件连接的功能:
默认有一些用户是不能通过ftp连接服务器的,比如root。如果需要开启这些用户,就需要做一些修改才可以。
(1)编辑/etc/vsftp/ftpusers文件,去掉里面root一行
这个文件里存放的是被禁止的登录名
(2)编辑/etc/vsftp/user_list文件,去掉里面root一行
说明:当文件/etc/vsftpd/vsftpd.conf中userlist_deny=YES时
文件user_list和ftpusers中的登录名列表被禁止
具体查看ftpusers,user_list文件的注释