[个人原创]Apache多虚拟机配置下如何通过直接输入IP后确定指向哪个域名的方法,以及实践中发现apache加上虚拟主机后,用ip访问并不是指向刚安好Apache时的默认Web目录的解决办法。
Php/Js/Shell/Go jackxiang 2011-9-15 10:15
通过测试和在PHP高级群里询问得知默认指向了我的一个虚拟机的网站,但是我们往往配置是这样的:
这个*.conf不知Apache去指向哪个虚拟主机了,于是,就在上面加了一个,成这样了:
经测试,直接输入IP访问时就是指向了/usr/local/apache2/htdocs 目录了,呵呵。
PHP高级群里有兄弟问:
要放在所有的VirtualHost前面吧?
答:
放后面也没关系。
一样的,我试了。
---------------------再次实践总结----------------------------
再次配置时,发现用apache的虚拟主机挂了好几个域名。 然后几天遇到的问题是如果直接用ip访问,或者用了一个未配置的域名的访问,那么刷出来的页面竟然不是apache的欢迎页,而是虚拟主机配置中的第一个域名。
原因分析并实践Ok如下:
apache网站解释为当一个请求到达的时候,服务器会首先检查它是否使用了一个能和
NameVirtualHost相匹配的IP地址。如果能够匹配, 它就会查找每个与这个IP地址相对应的
配置段, 并尝试找出一个ServerName或ServerAlias配置项与请求的主机名相同的。如果
找到了,它就会使用这个服务器的配置。 否则,将使用符合这个IP地址的第一个列出的虚拟主机。
其实这个时候,比如用ip直接访问,IE浏览器会提示他已经超出访问范围了。。
解决这个的问题的方案是添加下面的配置到虚拟机主机配置文件中(也就是如果有虚拟机后Apache不会去默认的那个DocumentRoot "d:/wamp/www/" 里,如果用IP访问Apache而是会去找第一个虚拟机的DocumentRoot ),要想在配置虚拟域名后还能指向当前的默认的那个DocumentRoot ,则在虚拟机配置的第一个加上一个指向默认的那个DocumentRoot目录的虚拟机配置即可)。
如下配置:
===========================================================================
apache 设置禁止IP直接访问:
刚好相反的对防止用IP访问到网站的方法,附录:
1.建一个虚拟机提示错误
apache虚拟主机默认情况下ip地址方式访问对应第一个虚拟主机,所以我们可以先建一个指向错误页面的虚拟主机,达到禁止用ip访问网页的目的。
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
</VirtualHost>
echo "请不要用IP访问" >/usr/local/apache2.2.22/htdocs/index.html
2.直接限制访问
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
<Directory />
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
注意:在配置虚拟主机的时候,因为http.conf默认配置了默认主机,所以可以将http.conf里面配置主机的部分全部注释掉,所有主机都在http_vhost.conf里面配置。
这个*.conf不知Apache去指向哪个虚拟主机了,于是,就在上面加了一个,成这样了:
经测试,直接输入IP访问时就是指向了/usr/local/apache2/htdocs 目录了,呵呵。
PHP高级群里有兄弟问:
要放在所有的VirtualHost前面吧?
答:
放后面也没关系。
一样的,我试了。
---------------------再次实践总结----------------------------
再次配置时,发现用apache的虚拟主机挂了好几个域名。 然后几天遇到的问题是如果直接用ip访问,或者用了一个未配置的域名的访问,那么刷出来的页面竟然不是apache的欢迎页,而是虚拟主机配置中的第一个域名。
原因分析并实践Ok如下:
apache网站解释为当一个请求到达的时候,服务器会首先检查它是否使用了一个能和
NameVirtualHost相匹配的IP地址。如果能够匹配, 它就会查找每个与这个IP地址相对应的
配置段, 并尝试找出一个ServerName或ServerAlias配置项与请求的主机名相同的。如果
找到了,它就会使用这个服务器的配置。 否则,将使用符合这个IP地址的第一个列出的虚拟主机。
其实这个时候,比如用ip直接访问,IE浏览器会提示他已经超出访问范围了。。
解决这个的问题的方案是添加下面的配置到虚拟机主机配置文件中(也就是如果有虚拟机后Apache不会去默认的那个DocumentRoot "d:/wamp/www/" 里,如果用IP访问Apache而是会去找第一个虚拟机的DocumentRoot ),要想在配置虚拟域名后还能指向当前的默认的那个DocumentRoot ,则在虚拟机配置的第一个加上一个指向默认的那个DocumentRoot目录的虚拟机配置即可)。
如下配置:
===========================================================================
apache 设置禁止IP直接访问:
刚好相反的对防止用IP访问到网站的方法,附录:
1.建一个虚拟机提示错误
apache虚拟主机默认情况下ip地址方式访问对应第一个虚拟主机,所以我们可以先建一个指向错误页面的虚拟主机,达到禁止用ip访问网页的目的。
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
</VirtualHost>
echo "请不要用IP访问" >/usr/local/apache2.2.22/htdocs/index.html
2.直接限制访问
<VirtualHost *:80>
ServerAdmin ngnix@qq.com
DocumentRoot "/usr/local/apache2.2.22/htdocs"
ServerName 192.168.3.140
<Directory />
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
注意:在配置虚拟主机的时候,因为http.conf默认配置了默认主机,所以可以将http.conf里面配置主机的部分全部注释掉,所有主机都在http_vhost.conf里面配置。
[个人原创]Linux中的rpm编译依赖问题及如何对rpm包查询其依赖其它rpm的命令,/usr/bin/ld: cannot find -l* 错误的解决方法……
Unix/LinuxC技术 jackxiang 2011-9-12 19:07
rpm -qR cnginx-1.4.7-1.x86_64
openssl-devel
pcre-devel
libpcre.so.0()(64bit)
......
Linux中往往是这样子的,一对的,例如:
有一个真的包,也就是有so包,往往还有一个:libxslt-devel-1.1.17-2.el5_2.2包,它的作用就是把libxslt-1.1.17-2.el5_2.2的相关配置放到Linux默认编译能找得到的位置,如:
这样的错误,说是找不到这个xslt-config这个文件,而你一看,libxslt-1.1.17-2.el5_2.2安装了,就是找不到,然后,你用命令:
发现xslt-config 不在这个包里面,而实际呢?
在这个包里呢?所以要多关注:devel这样的rpm喔。
扯远了一点儿,还是继续说吧,碰到这个问题大概可以用这个方法去解决(我碰到几个都是这样搞定的):
譬如:
解决方法:
其实有可能是你自己的Mysql安装后没有把它放入到那个默认的lib目录中即可,如下:
/usr/lib中去,如下:
openssl-devel
pcre-devel
libpcre.so.0()(64bit)
......
Linux中往往是这样子的,一对的,例如:
有一个真的包,也就是有so包,往往还有一个:libxslt-devel-1.1.17-2.el5_2.2包,它的作用就是把libxslt-1.1.17-2.el5_2.2的相关配置放到Linux默认编译能找得到的位置,如:
这样的错误,说是找不到这个xslt-config这个文件,而你一看,libxslt-1.1.17-2.el5_2.2安装了,就是找不到,然后,你用命令:
发现xslt-config 不在这个包里面,而实际呢?
在这个包里呢?所以要多关注:devel这样的rpm喔。
扯远了一点儿,还是继续说吧,碰到这个问题大概可以用这个方法去解决(我碰到几个都是这样搞定的):
譬如:
解决方法:
其实有可能是你自己的Mysql安装后没有把它放入到那个默认的lib目录中即可,如下:
/usr/lib中去,如下:
[个人原创]配置并查看 Nginx 的工作状态
Unix/LinuxC技术 jackxiang 2011-9-11 12:40
先说我的简单配置:
访问:
http://status.jackxiang.com/
然后看是怎么配置和相关模块,及参数含义,如下:
http_stub_ status这个模块能够获取Nginx自上次启动以来的工作状态 此模块非核心模块,需要在编译的时候手动添加编译参数 --with-http_stub_ status _module ,配置说明:
指令
stub_status
stub_status
语法: stub_status on
默认值: None
作用域: location
创建一个 location 区域启用 stub_status
"stub status" 模块返回的状态信息跟 mathopd's 的状态信息很相似. 返回的状态信息如下:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106active connections -- 对后端发起的活动连接数
server accepts handled requests -- nginx 总共处理了 16630948 个连接, 成功创建 16630948 次握手 (证明中间没有失败的), 总共处理了 31070465 个请求 (平均每次握手处理了 1.8个数据请求)
reading -- nginx 读取到客户端的Header信息数
writing -- nginx 返回给客户端的Header信息数
waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing), 意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接
访问:
http://status.jackxiang.com/
然后看是怎么配置和相关模块,及参数含义,如下:
http_stub_ status这个模块能够获取Nginx自上次启动以来的工作状态 此模块非核心模块,需要在编译的时候手动添加编译参数 --with-http_stub_ status _module ,配置说明:
指令
stub_status
stub_status
语法: stub_status on
默认值: None
作用域: location
创建一个 location 区域启用 stub_status
"stub status" 模块返回的状态信息跟 mathopd's 的状态信息很相似. 返回的状态信息如下:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106active connections -- 对后端发起的活动连接数
server accepts handled requests -- nginx 总共处理了 16630948 个连接, 成功创建 16630948 次握手 (证明中间没有失败的), 总共处理了 31070465 个请求 (平均每次握手处理了 1.8个数据请求)
reading -- nginx 读取到客户端的Header信息数
writing -- nginx 返回给客户端的Header信息数
waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing), 意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接
php json_encode函数不支持BIGINT的问题
新浪微博的32位id,twitter的id过大超过BIGINT也遇到类似的问题,发现是php的json_decode函数不支持62位的BIGINT, 溢出所致.
php好像不分类型但它也依赖于CPU位数,但mysql bigint 范围 -9223372036854775808 到 9223372036854775807
在新的php(5.4版本) json_decode里倒是有一个开关”JSON_BIGINT_AS_STRING”开关,可以使json_decode默认把BITINT当成string处理.
而我们的实际情况是,更新php的版本的速度不会有那么快.而且大部分情况下,咱们也控制不了具体使用哪个php版本,只好采取一个折中
办法:
把微博API返回的json字符串预处理一下,然后再调用json_decode.
也就是把
换成string的类型:
代码片段如下,希望对和我类似情况的人有用.
截取部分实验了一把,如下:
运行如下:
Json中id这个给转成了sting,输出正常,而e这个json的键值,给当成了浮点数,输出为:
通过var_dump查其类型分别如下:
参考:http://drupal.org/node/985544
新浪微博的32位id,twitter的id过大超过BIGINT也遇到类似的问题,发现是php的json_decode函数不支持62位的BIGINT, 溢出所致.
php好像不分类型但它也依赖于CPU位数,但mysql bigint 范围 -9223372036854775808 到 9223372036854775807
在新的php(5.4版本) json_decode里倒是有一个开关”JSON_BIGINT_AS_STRING”开关,可以使json_decode默认把BITINT当成string处理.
而我们的实际情况是,更新php的版本的速度不会有那么快.而且大部分情况下,咱们也控制不了具体使用哪个php版本,只好采取一个折中
办法:
把微博API返回的json字符串预处理一下,然后再调用json_decode.
也就是把
换成string的类型:
代码片段如下,希望对和我类似情况的人有用.
截取部分实验了一把,如下:
运行如下:
Json中id这个给转成了sting,输出正常,而e这个json的键值,给当成了浮点数,输出为:
通过var_dump查其类型分别如下:
参考:http://drupal.org/node/985544
[个人原创]运营习惯之差点无小事,Linux下Rm操作误删除根问题及习惯问题。
Unix/LinuxC技术 jackxiang 2011-9-8 11:28
在Linux下给你权限小了呢?你说在原有目录下部分文件是root创建的,或者其他兄弟用root角色创建的或者拷贝过来的,无法用小帐号删除,你说要root方便,于是你sudo -s 也好,su root也好成了root,爽了吧,于是你开始整了,如下:
root在终端上执行rm -rf ./命令。一时疏忽,错把目录./ 打成/,虽然及时发现,按下ctrl+c中断命令执行,但已过去几秒钟,开发机上的部分文件已经被删除。
这时系统还是照常运行,但已经是微稳了,于是某一天,那一天,一个测试人员测试一紧急项目,发现该机器的页面打开很慢,直接对apache多次重启后,情况依旧,看似很专业的vmstat查看系统资源时,没有发现异常,只因时间已晚,调试心情急切,一时冲动,输入了重启的命令。造成了服务器无法重启,挂了,这到底是谁的错,好像有个歌曲有点像:)
其实,这根源就是只差一点造成的,习惯决定,忘记了,但有一个好的操作习惯会避免这些问题的发生或者把范围缩小。
我的一点Linux下rm小习惯,如下,可以参考下,有更好的更好:
1.rm时要养成心中多一点的习惯:
rm -Rf ./. 平衡点
当你看到这个时,你敢马上删除吗?不会,这就可能得到避免了
rm -Rf /. 不平衡
2.再就是常用PWD来探测:进入目录中并PWD确定无误后再删除
以减少把跟给干掉一部分了,这样留下隐患,万一有人重启就挂。
3.就是修改那个rm -Rf 这个玩意把它通过alias(别名)整个搞成一个移动而不是真删除
万一整出问题到移动的文件夹找回,这个rm -Rf 就相当于 mv folder /tmpfolder.
4.实在是没有法子了张宴兄弟好像介绍一个可以磁盘恢复的软件,看能否找回,但看是
简单,好像也很难搞。URL:http://blog.s135.com/linux_ext3_undelete/
5.系统启动后自动运行脚本,使其终端这样显示,随时知道你的位置,类似于PWD:
root@116.255.139.240:/data0/proxy_temp_dir# ,这个脚本忘记放哪儿了...
在 root 目录下,生成一个 .bashrc 文件
来源:补上,来自Scottjiang兄弟,Thanks。
最后,一个小心的操作,以及习惯的养成,才是国防之根本。
root在终端上执行rm -rf ./命令。一时疏忽,错把目录./ 打成/,虽然及时发现,按下ctrl+c中断命令执行,但已过去几秒钟,开发机上的部分文件已经被删除。
这时系统还是照常运行,但已经是微稳了,于是某一天,那一天,一个测试人员测试一紧急项目,发现该机器的页面打开很慢,直接对apache多次重启后,情况依旧,看似很专业的vmstat查看系统资源时,没有发现异常,只因时间已晚,调试心情急切,一时冲动,输入了重启的命令。造成了服务器无法重启,挂了,这到底是谁的错,好像有个歌曲有点像:)
其实,这根源就是只差一点造成的,习惯决定,忘记了,但有一个好的操作习惯会避免这些问题的发生或者把范围缩小。
我的一点Linux下rm小习惯,如下,可以参考下,有更好的更好:
1.rm时要养成心中多一点的习惯:
rm -Rf ./. 平衡点
当你看到这个时,你敢马上删除吗?不会,这就可能得到避免了
rm -Rf /. 不平衡
2.再就是常用PWD来探测:进入目录中并PWD确定无误后再删除
以减少把跟给干掉一部分了,这样留下隐患,万一有人重启就挂。
3.就是修改那个rm -Rf 这个玩意把它通过alias(别名)整个搞成一个移动而不是真删除
万一整出问题到移动的文件夹找回,这个rm -Rf 就相当于 mv folder /tmpfolder.
4.实在是没有法子了张宴兄弟好像介绍一个可以磁盘恢复的软件,看能否找回,但看是
简单,好像也很难搞。URL:http://blog.s135.com/linux_ext3_undelete/
5.系统启动后自动运行脚本,使其终端这样显示,随时知道你的位置,类似于PWD:
root@116.255.139.240:/data0/proxy_temp_dir# ,这个脚本忘记放哪儿了...
在 root 目录下,生成一个 .bashrc 文件
来源:补上,来自Scottjiang兄弟,Thanks。
最后,一个小心的操作,以及习惯的养成,才是国防之根本。
[朝花夕拾]smarty 打开报错提示(错误提示)并调试查看所有变量,smarty 调试打印数组及显示变量。直接查看编译结果看是否有smarty模板编译缓存。
Php/Js/Shell/Go jackxiang 2011-9-7 20:39
一,调试模式查看所有变量和数组
1、设置配置文件中的 debuging的值为true。即开始调试(设置完这一步,一般情况下在浏览页面的时候就可以看到一个弹窗了,里面有在这个页面里的所有smarty变量。如果没有弹出看下一步)。
2、在模版里输入{debug},就可以看到这个模版里的变量了。
如果要关闭掉调试控制台,设置变量 $debugging 为 false 就可以了。
不同的情况那个debug是不一样的,实际中特别注意要$tpl->caching = false;不能缓存时看全部DB输出的变量:
在模板中是这样:
在smarty编译后的模板里是这样的:
要想能真正报错其实践的结论是,三个都打开:
1.error_reporting(E_ALL);打开,否则有错容易报不出来:
2.$tpl->debugging = true;
3.在输出页面里加入调试变量:
二,非调试模式下查看变量和数组,也就是从弹出框中所有变量只看一部分,以方便调试。
1、Smarty下如何查看数组:
如果你在使用smarty时,想查看某变量的内容,而又不想打开smarty debug,或smarty debug的输出不能满足你的要求,可以这样用。
如果是查看数组,应当
我自己试了下是这样:
会输出到页面里,不是弹出框。
注意:这里用@是来保证把变量当做一个整体对待,否则会遍历这个array.
查看变量:
2、Smarty下如何调试数组,无论这个:$tpl-> debugging = TRUE; 或者:False都可以:
比如要调试数组$array
实践如下:
调试变量就
偶的实践:
请注意:数组都有一个@,呵呵。阅读全文
1、设置配置文件中的 debuging的值为true。即开始调试(设置完这一步,一般情况下在浏览页面的时候就可以看到一个弹窗了,里面有在这个页面里的所有smarty变量。如果没有弹出看下一步)。
2、在模版里输入{debug},就可以看到这个模版里的变量了。
如果要关闭掉调试控制台,设置变量 $debugging 为 false 就可以了。
不同的情况那个debug是不一样的,实际中特别注意要$tpl->caching = false;不能缓存时看全部DB输出的变量:
在模板中是这样:
在smarty编译后的模板里是这样的:
要想能真正报错其实践的结论是,三个都打开:
1.error_reporting(E_ALL);打开,否则有错容易报不出来:
2.$tpl->debugging = true;
3.在输出页面里加入调试变量:
二,非调试模式下查看变量和数组,也就是从弹出框中所有变量只看一部分,以方便调试。
1、Smarty下如何查看数组:
如果你在使用smarty时,想查看某变量的内容,而又不想打开smarty debug,或smarty debug的输出不能满足你的要求,可以这样用。
如果是查看数组,应当
我自己试了下是这样:
会输出到页面里,不是弹出框。
注意:这里用@是来保证把变量当做一个整体对待,否则会遍历这个array.
查看变量:
2、Smarty下如何调试数组,无论这个:$tpl-> debugging = TRUE; 或者:False都可以:
比如要调试数组$array
实践如下:
调试变量就
偶的实践:
请注意:数组都有一个@,呵呵。阅读全文
[个人原创]用Fiddler2进行简单的并发及安全测试,用Filddler来模拟一次或者多次不同的浏览器页面请求的方法
Php/Js/Shell/Go jackxiang 2011-9-7 11:38
Fiddler 2对Flex开发和联调很有用,因为Flash Player的某些HTTP请求调的不是浏览器的HTTP接口,而是自己实现的,这类请求用httpwatch/firebug下是观察不到的。这类请求 就是文件上传请求(Flash Player按照RFC1867规范自行发的请求)。
背景:在我们的开发测试中,往往是一些表单的提交,还时常带着Cookie,Session的后台验证才能提交,而我们最关心的还是提交,而不是前面的验证,在实际中往往浏览器提交一次后,再回来做二次测试时,其HTML数据控件已经没有了,得再次输入数据,这给我们带来了很大的不方便,为此,我们常常用的FireBug这样的插件也不能满足我们的需求,在这样的背景下催生出一个叫Filddler2的工具,能带给我们惊喜,也就是解决了这个问题,可以让我们自己对后台做多次调试,其模拟了Http协议的Cookie,Session表单数据提交,带来了方便,步骤如下:
(1)启动Filddler程序后,找到一个需要再做一次的URL连接, Firefox调试确保Filddler2界面左下角是:
Capturing | All Processes | 空[这儿是可以阻塞的地方] | 通过个数是空[会显示捕获个数]。
确保是让其在做下面模拟的URL时让其阻塞,后我们再放开,就再次模拟人为进交一次,这里带Session,Cookie等,给我们带
来了实实在在的方便。
(2)打开Firefox后,工具>选项>网络>设置>手动配置代理勾选上>Http代理:127.0.0.1>端口:8888
(3)看步骤1中有All Processes 空[这儿是可以阻塞的地方],点可以阻塞的地方让其出现黑色T的红色背景框即可。
(4)点击Fiddler面板上某个需要再次调试的URL,右键-》Replay -》Reissue Requests,如直接点它,会自动出现一个一样的连接。
如果按住Shift按扭再点Reissue Requests,会出现输入框让你输入要模拟多少次,这儿可以用来做简单的并发测试滴,我们就模拟一次。
(5)然后,看第4步,就是放开我们的那个阻塞的按钮,也就是然后取掉断点状态。
(6)点击软件上的“Resume All”,释放被拦截的请求,此时30多条记录就会并发向后台请求。
新版本V4里找不到Resume All按钮了,直接在第3步里的下面命令行里输入 : g or go Resume all breakpointed sessions g 也成。
(7)此时,观察我们待测试的页面,会自动弹出窗口,提示语句,SQL等等。
可能出现的问题,如8888端口被占用会配置了代理后,Firefox访问页面出现访问不了,如何排查如下:
如果Windows中查看Fiddler的8888端口是否开启或者被其它程序占用的简单方法。
还不明白,可以参考:http://jackxiang.com/post/735/ 如何通过端口看是哪个程序占用的方法。
我对自己的博客修改文章做了下实验是Ok的,如下:
1)自己先用Firefox保存一下自己写的这篇博文,并把这个保存的URL给找出来,http://jackxiang.com/admin.php,删除Fiddler的其他
的URL。
2)用其他浏览器修改一个博文的文字和1保存时的不一样。
3)直接跳过到上面第4步,再Replay一次,也就是不用柱塞,直接再提交一次,后返回200
4)看DB,发现我的博文又给修改回1步骤时的文字了,模拟成功,Yeah。
最后,还是上一张图吧,除开Firefox设置代理外,都放一块,有兴趣可以摸索摸索:阅读全文
背景:在我们的开发测试中,往往是一些表单的提交,还时常带着Cookie,Session的后台验证才能提交,而我们最关心的还是提交,而不是前面的验证,在实际中往往浏览器提交一次后,再回来做二次测试时,其HTML数据控件已经没有了,得再次输入数据,这给我们带来了很大的不方便,为此,我们常常用的FireBug这样的插件也不能满足我们的需求,在这样的背景下催生出一个叫Filddler2的工具,能带给我们惊喜,也就是解决了这个问题,可以让我们自己对后台做多次调试,其模拟了Http协议的Cookie,Session表单数据提交,带来了方便,步骤如下:
(1)启动Filddler程序后,找到一个需要再做一次的URL连接, Firefox调试确保Filddler2界面左下角是:
Capturing | All Processes | 空[这儿是可以阻塞的地方] | 通过个数是空[会显示捕获个数]。
确保是让其在做下面模拟的URL时让其阻塞,后我们再放开,就再次模拟人为进交一次,这里带Session,Cookie等,给我们带
来了实实在在的方便。
(2)打开Firefox后,工具>选项>网络>设置>手动配置代理勾选上>Http代理:127.0.0.1>端口:8888
(3)看步骤1中有All Processes 空[这儿是可以阻塞的地方],点可以阻塞的地方让其出现黑色T的红色背景框即可。
(4)点击Fiddler面板上某个需要再次调试的URL,右键-》Replay -》Reissue Requests,如直接点它,会自动出现一个一样的连接。
如果按住Shift按扭再点Reissue Requests,会出现输入框让你输入要模拟多少次,这儿可以用来做简单的并发测试滴,我们就模拟一次。
(5)然后,看第4步,就是放开我们的那个阻塞的按钮,也就是然后取掉断点状态。
(6)点击软件上的“Resume All”,释放被拦截的请求,此时30多条记录就会并发向后台请求。
新版本V4里找不到Resume All按钮了,直接在第3步里的下面命令行里输入 : g or go Resume all breakpointed sessions g 也成。
(7)此时,观察我们待测试的页面,会自动弹出窗口,提示语句,SQL等等。
可能出现的问题,如8888端口被占用会配置了代理后,Firefox访问页面出现访问不了,如何排查如下:
如果Windows中查看Fiddler的8888端口是否开启或者被其它程序占用的简单方法。
还不明白,可以参考:http://jackxiang.com/post/735/ 如何通过端口看是哪个程序占用的方法。
我对自己的博客修改文章做了下实验是Ok的,如下:
1)自己先用Firefox保存一下自己写的这篇博文,并把这个保存的URL给找出来,http://jackxiang.com/admin.php,删除Fiddler的其他
的URL。
2)用其他浏览器修改一个博文的文字和1保存时的不一样。
3)直接跳过到上面第4步,再Replay一次,也就是不用柱塞,直接再提交一次,后返回200
4)看DB,发现我的博文又给修改回1步骤时的文字了,模拟成功,Yeah。
最后,还是上一张图吧,除开Firefox设置代理外,都放一块,有兴趣可以摸索摸索:阅读全文
[人个原创]使用Linux的rsync命令实现: 网站镜像和代码分发及备份
Unix/LinuxC技术 jackxiang 2011-9-6 15:45
启动rsyncd的命令行:
理解:从{ip}这台机器上用root用户连接远程rsync服务器和本机需要同步的目录/usr/local/push_endsvr 同步,
并作限定速度为3000KB,不需要同步logs目录!
关键参数解释:
rsync --help|grep bwlimit
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
--progress show progress during transfer
--include=PATTERN don't exclude files matching PATTERN
--port=PORT specify double-colon alternate port number
实际测试情况如下:
里面是配置了从/root/elink这个目录向:/home/elink这个目录推送,后查看目录/home/elink的层次结构发现如下:
说明/root/elink/jackxiang.txt 中包含目录也给推送到了/home/elink下,形成/home/elink/elink/jackxiang.txt
阅读全文
理解:从{ip}这台机器上用root用户连接远程rsync服务器和本机需要同步的目录/usr/local/push_endsvr 同步,
并作限定速度为3000KB,不需要同步logs目录!
关键参数解释:
rsync --help|grep bwlimit
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
--progress show progress during transfer
--include=PATTERN don't exclude files matching PATTERN
--port=PORT specify double-colon alternate port number
实际测试情况如下:
里面是配置了从/root/elink这个目录向:/home/elink这个目录推送,后查看目录/home/elink的层次结构发现如下:
说明/root/elink/jackxiang.txt 中包含目录也给推送到了/home/elink下,形成/home/elink/elink/jackxiang.txt
阅读全文
Download Url:
http://www.zend.com/en/products/studio/downloads
用户名:xdy108
密码:001002 【 好入没试过了 ,实践可用。AddTime:20150717】
邮箱:xdy108@126.com
抓包了下Url: http://downloads.zend.com/studio-eclipse/8.0.1/ZendStudio-8.0.1.msi
方便下载。
——————————————————————————————————————————
zend studio 8.0.1 注册码(适用于7.0以上所有版本)
Username: zendstudio.net
Serial Number: 3727234F6095F72034F6095F
注册激活让它不在有使用限制,这个不用费话了上注册码:
在Helpj->register
Username: zendstudio.net
Serial Number: 3727234F6095F72034F6095F
你也可以通过在线注册机:http://x.zendstudio.net/Zend_Studio-for-Eclipse-6_0-KeyMaker/注,也可以完成注册激活。
http://www.zend.com/en/products/studio/downloads
用户名:xdy108
密码:001002 【 好入没试过了 ,实践可用。AddTime:20150717】
邮箱:xdy108@126.com
抓包了下Url: http://downloads.zend.com/studio-eclipse/8.0.1/ZendStudio-8.0.1.msi
方便下载。
——————————————————————————————————————————
zend studio 8.0.1 注册码(适用于7.0以上所有版本)
Username: zendstudio.net
Serial Number: 3727234F6095F72034F6095F
注册激活让它不在有使用限制,这个不用费话了上注册码:
在Helpj->register
Username: zendstudio.net
Serial Number: 3727234F6095F72034F6095F
你也可以通过在线注册机:http://x.zendstudio.net/Zend_Studio-for-Eclipse-6_0-KeyMaker/注,也可以完成注册激活。
工具->选项->内容->字体&颜色->高级 把其中“允许页面选择显示字体而无需使用上面设置”把前面的勾去掉
加到Css的style里:
那还要在工具-选项-内容-字体设置里强制雅黑字体,userchrome.css只管firefox界面字体;
去掉那个允许网页选择自己的字体样式那个勾,然后设置雅黑字体就行了。
加到Css的style里:
那还要在工具-选项-内容-字体设置里强制雅黑字体,userchrome.css只管firefox界面字体;
去掉那个允许网页选择自己的字体样式那个勾,然后设置雅黑字体就行了。
php一共分为五大运行模式:
cgi fast-cgi cli isapi apache 模块的 DLL
cgi:
CGI即通用网关接口(Common Gateway Interface),它是一段程序, 通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,
它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。
CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。
每有一个用户请求,都会激活一个CGI进程,当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。
Isapi:
ISAPI即Internet Server Application Program Interface,是微软提供的一套面向Internet服务的API接口
一个ISAPI的DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,
ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。(由于微软的排他性,只能运行于windows环境)
fast-cgi:
fast-cgi 是cgi的升级版本,FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。
(该运行模式只可用户生产环境,至于原因大家可以仔细研究一番,这里我做一些基础的分享,有兴趣的同学也可以关注我本季度的分享培训)
阅读全文
cgi fast-cgi cli isapi apache 模块的 DLL
cgi:
CGI即通用网关接口(Common Gateway Interface),它是一段程序, 通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,
它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。
CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。
每有一个用户请求,都会激活一个CGI进程,当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。
Isapi:
ISAPI即Internet Server Application Program Interface,是微软提供的一套面向Internet服务的API接口
一个ISAPI的DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,
ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。(由于微软的排他性,只能运行于windows环境)
fast-cgi:
fast-cgi 是cgi的升级版本,FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。
(该运行模式只可用户生产环境,至于原因大家可以仔细研究一番,这里我做一些基础的分享,有兴趣的同学也可以关注我本季度的分享培训)
阅读全文
[实践OK]linux wget 抓取整个网站网页包括css背景图片,对一些前端做了不让打开F12的JS提示文件搜索,PHP wget 获取文件
Unix/LinuxC技术 jackxiang 2011-9-1 23:06
-r, –recursive(递归) specify recursive download.(指定递归下载)
-k, –convert-links(转换链接) make links in downloaded HTML point to local files.(将下载的 HTML 页面中的链接转换为相对链接即本地链接)
-p, –page-requisites(页面必需元素) get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容)
-np, –no-parent(不追溯至父级) don’t ascend to the parent directory.
另外断点续传用 - nc 参数 日志 用 - o 参数
http://www.mokeyjay.com/archives/959
整站下载后用grep 实现找JS提示文案,定位JS文件名称:
示例用wget下载整个目录包括图片和CSS&HTML:
root@116.255.139.240:/home/admin/wget#
wget -r -x http://c.jackxiang.com/login/index.html?url=http://bbs.jackxiang.com/passport.php
查看下载情况:
root@116.255.139.240:/home/admin/wget/c.jackxiang.com/login# ls
css images index.html?url=http:%2F%2Fbbs.jackxiang.com%2Fpassport.php
阅读全文
[个人原创]Linux用GDB调试时如何打印数组,结构体的全值打印及其修改或加入变量调试。
Unix/LinuxC技术 jackxiang 2011-9-1 12:58
一.调试打印C程序中的数组的方法
二.打印C程序中的结构体的方法
打印整个结构体:
打结构体中的某个值:
如果打开printf pretty这个选项,那么当GDB显示结构体时会比较漂亮。如:
四.修改变量的值
他人实践:http://wenku.baidu.com/view/77cbd54f767f5acfa1c7cdda.html
GDB个人总结下载:
参看:http://wiki.ubuntu.org.cn/index.php?title=%E7%94%A8GDB%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F&variant=zh-cn
本站参考:
http://jackxiang.com/post/4014/
http://jackxiang.com/post/757/
使用 GDB 调试多进程程序:
http://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/
http://tieba.baidu.com/f?kz=874502809
http://blog.163.com/redhumor@126/blog/static/1955478420108192540752/
二.打印C程序中的结构体的方法
打印整个结构体:
打结构体中的某个值:
如果打开printf pretty这个选项,那么当GDB显示结构体时会比较漂亮。如:
四.修改变量的值
他人实践:http://wenku.baidu.com/view/77cbd54f767f5acfa1c7cdda.html
GDB个人总结下载:
下载文件
参看:http://wiki.ubuntu.org.cn/index.php?title=%E7%94%A8GDB%E8%B0%83%E8%AF%95%E7%A8%8B%E5%BA%8F&variant=zh-cn
本站参考:
http://jackxiang.com/post/4014/
http://jackxiang.com/post/757/
使用 GDB 调试多进程程序:
http://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/
http://tieba.baidu.com/f?kz=874502809
http://blog.163.com/redhumor@126/blog/static/1955478420108192540752/
我的开发环境是nginx+php,准备作一个soap的实验,soapclient和soapserver都是在我的开发机上,用soapclient访问soapserver的时候,总是返回504错误,相同的代码【http://www.jackxiang.com/post/3956/】放到apache+php_module的环境下没有问题。
nginx的错误日志显示,client和server的错误都是fastcgi超时,我一度怀疑是soapserver的问题,soapserver超时不响应,导致了soapclient的超时。
但是我用cli模式执行client,server能正常返回,说明不是soapserver的问题。
用nginx下的client访问apache上的server,正常
用apache下的client访问nginx上的server,正常
我恍然大悟,是不是进程数的问题,先怀疑nginx,后怀疑php-cgi,一查资料,如果用php-cgi -b9000直接器fastcgi的话,同时只能处理一个请求,soapclient和soapserver需要两个进程,soapclient把进程挂 起等soap server返回,但是soapserver等待soapclient释放phpcgi的进程,所以一直都是返回504了。
赶紧打个fpm的补丁,困惑n天的问题解决了。
有人提了个Bug:
https://bugs.php.net/bug.php?id=52922
错误如下:
Fatal error: Uncaught SoapFault exception: [Client] Function ("getError") is not a valid method for this service in /data0/htdocs/center/hello.php:10 Stack trace: #0 /data0/htdocs/center/hello.php(10): SoapClient->__call('getError', Array) #1 /data0/htdocs/center/hello.php(10): SoapClient->getError() #2 {main} thrown in /data0/htdocs/center/hello.php on line 10
nginx的错误日志显示,client和server的错误都是fastcgi超时,我一度怀疑是soapserver的问题,soapserver超时不响应,导致了soapclient的超时。
但是我用cli模式执行client,server能正常返回,说明不是soapserver的问题。
用nginx下的client访问apache上的server,正常
用apache下的client访问nginx上的server,正常
我恍然大悟,是不是进程数的问题,先怀疑nginx,后怀疑php-cgi,一查资料,如果用php-cgi -b9000直接器fastcgi的话,同时只能处理一个请求,soapclient和soapserver需要两个进程,soapclient把进程挂 起等soap server返回,但是soapserver等待soapclient释放phpcgi的进程,所以一直都是返回504了。
赶紧打个fpm的补丁,困惑n天的问题解决了。
有人提了个Bug:
https://bugs.php.net/bug.php?id=52922
错误如下:
Fatal error: Uncaught SoapFault exception: [Client] Function ("getError") is not a valid method for this service in /data0/htdocs/center/hello.php:10 Stack trace: #0 /data0/htdocs/center/hello.php(10): SoapClient->__call('getError', Array) #1 /data0/htdocs/center/hello.php(10): SoapClient->getError() #2 {main} thrown in /data0/htdocs/center/hello.php on line 10
find 命令查找不包含的目录和文件
Unix/LinuxC技术 jackxiang 2011-8-25 23:59
find命令常用来查找特定目录下,所有相关文件,可是也经常要排除特定内容的文件/目录,比如不想看svn/cvs的系统文件目录,如何做到呢,明显-name不能解决问题,但是可以用find 的 -not参数,比如查找不包含.svn的所有文件:
代码:去SVN目录:
法一:
法二:
再者find经常结合xargs处理复杂的功能。
阅读全文
代码:去SVN目录:
法一:
法二:
再者find经常结合xargs处理复杂的功能。
阅读全文
作为软件开发人员,我认识了很多程序员。他们要么创业办公司,要么是创业公司里股东;要么是在创业公司里打工,或者还在梦想着有朝一日成立自己的公司。我感觉,程序员对创业都非常感兴趣,要么自己创业,要么帮别人创业。
对于有志于创业的人,我的建议是:创业之前,先至少做出一个很好、很有用的产品。不必是用来盈利的;事实上,如果你的产品不带有任何功利性质,那是更好。阅读全文
对于有志于创业的人,我的建议是:创业之前,先至少做出一个很好、很有用的产品。不必是用来盈利的;事实上,如果你的产品不带有任何功利性质,那是更好。阅读全文