apache和nginx的介绍
1、Apache
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“apatchyserver”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。
到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的网站如Amazon、Yahoo!、W3Consortium、FinancialTimes等都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。
apache的特性:
1)几乎可以运行在所有的计算机平台上.
2)支持最新的http/1.1协议
3)简单而且强有力的基于文件的配置(httpd.conf).
4)支持通用网关接口(cgi)
5)支持虚拟主机.
6)支持http认证.
7)集成perl.
8)集成的代理服务器
9)可以通过web浏览器监视服务器的状态,可以自定义日志.
10)支持服务器端包含命令(ssi).
11)支持安全socket层(ssl).
12)具有用户会话过程的跟踪能力.
13)支持fastcgi
14)支持javaservlets
2、nginx
nginx是俄罗斯人编写的十分轻量级的HTTP服务器,它的发音为“engineX”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器.Nginx是由俄罗斯人IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发.
Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。其拥有匹配Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新。但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用FastCGI方式来执行PHP程序。
nginx做为HTTP服务器,有以下几项基本特性:
处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.
无缓存的反向代理加速,简单的负载均衡和容错.
FastCGI,简单的负载均衡和容错.
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。
Nginx具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。就稳定性而言,nginx比lighthttpd更胜一筹。
Nginx支持热部署。它的启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。
apache和nginx对比
Nginx相对于Apache:
1、高并发响应性能非常好。(单台万级并发连接30000-50000/s(简单静态页))
2、反向代理性能非常好。(可用于负载均衡)
3、内存和cpu占用率低。(为Apache的1/5-1/10)
4、功能较Apache少(常用功能均有)
5、对php可使用cgi方式和fastcgi方式,没有模块编译加载方式。
有人通过两者的性能测试比较(点击查看apache和nginx性能比较),得出结论:nginx作单纯的WEB服务器,也就是放静态内容,性能上比Apache要好,特别可承受压力、带宽及资源消耗上都要优于Apache。
apache和nginx使用区别
1、伪静态写法与区别
apache伪静态写法
rewriteengineon
rewriterule/rss/(.*).xml$/rss/rss.php?a=$1
rewriterule/xml/(.*).xml$/xml/xml.php?a=$1
nginx伪静态写法
rewrite^/rss/(.*).xml$/rss/rss.php?a=$1last;
rewrite^/xml/(.*).xml$/xml/xml.php?a=$1last;
nginx伪静态写法时以^开头并且结束处加个last
2、二级域名Rewrite重写规则区别
1)在Apache下用Rewrite绑定二级域名,要先在网站根目录建立一个“.htaccess”文件,
“.htaccess”文件的内容:
#开户重写规则
RewriteEngineon
#让test.web126.com访问www下的test目录
RewriteCond%{HTTP_HOST}^test.web126.com$
RewriteCond%{REQUEST_URI}!^/www/test/
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteRule^(.*)$/www/test/$1
RewriteCond%{HTTP_HOST}^test.web126.com$
RewriteRule^(/)?$www/test/[L]
2)在nginx下绑定二级域名,要在“XXX.conf”设置文件中写规则
server
{
listen80;
server_nametest.web126.com;
indexindex.htmlindex.htmindex.php;
root/home/www/test;
includelocation.conf;
error_page404/404.html;
}
3、获取用户IP
使用apache服务器时,程序可以使用$_SEVER['ROMOTE_ADDR']获取用户IP
使用nginx服务器时,要使用$_SERVER['HTTP_X_REAL_IP']和$_SERVER['HTTP_X_FORWARDED_FOR']中获取用户的ip地址。原因可以参考我的另一篇博文使用nginx服务器时,php获取用户ip的方法