背景:后知后觉之经过实践证明,其实,调试还是用print_r($_GET);好,见: https://jackxiang.com/post/1950/ ,辅助下正则猫:RegexBuddy,也就解决了90%的问题。

共计有三个方法来调试这个Urlrewrite:
一)调试apache的urlrewrite是个大问题,这儿有两个哥们的博文作了介绍,特转之。
阅读全文
两台服务器, 两种情况:
1. 两台都同时部署 nginx + php-fpm
2. 一台部署nginx 一台部署 php-fpm, nginx将php请求反向代理给后面的 php-fpm 服务器

我的看法是:
第一种,配置在一起,虽然看似两台nginx可以承载更多的请求,但是由于nginx与php之间 tcp端口,CPU,Mem资源的争抢,很容易造成 nginx timeout, can't connect等错误,看似nginx收到了很多请求,但php正常处理返回的其实并没那么多。
第二种,资源分开,灵活性更高,nginx快速代理,php快速处理,可承载的有效并发会更高一些,高并发时,系统也会更稳定一些。

请问大家,以上两种情况,哪种可承载的有效并发会高一些?为什么? 大家平时会使用哪一种?

第一种好
nginx做haproxy保证高可用
nginx通过unix socket连接到后端的phpfpm,同时一台机器上面可以启用多个phpfpm进程(端口),保证充分利用资源

nginx不是瓶颈,phpfpm才是。

来自:http://www.zhihu.com/question/20030832

Nginx 和 Apache 在 Windows 下的性能表现谁更好?
nginx 的高性能依赖于 Linux 2.6 内核的 epoll [1] 或是 BSD 内核的 kqueue [2] 提供高效的网络套接字状态轮询服务【时间复杂度为 O(1) 】。在没有这两个服务的内核上则退化成为性能低下的 select 【*nix, Windows 都有、时间复杂度为 O(n) 】. Windows 没有 epoll 和 kqueue,nginx 在 Windows 上用 select 表现自然不佳。

Windows 上类似 epoll/kqueue 的服务是 I/O Completion Ports [3]【Solaris 上也有】,理论上讲是比 epoll 更加先进的服务,因为它同时支持套接字、文件、管道【kqueue 类似】,而 epoll 不支持文件。也就是说不能用 epoll 做本地文件的异步 I/O。但不幸的是没有成熟的开源网络服务器使用 I/O Completion Ports。

Apache 的性能不好一概而论。它有好多种模式,主要的两种是:1、prefork 使用的是多进程 [4];2、 worker 使用得是多进程+多线程 [5]。Windows NT 平台上线程的效率比较高【进程的效率则相对 *nix 下低】,所以使用多线程模式性能更优。Apache 还有个专门为 NT 优化的模式 [6],用的是单进程+多线程。

至于说多线程同步 I/O 相对于使用 epoll/kqueue 异步 I/O 两种方式孰优孰劣,有兴趣的朋友可以参考我在另外一个问题的回答 [7]。
wamp套件注册服务是:
服务名称:wampapache
可执行的文件路径:"d:\wamp\bin\apache\apache2.2.22\bin\httpd.exe" -k runservice
服务名称:wampmysqld
可执行的文件路径:d:\wamp\bin\mysql\mysql5.5.24\bin\mysqld.exe wampmysqld

所以,你在资源管理器里也就会以wamp进行查找进程,而不是以apache ,mysql来查找。
————————————————————————————————————————————————————
Windows下安装:wampserver. 后出现,international error...
启动apache时系统提示错误:[error]<os 2>系统找不到指定文件 no installed service named "apache2"

发生此错误的原因是Apache的目录更改了,或者注册表中Apache2服务的信息被更改。

与我之前一篇文章写的Apache出错的原因有些不同:Apache:系统找不到指定的文件: No installed ConfigArgs for the service "Apache2"

反正就是注册表中的路径和Apache实际的路径对不上号,所以提示“系统找不到指定文件”。

解决方案:重新安装apache;

在命令行cmd中cd至Apache所有的目录(运行cmd的时候要以管理员的身份运行才可以)

cd apache所有目录
cd bin
apache -k install
apache -k start

启动ok!

还原一次ghost的win7后也出现这个问题,带得重新install一次:

D:\wamp\bin\apache\apache2.2.22\bin>httpd.exe -k install
Installing the Apache2.2 service
The Apache2.2 service is successfully installed.
Testing httpd.conf....

转自:
http://blog.zxlm.cn/2007/12/apache%E7%B3%BB%E7%BB%9F%E6%89%BE%E4%B8%8D%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9A%84%E6%96%87%E4%BB%B6-no-installed-service-namedapache2.html



后来依旧没有Ok,最后这样才Ok的:
    最近PP小编在做一个PHP的网站,由于重装系统后,电脑的PHP环境需要重新配置,但是为了方便,直接下载了WAMP进行安装,可是出现了为Internal Server Error的内部服务器错误,错误如下:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
    以上提示大概意思为PHP服务器遇到内部错误或配置错误,无法完成请求,请联系服务器管理员等等废话。最后可以在APACHE服务器中查看日志。
    PP小编问了一下度哥“装WAMP提示Internal Server Error”,终于找到了解决的办法。
    Internal Server Error原因:是因为在我的网站目录下面有.htaccess文件,而Apache没有开启rewrite功能,所以才导致了Internal Server Error错误。
    Internal Server Error解决方法:在右下角的WAMP5的图标中,单击选择“Apache Modles”,在模块中选择“rewrite_module”,然后重启一下Apache就OK啦!
来自:http://www.lao8.org/html/8/2011-8-18/wamp_htaccess.html

WampServer Version 2.2打开localhost,phpMyAdmin,提示:系统找不到该文件??
http://www.wampserver.com  (因ghost还原,ghost之前没有ghost进去)
解决办法:重新安装是不行的,问题出现在,默认浏览器的选取上(因Firefox我重新安装了一次,位置变了)
navigator = "D:\Program Files\Firefox\firefox.exe"
       D:\Program Files\Mozilla Firefox\firefox.exe
---------------------------------------------------------------------------------------------------------------------------------------------------
wamp出现could not execute run action问题
上午在安装了Chrome Dev后为了方便将原来的ChromePlus安装目录下的chrome.exe改名成为了chromeplus.exe,而wamp先前安装时选择的默认浏览器就是通过地址定位手动选择的chromeplus,这样修改后必定会出现问题。
几经周折,终于找到了解决方法:
查看wamp安装目录下wampmanager.ini和wampmanager.conf两个文件,核对对应的条目。在D:\wamp\wampmanager.conf中有这么一行:
navigator = "D:\Program Files\ChromePlus\chrome.exe"
改成chromeplus.exe即可,然后再到D:\wamp\wampmanager.ini文件里,ctrl+F搜索phpMyAdmin字样,也很快找到对应的条目,将[Menu.Left]字段下的phpMyAdmin对应浏览器路径修改一下,然后重启wamp,OK,熟悉的淡蓝色界面又出现了。
来自:http://blog.sina.com.cn/s/blog_4a60ba9c0100zzlr.html

以前在深圳时没有注意,这次在北京又出现了,再刷新不出现,所以,这种方式打广告是最好的。



可以看到,你从浏览器上看到的还是你的网页,只不过被iframe进去了,此时被加上一段JS的广告程序。这个时候再点其他栏目,网址是不会变的,因为是在框架内点的啊。
联系机房,机房说不可能,开始怀疑有同一网段的ARP攻击。64位系统,装不了普通的ARP软件,想到换交换机,从普通交换机换到了主核心交换机,弄了一天,还是有劫持。实在没办法了,跪求解决方案。程序是自己写的,编译运行的,是改不了程序的。

而且是在上层劫持的。机房说没有解决办法了,说是服务器的问题。
我的分析:
1.在服务器的Apache上做了扩展,在输出时偶给来一下。
2.dns运营商在那一瞬间做了IP的改动,嵌入了Iframe。【这点不太可能】
3.在Apache输出后在路过时给人把包劫持了,加入了广告,用Iframe方式。【极有可能】
略查了下:ad.istreamsche.com - 180.186.27.7 的地理位置是 北京市 时代互联......
估计是长城宽带的劫持,在中间对流做了改动并给插入了代码。

有兄弟在问怎么知道是在哪儿劫持的,目前还没有这样的手段查到:
http://www.newsmth.net/nForum/#!article/ITExpress/1292497

原理很简单这位兄弟说得很到位,无非是利益的驱动:
http://www.cnblogs.com/cyq1162/archive/2012/11/26/2789424.html

从技术上实现对Iframe进行隐藏,这是不是一种妥协呢,还是技术对抗技术哩Add :2013 - 05 - 04
http://dbanotes.net/security/iframekiller_anti_iframe_clicjacking.html
实践Ok代码如下:


相信很多朋友已经遇到了这个问题,但是都没有什么好的解决方案。首先思路上觉得是只有一个公网IP,必须要有一个支持应用层的程序来进行转发,进行代理才能够顺利的把相应的请求发到相应的后端机器上,结果自然选择nginx来进行反向代理了。
环境:
宿主机是Windows2003,IP为10.1.1.3,装VMware Workstation 6.0。在windows2003上运行nginx的win版。VM开两台虚拟机,网络模式为NAT模式。一台IP为192.168.84.128,一个台为192.168.84.129。分别开启80端口进行web服务。
修改测试机的hosts文件,指定www.001.com和www.002.com到宿主机10.1.1.3。
目的:
通过对宿主机win2003上的nginx设置,使解析到宿主机IP上的域名能够正常访问后面的web服务。适用于只有一个公网IP需要部署多个虚拟机来提供80端口web服务,一个虚拟机一个IP对应一个域名。
方法:
1、在nginx.conf最后一个"}"前,加入"include proxy.conf;"。
2、在同目录下,建立"proxy.conf"文件,内容如下:

此番配置之后,已经可以用任何解析到宿主机的IP的域名,访问自己的站点了。
来源:
http://www.1818tt.com/thread-6844-1-1.html
背景:想买个vps上面安装windows 2003,同时想再安一个vmware6.0,后在vmware上面安一个linux后,通过把linux上的22也就是ssh端口给映射到windows2003 server的外网IP上,进而直接通过securCRT进行ssh 上windows server 2003的固定IP上,达到直接连接到vmware里的Linux上去。有人会说为何不买个linux得了,问得好,因为有个服务器的软件的服务端是windows下的,所以...用了这种方法来实现了。下面讲通过ssh远程登录windows主机上vmware中的linux 如何配置Nat步骤:

具体情况如下: A机器 ip: 192.168.1.102,windows server 2003. B机器 ip:192.168.1.103, windows xp. 现在A机器中安装Vmware软件,并安装一个CentOS6.3。网络配置为Nat,自动分的ip为:192.168.98.128, 检查CentOS6.3正常联网。
问题描述:现在想从B机器SecureCRT 直接连接到A机器中的虚拟机里的CentOS6.3, 方法非常简单,在A机器的本地连接属性中选择共享连接,在设置中,在Vmware6.0里添加一个转发服务: 设定外部端口 22,内部端口 22 内部ip:192.168.98.128。 然后将防火墙的58888端口打开就好。 之后从B主机SecureCRT 连的时候,ip填A主机ip 192.168.1.102,端口号写22. 既可以远程连接,穿透vmware的私有网络。

具体操作:
做地址、端口映射。Vmware菜单=>打开Edit => Virtual Network Setting =>选中NAT那个项目=>Edit...(打开NAT Setting)页,点击Port Forwarding -> Add …
Host Port:22 (主机中的要进行映射的端口) (Win机器下的端口:22)
Virtual Machine IP address : 192.168.98.128 22 (映射到哪个IP(IP地址可在linux中通过ifconfig查看,也就是Linux虚拟机的IP),22端口也就是ssh)
Description: SSH Virtual port (简单写一下简要描述)

特别注意:这儿我配置了好久,上面看似好久,其实涉及到一个网关,英文叫gateway的东东,
1)这个gateway一定要写那个vmware8里的IP,否则出现通过127.0.0.1 22能连接上,但是不能通过:192.168.1.102 22 连接上的问题。
2)再就是在选共享时,会出现把Vmware8的IP由自动获取修改为了一个固定的IP了,这儿需要进行取消固定,让其自己获取IP。

3)对Linux机器上的IP也要通过DHCP自动获取,获取到后修改为静态IP,这样通过1)里及2)里的设置,就实现了一条可以在B机器直接通过A机器的Ip及被Vmware6.0映射的IP及端口都为22,来实现对A机器里的Windows 2003的连接(注意要关闭A机器里的防火墙喔,否则会连接不上滴),到此也就目的达成,Oh,Yeah。



Windows下用netstat查看:
TCP    0.0.0.0:22             JACKXIANG-NB7:0        LISTENING       InHost
TCP    127.0.0.1:22           JACKXIANG-NB7:53582    ESTABLISHED     InHost
TCP    192.168.1.102:22       JACKXIANG-NB7:53566    ESTABLISHED     InHost

在Linux下查看情况:
192.168.98.128:22           192.168.1.102:53566         ESTABLISHED 4847/sshd
192.168.98.128:22           192.168.98.1:53582          ESTABLISHED 4901/sshd
192.168.98.128:22           192.168.98.1:49491          ESTABLISHED 2796/sshd

上面的1)的关键解说:
上面的Linux反复出现192.168.98.1,也就是前面我特别提到的,
在Vmware里的NAT Settings里的Gateway IP address的IP值,是这里的核心设置:192.168.98.1 这个中转是NAT里当以127.0.0.1来连接时的中转Ip,同时这个值它必须自动获取,再记录一下Ok后查看到Vmware8 的默认IP:192.168.98.1 Netmask:255.255.255.0,Ip4 DHCP服务器:192.168.98.254。
同时:
在连接时就可以看得出来,当以127.0.0.1连接Linux时shell会提示:Last login: Sat Dec  8 18:56:48 2012 from 192.168.98.1。
而当从:192.168.1.102连接Linux时,会提示:Last login: Sat Dec  8 19:02:37 2012 from 192.168.1.102。 所以,这个:192.168.98.1是很有意思且核心的一个配置。

再看下膘哥的这一博客:
http://www.neatstudio.com/show-2013-1.shtml

127.0.0.1 是绑定到本机IP
192.168.1.102 是绑定到内网IP
全零网络IP地址0.0.0.0表示意义详谈,查阅百度知道里一些说法如下:
1. 严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一 律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。

2. 网络中0.0.0.0的IP地址表示整个网络,即网络中的所有主机。它的作用是帮助路由器发送路由表中无法查询的包。如果设置了全零网络的路由,路由表中无法查询的包都将送到全零网络的路由中去。
转自:http://liuzhigong.blog.163.com/blog/static/17827237520114207278610/
今天把自己的测试机的SVN配置成ssl了,把它纳入开机启动,但发现它需要密码,一直在那儿:
原因就是机房意外的重启了我的机器,因为apache 要输入ssl密码才能启动,所以就启动不起来。
用下面的方法就可以避免这个问题:
ee /usr/local/etc/apache22/httpd.conf
找到:
<IfModule ssl_module>
加入这样一行:
SSLPassPhraseDialog  exec:/usr/local/etc/apache22/ssl_pass.sh
ee /usr/local/etc/apache22/ssl_pass.sh
加入一个echo语句
#!/bin/sh
echo “password”
然后让它有执行权限:
chmod +x /usr/local/etc/apache22/ssl_pass.sh
再重启一下服务器测试一下看看有没有问题。
My Demo:


autoEnterSSLPwd.sh
#!/bin/sh
echo "XpXd*108"


参考来源:http://blog.csdn.net/ccmjs/article/details/7382852
http://www.cnblogs.com/niniwzw/archive/2011/11/30/2268674.html




后记:
Jack-回忆未来(372647693)  17:02:43
问个问题:apach 配置ssl启动时需要输入密码,怎么不让它输入啊?我默认启动就挂在那儿了。
yening-QQ美食(55881329)  17:31:24
生成ssl密钥的时候好像输入一个 pass phrase 不输入就不用密码
yening-QQ美食(55881329)  17:32:36
否者要自己配 SSLPassPhraseDialog  调外部程序输入口令 ,比较麻烦.
Jack-回忆未来(372647693)  17:39:52
嗯,是啊,是那个填写公司和地址时只输入一次那个是吧?
yening-QQ美食(55881329)  17:40:38
对 。
回车留空即可。
Jack-回忆未来(372647693)  17:41:37
1. 生成服务器的私钥:
openssl genrsa -des3 -out my-server.key 1024  #这里需要你输入密码,记下来
在当前目录下生成了一个my-server.key生成签署申请
Enter pass phrase for server.key:********Verifying - Enter pass phrase for server.key:********
命令运行期间需要用户输入并确认自己的密码。。
这儿对吧?
yening-QQ美食(55881329)  17:42:17

叶宁  17:45:26
openssl genrsa -des3 -out my-server.key 1024  #这里需要你输入密码,记下来
在当前目录下生成了一个my-server.key生成签署申请
Enter pass phrase for server.key:********Verifying - Enter pass phrase for server.key:********
命令运行期间需要用户输入并确认自己的密码。。
这个地方.
~ 反正输password的地方你都留空好了

里面有一地方是输入公司,等:
A challenge password []: 交换密钥
叶宁  17:47:09
都是extra的属性 应该不太需要的.

nginx默认是不允许列出整个目录的。如需此功能,
打开nginx.conf文件,在location server 或 http段中加入
autoindex on;
另外两个参数最好也加上去:
autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间

Demo:
1)防止对.svn目录下的PHP的访问:

2)整个站点的配置如下:
root@192.168.1.105:/usr/local/webserver/nginx/sbin# ./nginx -V
nginx version: nginx/1.2.2
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/software/nginx_http_push_module-0.692 --add-module=/root/software/ngx_cache_purge-1.3

出现:
root@192.168.1.105:~/software/nginx-1.2.2# sh /root/runnginx.sh
nginx: [warn] the "log_format" directive may be used only on "http" level in /usr/local/webserver/nginx/conf/nginx.conf:157
nginx: [warn] the "log_format" directive may be used only on "http" level in /usr/local/webserver/nginx/conf/nginx.conf:181
nginx: [warn] the "log_format" directive may be used only on "http" level in /usr/local/webserver/nginx/conf/nginx.conf:200
nginx: [warn] the "log_format" directive may be used only on "http" level in /usr/local/webserver/nginx/conf/nginx.conf:230
nginx: [warn] the "log_format" directive may be used only on "http" level in /usr/local/webserver/nginx/conf/nginx.conf:274
nginx: [warn] the "log_format" directive may be used only on "http" level in /usr/local/webserver/nginx/conf/nginx.conf:304
像这样的,不要放在server里,将/usr/local/nginx/conf/nginx.conf 里server段里的下面的日志代码移出放到该server段的后面即可。:
    log_format  welog  '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';
     access_log  /var/log/nginx/access.log  weblog;
              }

注意,下面的日志是放在server之外的,即出现警告是放的位置不对    
    log_format  welog  '$remote_addr - $remote_user [$time_local] "$request" '  
                       '$status $body_bytes_sent "$http_referer" '  
                       '"$http_user_agent" "$http_x_forwarded_for"';  
     access_log  /var/log/nginx/access.log  weblog;  
默认并没有开启gzip功能。需要修改apache的配置文件进行开启。

什么是gzip,开启gzip的好处。
开启方法如下:
1. httpd.conf中打开deflate_Module和headers_Module模块 VickieXu
2. httpd.conf中添加: Vickie博客



首先查看apache是否加载了mod_deflate.so模块,如果没有需要安装加载。找到并下载和当前apache版本相同的源码文件,解压缩到/home目录下,在apache安装目录下执行:
/usr/local/apache2/bin/apxs -i -c /home/httpd-2.0.63/modules/filters/mod_deflate.
会自动在 httpd.conf添加
LoadModule deflate_module modules/mod_deflate.so

/usr/local/httpd-2.2.10/bin/apachectl restart
httpd: Syntax error on line 254 of /usr/local/httpd-2.2.10/conf/httpd.conf: module deflate_module is built-in and can't be loaded
解决方案:出现这个情况,表明deflate_module模块是内建的,不用再调入,所以只需要把LoadModule *** 注释就可以了

Egg:
/usr/local/httpd-2.2.10/bin/apxs -i -c /tmp/httpd-rebuild/httpd-2.2.10/modules/filters/mod_deflate.c
chmod 755 /usr/local/httpd-2.2.10/modules/mod_deflate.so

怎么知道开启了Gzip呢?用Httpwatcher或者FireBug抓包如下:
Content-Encoding  gzip  这个即是。

响应头信息原始头信息
Accept-Ranges  bytes
Connection  close
Content-Encoding  gzip
Content-Length  892
Content-Type  text/html; charset=GB2312
Date  Fri, 13 Jul 2012 12:02:08 GMT
Server  Apache
Vary  Accept-Encoding
用户有路由器,网站路过交换机,但也有是境会出现 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协议。如果确定是在路途中给篡改了相关数据,是否可以修改网站的程序进行容错处理(如果你认为该地区很重要),否则,那就点到为此吧,中国是一片神奇的土地,也有神奇的网络,网路结构,要为用户提供好的服务,就看你的产品观和方法手段了,如何服务好你的用户,这是关键,用户没有错,因为有很多用户都生活在城中村里,我们能不能放弃他们,在于我们产品的定位。
   主要是对我的个人博客的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源代码。。。。:(暂时忽略。阅读全文
我是回忆未来[向东],我对回忆未来[张宴]的关于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的内核的功劳,当然,以我为主,为我所用,无所谓了,瞎侃两句,呵呵.
curl之CURLOPT_HTTPHEADER

单个

    <?php
    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"));
    ?>


我们在不设置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;

}



相当于:

172.23.129.*  act.*.qq.com


这样一折腾,就ok了,呵呵!
其实这个主要是解决,在线上有host指向了,但是其他的需哟又需要这个host的域名,而ip不同的情况。

—————————————————————————————————————————————————
用Curl直接模拟Host如下:

以上摘录自:http://jackxiang.com/post/4022/
分页: 4/5 第一页 上页 1 2 3 4 5 下页 最后页 [ 显示模式: 摘要 | 列表 ]