首页
关于
标签合集
友情链接
Search
1
一些简单方面的Linux生产随机密码shell
351 阅读
2
美超微主板IPMI使用教程
326 阅读
3
Ubuntu系统开启root登陆权限
252 阅读
4
linux下502自动重启脚本
231 阅读
5
利用廉价VPS做反代,保护你的真实服务器
186 阅读
OS
促销资讯
管理系统
网站运维
网文资讯
登录
Search
标签搜索
网站架构
linux
网站运营
centos
mysql
google
nginx
ssh
apache
服务器
kloxo
vps
架构分析
PHP
特价VPS
xen
shell
数据库
lamp
vpn
装逼爱好者
累计撰写
163
篇文章
累计收到
20
条评论
首页
栏目
OS
促销资讯
管理系统
网站运维
网文资讯
页面
关于
标签合集
友情链接
搜索到
5
篇与
的结果
2013-10-13
隐藏apache的版本信息
apache的http header和错误页面或多或少的会透露一些软件和系统的版本信息,对于生产服务来说这些东西是毫无用处的并且还有可能会被人利用分析.#curl -I 127.0.0.1 HTTP/1.1 200 OK Date: Sun, 13 Oct 2013 13:03:18 GMT Server: Apache/2.2.22 (Unix) mod_ssl/2.2.22 OpenSSL/1.0.0-fips DAV/2 Last-Modified: Wed, 14 Nov 2012 07:16:01 GMT X-Powered-By: PHP/5.3.24 ETag: "32006-10-4ce6f4e86ee40" Accept-Ranges: bytes Content-Length: 16 Content-Type: text/html通过修改apache的配置可以不显示它们cat >>/etc/httpd/conf/httpd.conf<<EOF ServerTokens ProductOnly ServerSignature Off EOFServerTokens缺省值OS名称,ServerSignature缺省值是apache的版本号。 解决了apache的问题顺道干掉php版本的输出显示sed -i 's#expose_php = On#expose_php = Off#' /etc/php.iniexpose_php默认值是On将其关闭http header就不会输出php版本了。 调整完参数重启httpd就生效了。调整参数生效后的http header信息curl -I 127.0.0.1 HTTP/1.1 200 OK Date: Sun, 13 Oct 2013 13:28:25 GMT Server: Apache Last-Modified: Wed, 14 Nov 2012 07:16:01 GMT ETag: "32006-10-4ce6f4e86ee40" Accept-Ranges: bytes Content-Length: 16 Content-Type: text/htmlPS:以上apache和php的配置文件均为常规配置路径,如果您是自定义安装请注意更换路径。
2013年10月13日
32 阅读
0 评论
0 点赞
2011-07-30
门户网站架构Nginx+Apache+MySQL+PHP+Memcached+Squid
服务器的大用户量的承载方案一、前言二、编译安装三、 安装MySQL、memcache四、 安装Apache、PHP、eAccelerator、php-memcache五、 安装Squid六、后记一、前言,准备工作当前,LAMP开发模式是WEB开发的首选,如何搭建一个高效、可靠、稳定的WEB服务器一直是个热门主题,本文就是这个主题的一次尝试。我们采用的架构图如下:引用——– ———- ————- ——— ————| 客户端 | ===> |负载均衡器| ===> |反向代理/缓存| ===> |WEB服务器| ===> |数据库服务器|——– ———- ————- ——— ————Nginx Squid Apache,PHP MySQLeAccelerator/memcache准备工作:引用服务器: Intel(R) Xeon(TM) CPU 3.00GHz * 2, 2GB mem, SCISC 硬盘操作系统:CentOs4.4,内核版本2.6.9-22.ELsmp,gcc版本3.4.4软件:Apache 2.2.3(能使用MPM模式)PHP 5.2.0(选用该版本是因为5.2.0的引擎相对更高效)eAccelerator 0.9.5(加速PHP引擎,同时也可以加密PHP源程序)memcache 1.2.0(用于高速缓存常用数据)libevent 1.2a(memcache工作机制所需)MySQL 5.0.27(选用二进制版本,省去编译工作)Nginx 0.5.4(用做负载均衡器)squid-2.6.STABLE6(做反向代理的同时提供专业缓存功能)二、编译安装 安装Nginx1.) 安装Nginx发音为[engine x],是由俄罗斯人Igor Sysoev建立的项目,基于BSD许可。据说他当初是F5的成员之一,英文主页:http://nginx.net。俄罗斯的一些大网站已经使用它超过两年多了,一直表现不凡。Nginx的编译参数如下:[root@localhost]#./configure –prefix=/usr/local/server/nginx –with-openssl=/usr/include \–with-pcre=/usr/include/pcre/ –with-http_stub_status_module –without-http_memcached_module \–without-http_fastcgi_module –without-http_rewrite_module –without-http_map_module \–without-http_geo_module –without-http_autoindex_module在这里,需要说明一下,由于Nginx的配置文件中我想用到正则,所以需要 pcre 模块的支持。我已经安装了 pcre 及 pcre-devel 的rpm包,但是 Ngxin 并不能正确找到 .h/.so/.a/.la 文件,因此我稍微变通了一下:[root@localhost]#mkdir /usr/include/pcre/.libs/[root@localhost]#cp /usr/lib/libpcre.a /usr/include/pcre/.libs/libpcre.a[root@localhost]#cp /usr/lib/libpcre.a /usr/include/pcre/.libs/libpcre.la然后,修改 objs/Makefile 大概在908行的位置上,注释掉以下内容:./configure –disable-shared接下来,就可以正常执行 make 及 make install 了。2.) 修改配置文件 /usr/local/server/nginx/conf/nginx.conf以下是我的 nginx.conf 内容,仅供参考:#运行用户user nobody nobody;#启动进程worker_processes 2;#全局错误日志及PID文件error_log logs/error.log notice;pid logs/nginx.pid;#工作模式及连接数上限events {use epoll;worker_connections 1024;}#设定http服务器,利用它的反向代理功能提供负载均衡支持http {#设定mime类型include conf/mime.types;default_type application/octet-stream;#设定日志格式log_format main ‘$remote_addr – $remote_user [$time_local] ‘‘”$request” $status $bytes_sent ‘‘”$http_referer” “$http_user_agent” ‘‘”$gzip_ratio”‘;log_format download ‘$remote_addr – $remote_user [$time_local] ‘‘”$request” $status $bytes_sent ‘‘”$http_referer” “$http_user_agent” ‘‘”$http_range” “$sent_http_content_range”‘;#设定请求缓冲client_header_buffer_size 1k;large_client_header_buffers 4 4k;#开启gzip模块gzip on;gzip_min_length 1100;gzip_buffers 4 8k;gzip_types text/plain;output_buffers 1 32k;postpone_output 1460;#设定access logaccess_log logs/access.log main;client_header_timeout 3m;client_body_timeout 3m;send_timeout 3m;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;#设定负载均衡的服务器列表upstream mysvr {#weigth参数表示权值,权值越高被分配到的几率越大#本机上的Squid开启3128端口server 192.168.8.1:3128 weight=5;server 192.168.8.2:80 weight=1;server 192.168.8.3:80 weight=6;}#设定虚拟主机server {listen 80;server_name 192.168.8.1 www.enew.com.cn;charset gb2312;#设定本虚拟主机的访问日志access_log logs/www.enew.com.cn.access.log main;#如果访问 /img/*, /js/*, /css/* 资源,则直接取本地文件,不通过squid#如果这些文件较多,不推荐这种方式,因为通过squid的缓存效果更好location ~ ^/(img|js|css)/ {root /data3/Html;expires 24h;}#对 “/” 启用负载均衡location / {proxy_pass http://mysvr;proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;client_max_body_size 10m;client_body_buffer_size 128k;proxy_connect_timeout 90;proxy_send_timeout 90;proxy_read_timeout 90;proxy_buffer_size 4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;}#设定查看Nginx状态的地址location /NginxStatus {stub_status on;access_log on;auth_basic “NginxStatus”;auth_basic_user_file conf/htpasswd;}}}备注:conf/htpasswd 文件的内容用 apache 提供的 htpasswd 工具来产生即可,内容大致如下:3.) 查看 Nginx 运行状态输入地址 http://192.168.8.1/NginxStatus/,输入验证帐号密码,即可看到类似如下内容:Active connections: 328server accepts handled requests9309 8982 28890Reading: 1 Writing: 3 Waiting: 324第一行表示目前活跃的连接数第三行的第三个数字表示Nginx运行到当前时间接受到的总请求数,如果快达到了上限,就需要加大上限值了。第四行是Nginx的队列状态安装MySQL、memcache1.) 安装MySQL,步骤如下:[root@localhost]#tar zxf mysql-standard-5.0.27-linux-i686.tar.gz -C /usr/local/server[root@localhost]#mv /usr/local/server/mysql-standard-5.0.27-linux-i686 /usr/local/server/mysql[root@localhost]#cd /usr/local/server/mysql[root@localhost]#./scripts/mysql_install_db –basedir=/usr/local/server/mysql \–datadir=/usr/local/server/mysql/data –user=nobody[root@localhost]#cp /usr/local/server/mysql/support-files/my-large.cnf \/usr/local/server/mysql/data/my.cnf2.) 修改 MySQL 配置,增加部分优化参数,如下:[root@localhost]#vi /usr/local/server/mysql/data/my.cnf主要内容如下:[mysqld]basedir = /usr/local/server/mysqldatadir = /usr/local/server/mysql/datauser = nobodyport = 3306socket = /tmp/mysql.sockwait_timeout = 30long_query_time=1#log-queries-not-using-indexes = TRUElog-slow-queries=/usr/local/server/mysql/slow.loglog-error = /usr/local/server/mysql/error.logexternal-locking = FALSEkey_buffer_size = 512Mback_log = 400table_cache = 512sort_buffer_size = 2Mjoin_buffer_size = 4Mread_buffer_size = 2Mread_rnd_buffer_size = 4Mmyisam_sort_buffer_size = 64Mthread_cache_size = 32query_cache_limit = 2Mquery_cache_size = 64Mthread_concurrency = 4thread_stack = 128Ktmp_table_size = 64Mbinlog_cache_size = 2Mmax_binlog_size = 128Mmax_binlog_cache_size = 512Mmax_relay_log_size = 128Mbulk_insert_buffer_size = 8Mmyisam_repair_threads = 1skip-bdb#如果不需要使用innodb就关闭该选项#skip-innodbinnodb_data_home_dir = /usr/local/server/mysql/data/innodb_data_file_path = ibdata1:256M;ibdata2:256M:autoextendinnodb_log_group_home_dir = /usr/local/server/mysql/data/innodb_log_arch_dir = /usr/local/server/mysql/data/innodb_buffer_pool_size = 512Minnodb_additional_mem_pool_size = 8Minnodb_log_file_size = 128Minnodb_log_buffer_size = 8Minnodb_lock_wait_timeout = 50innodb_flush_log_at_trx_commit = 2innodb_file_io_threads = 4innodb_thread_concurrency = 16innodb_log_files_in_group = 3以上配置参数请根据具体的需要稍作修改。运行以下命令即可启动 MySQL 服务器:/usr/local/server/mysql/bin/mysqld_safe \–defaults-file=/usr/local/server/mysql/data/my.cnf &由于 MySQL 不是安装在标准目录下,因此必须要修改 mysqld_safe 中的 my_print_defaults 文件所在位置,才能通过mysqld_safe 来启动 MySQL 服务器。3.) memcache + libevent 安装编译安装:[root@localhost]#cd libevent-1.2a[root@localhost]#./configure –prefix=/usr/ && make && make install[root@localhost]#cd ../memcached-1.2.0[root@localhost]#./configure –prefix=/usr/local/server/memcached –with-libevent=/usr/[root@localhost]#make && make install备注:如果 libevent 不是安装在 /usr 目录下,那么需要把 libevent-1.2a.so.1 拷贝/链接到 /usr/lib 中,否则memcached 无法正常加载。运行以下命令来启动 memcached:[root@localhost]#/usr/local/server/memcached/bin/memcached \-l 192.168.8.1 -d -p 10000 -u nobody -m 128表示用 daemon 的方式启动 memcached,监听在 192.168.8.1 的 10000 端口上,运行用户为 nobody,为其分配128MB 的内存。安装Apache、PHP、eAccelerator、php-memcache四、) 安装Apache、PHP、eAccelerator、php-memcache由于Apache2下的php静态方式编译十分麻烦,因此在这里采用动态模块(DSO)方式。1.) 安装Apache 2.2.3[root@localhost]#./configure –prefix=/usr/local/server/apache –disable-userdir –disable-actions \–disable-negotiation –disable-autoindex –disable-filter –disable-include –disable-status \–disable-asis –disable-auth –disable-authn-default –disable-authn-file –disable-authz-groupfile \–disable-authz-host –disable-authz-default –disable-authz-user –disable-userdir \–enable-expires –enable-module=so备注:在这里,取消了一些不必要的模块,如果你需要用到这些模块,那么请去掉部分参数。2.) 安装PHP 5.2.0[root@localhost]#./configure –prefix=/usr/local/server/php –with-mysql \–with-apxs2=/usr/local/server/apache/bin/apxs –with-freetype-dir=/usr/ –with-png-dir=/usr/ \–with-gd=/usr/ –with-jpeg-dir=/usr/ –with-zlib –enable-magic-quotes –with-iconv \–without-sqlite –without-pdo-sqlite –with-pdo-mysql –disable-dom –disable-simplexml \–enable-roxen-zts[root@localhost]#make && make install备注:如果不需要gd或者pdo等模块,请自行去掉。3.) 安装eAccelerator-0.9.5[root@localhost]#cd eAccelerator-0.9.5[root@localhost]#export PHP_PREFIX=/usr/local/server/php[root@localhost]#$PHP_PREFIX/bin/phpize[root@localhost]#./configure –enable-eaccelerator=shared –with-php-config=$PHP_PREFIX/bin/php-config[root@localhost]#make && make install4.) 安装memcache模块[root@localhost]#cd memcache-2.1.0[root@localhost]#export PHP_PREFIX=/usr/local/server/php[root@localhost]#$PHP_PREFIX/bin/phpize[root@localhost]#./configure –enable-eaccelerator=shared –with-php-config=$PHP_PREFIX/bin/php-config[root@localhost]#make && make install5.) 修改 php.ini 配置然后修改 php.ini,修改/加入类似以下内容:extension_dir = “/usr/local/server/php/lib/”extension=”eaccelerator.so”eaccelerator.shm_size=”32″ ;设定eaccelerator的共享内存为32MBeaccelerator.cache_dir=”/usr/local/server/eaccelerator”eaccelerator.enable=”1″eaccelerator.optimizer=”1″eaccelerator.check_mtime=”1″eaccelerator.debug=”0″eaccelerator.filter=”*.php”eaccelerator.shm_max=”0″eaccelerator.shm_ttl=”0″eaccelerator.shm_prune_period=”3600″eaccelerator.shm_only=”0″eaccelerator.compress=”1″eaccelerator.compress_level=”9″eaccelerator.log_file = “/usr/local/server/apache/logs/eaccelerator_log”eaccelerator.allowed_admin_path = “/usr/local/server/apache/htdocs/ea_admin”extension=”memcache.so”在这里,最好是在apache的配置中增加默认文件类型的cache机制,即利用apache的expires模块,新增类似如下几行:ExpiresActive OnExpiresByType text/html “access plus 10 minutes”ExpiresByType text/css “access plus 1 day”ExpiresByType image/jpg “access 1 month”ExpiresByType image/gif “access 1 month”ExpiresByType image/jpg “access 1 month”ExpiresByType application/x-shockwave-flash “access plus 3 day”这么设置是由于我的这些静态文件通常很少更新,因此我选择的是”access”规则,如果更新相对比较频繁,可以改用”modification”规则;或者也可以用”access”规则,但是在文件更新的时候,执行一下”touch”命令,把文件的时间刷新一下即可。 安装Squid五、) 安装Squid[root@localhost]#./configure –prefix=/usr/local/server/squid –enable-async-io=100 –disable-delay-pools –disable-mem-gen-trace –disable-useragent-log –enable-kill-parent-hack –disable-arp-acl –enable-epoll –disable-ident-lookups –enable-snmp –enable-large-cache-files –with-large-files[root@localhost]#make && make install或使用如下安装方法:[root@localhost]#yum install squid如果是2.6的内核,才能支持epoll的IO模式,旧版本的内核则只能选择poll或其他模式了;另外,记得带上支持大文件的选项,否则在accesslog等文件达到2G的时候就会报错。设定 squid 的配置大概如下内容:#设定缓存目录为 /var/cache1 和 /var/lib/squid,每次处理缓存大小为128MB,当缓存空间使用达到95%时#新的内容将取代旧的而不直接添加到目录中,直到空间又下降到90%才停止这一活动#/var/cache1 最大1024MB,/var/lib/squid 最大 5000MB,都是 16*256 级子目录cache_dir aufs /var/cache1 1024 16 256cache_dir aufs /var/lib/squid 5000 16 256cache_mem 128 MBcache_swap_low 90cache_swap_high 95#设置存储策略等maximum_object_size 4096 KBminimum_object_size 0 KBmaximum_object_size_in_memory 80 KBipcache_size 1024ipcache_low 90ipcache_high 95cache_replacement_policy lrumemory_replacement_policy lru#设置超时策略forward_timeout 20 secondsconnect_timeout 15 secondsread_timeout 3 minutesrequest_timeout 1 minutespersistent_request_timeout 15 secondsclient_lifetime 15 minutesshutdown_lifetime 5 secondsnegative_ttl 10 seconds#限制一个ip最大只能有16个连接acl OverConnLimit maxconn 16http_access deny OverConnLimit#限制baidu spider访问#acl AntiBaidu req_header User-Agent Baiduspider#http_access deny AntiBaidu#常规设置visible_hostname cache.enew.comcache_mgr webmaster@enew.comclient_persistent_connections offserver_persistent_connections oncache_effective_user nobodycache_effective_group nobodytcp_recv_bufsize 65535 byteshalf_closed_clients off#设定不缓存的规则hierarchy_stoplist cgi-binacl QUERY urlpath_regex cgi-bincache deny QUERY#不要相信ETag 因为有gzipacl apache rep_header Server ^Apachebroken_vary_encoding allow apache#设置access log,并且令其格式和apache的格式一样,方便awstats分析emulate_httpd_log onlogformat apache %>a %ui %un [%tl] “%rm %ru HTTP/%rv” %Hs %初始化和启动squid[root@localhost]#/usr/local/server/squid/sbin/squid -z[root@localhost]#/usr/local/server/squid/sbin/squid第一条命令是先初始化squid缓存哈希子目录,只需执行一次即可。六、后记六、后记一、)想要启用squid所需的改变想要更好的利用squid的cache功能,不是把它启用了就可以的,我们需要做以下几个调整:1、启用apache的 mod_expires 模块,修改 httpd.conf,加入以下内容:#expiresdefault “modification plus 2 weeks”expiresactiveonexpiresbytype text/html “access plus 10 minutes”expiresbytypeimage/gif “modification plus 1 month”expiresbytype image/jpeg “modificationplus 1 month”expiresbytype image/png “modification plus 1month”expiresbytype text/css “access plus 1 day”expiresbytypeapplication/x-shockwave-flash “access plus 3 day”以上配置的作用是规定各种类型文件的cache规则,对那些图片/flash等静态文件总是cache起来,可根据各自的需要做适当调整。2、修改 php.ini 配置,如下:session.cache_limiter = nocache以上配置的作用是默认取消php中的cache功能,避免不正常的cache产生。3、修改应用程序例如,有一个php程序页面static.php,它存放着某些查询数据库后的结果,并且数据更新并不频繁,于是,我们就可以考虑对其cache。只需在static.php中加入类似如下代码:header(‘Cache-Control: max-age=86400,must-revalidate’);header(‘Pragma:’);header(‘Last-Modified: ‘ .gmdate(‘D, d M Y H:i:s’) . ‘ GMT’ );header(“Expires: ” .gmdate (‘D, d M YH:i:s’, time() + ’86400′ ). ‘ GMT’);以上代码的意思是,输出一个http头部信息,让squid知道本页面默认缓存时长为一天。二、)squidclient简要介绍*取得squid运行状态信息: squidclient -p 80 mgr:info*取得squid内存使用情况: squidclient -p 80 mgr:mem*取得squid已经缓存的列表: squidclient -p 80 mgr:objects. use it carefully,it may crash*取得squid的磁盘使用情况: squidclient -p 80 mgr:diskd*强制更新某个url:squidclient -p 80 -m PURGE http://www.enew.com.cn/static.php*更多的请查看:squidclient-h 或者 squidclient -p 80 mgr:原文地址:http://blog.csdn.net/rushcc2006/archive/2009/11/11/4796892.aspx
2011年07月30日
71 阅读
1 评论
0 点赞
2011-07-29
IIS6.0下PHP FastCGI环境搭建
FastCGI是可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。传统的CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性等。今天介绍一下IIS6.0下PHP FastCGI环境搭建,一些资料称IIS下FastCGI的运行效率是ISPAI的两倍之多。不管到底怎么样,如果您还停留在ISAPI的运行环境下的话,一定要先测试再使用。免得造成不必要的麻烦。第一步:下载安装FastCGI Extension for IIS下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5&displaylang=en安装后确认IIS中,Web 服务扩展 – FastCGI Handler处于打开状态;第二步:注册PHP到FastCGI打开C:\WINDOWS\system32\inetsrv\fcgiext.ini文件:在文件最下方 [Types] 下添加以下配置:[Types]php=PHP[PHP]ExePath=C:\PHP\php-cgi.exe注:ExePath这个路径为存放PHP文件夹的路径;第三步:配置php.ini主要是以下两项,其它的按个人需要进行配置:extension_dir = “C:\PHP\ext”fastcgi.impersonate = 1第四步:配置IIS支持右键网站 -> 属性 -> 主目录 -> 配置 -> 添加,如下图配置:可执行文件路径:C:\WINDOWS\system32\inetsrv\fcgiext.dll最后:重启IIS;cmd–iisreset;phpinfo();Server API CGI/FastCGIOK!
2011年07月29日
16 阅读
0 评论
0 点赞
2011-07-25
LAMP网站架构方案分析
LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架, 该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是 国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,微软 的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。对于大流量、大并发量的网站系统架构来说,除了硬件上使用高性能的服务器、负载均衡、CDN等之外,在软件架构上需要重点关注下面几个环节:使用高性能 的操作系统(OS)、高性能的网页服务器(Web Server)、高性能的数据库(Databse)、高效率的编程语言等。下面我将从这几点对其一一讨论。操作系统Linux操作系统有很多个不同的发行版,如Red Hat Enterprise Linux、SUSE Linux Enterprice、Debian、Ubuntu、CentOS等,每一个发行版都有自己的特色,比如RHEL的稳定,Ubuntu的易用,基于稳定性 和性能的考虑,操作系统选择CentOS(Community ENTerprise Operating System)是一个理想的方案。CentOS(Community ENTerprise Operating System)是Linux发行版之一,是RHEL/Red Hat Enterprise Linux的精简免费版,和RHEL为同样的源代码,不过,RHEL和SUSE LE等企业版,提供的升级服务均是收费升级,无法免费在线升级,因此要求免费的高度稳定性的服务器可以用CentOS替代Red Hat Enterprise Linux使用。LAMP网站架构图Web服务器、缓存和PHP加速Apache是LAMP架构最核心的Web Server,开源、稳定、模块丰富是Apache的优势。但Apache的缺点是有些臃肿,内存和CPU开销大,性能上有损耗,不如一些轻量级的Web 服务器(例如nginx)高效,轻量级的Web服务器对于静态文件的响应能力来说远高于Apache服务器。Apache做为Web Server是负载PHP的最佳选择,如果流量很大的话,可以采用nginx来负载非PHP的Web请求。nginx是一个高性能的HTTP和反向代理服 务器,Nginx以它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx不支持Windows,只能在包括Linux等环境下安 装,也不支持PHP和CGI等,但支持负载均衡和容错,可和Apache配合使用,是轻量级的HTTP服务器的首选。Web服务器的缓 存也有多种方案,Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。 Squid Cache是一个Web缓存服务器,支持高效的缓存,可以作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,把Squid放在 Apache的前端来缓存Web服务器生成的动态内容,而Web应用程序只需要适当地设置页面实效时间即可。如访问量巨大则可考虑使用memcache作 为分布式缓存。PHP的加速使用eAccelerator加速器,eAccelerator是一个自由开放源码PHP加速器,优化和动 态内容缓存,提高了性能PHP脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。它还有对脚本起优化作用,以加快其执行效率。 使PHP程序代码执效率能提高1-10倍。具体的解决方案有以下几种:1、squid + Apache + PHP + eAccelerator使用Apache负载PHP,使用squid进行缓存,html或图片的请求可以直接由squid返回给用户。很多大型网站都采用这种架构。2、nginx/Apache + PHP(fastcgi) + eAccelerator使用nginx或Apache负载PHP,PHP使用fastcgi方式运行,效率较高。3、nginx + Apache + PHP + eAccelerator此方案综合了nginx和Apache的优点,使用Apache负载PHP,nginx负责解析其他Web请求,使用nginx的rewrite模块,Apache端口不对外开放。数据库开源的数据库中,MySQL在性能、稳定性和功能上是首选,可以达到百万级别的数据存储,网站初期可以将MySQL和Web服务器放在一起,但是当访问 量达到一定规模后,应该将MySQL数据库从Web Server上独立出来,在单独的服务器上运行,同时保持Web Server和MySQL服务器的稳定连接。当数据库访问量达到更大的级别,可以考虑使用MySQL Cluster等数据库集群或者库表散列等解决方案。总的来说,LAMP架构的网站性能会远远优于Windows IIS + ASP + Access(例如月光博客)这样的网站,可以负载的访问量也非常大,国内的大量个人网站如果想要支撑大访问量,采用LAMP架构是一个不错的方案。综上所述,基于LAMP架构设计具有成本低廉、部署灵活、快速开发、安全稳定等特点,是Web网络应用和环境的优秀组合。原创文章如转载,请注明:转载自月光博客 [ http://www.williamlong.info/ ]本文链接地址:http://www.williamlong.info/archives/1908.html
2011年07月25日
13 阅读
0 评论
0 点赞
2011-07-06
Facebook 的 PHP 性能与扩展性
炙手可热的 Facebook 是用 PHP 开发的。随着一些技术交流,逐渐能看到 Facebook 技术人员分享的经验。近期这个 geekSessions 站点上看到 Facebook 的 Lucas Nealan 分享的文档比较有参考价值。Cache 为 王任何一个成功的站点都有一套最合适自己的 Cache 策略。Note:这个层次图画的稍微有点问题,不是严格从上到下的。The Alternative PHP Cache , APCFacebook 平均每个用户每天要访问超过 50 个页面,PHP的页面载入时间的优化就比较重要了。在 PHP Cache 层,Facebook 采用了 APC。关于facebook APC 介绍的PDF.Lucas Nealan 的 PPT 举了一个例子,一个页面显示的时间从 4000 多毫秒降到了 100 多 毫秒。在 apc.stat 关闭的模式下,性能还要更好一些。不过需要重启动或用apc_cache_clear() 来通知更新。Memcached 层APC Cache 的是非用户相关的信息,而用户相关的数据 Cache 当然是在 Memcached 中。Facebook 部署了超过 400 台 Memcached 服务器,超过 5TB 的数据在 Memcached 中。这是当前世界上最大的 Memcached 集群了。也给 Memcached 贡献了不少代码,包括 UDP 的支持和性能上的提升(性能提升超过 20%)。程序 ProfilingFacebook 开发人员大量采用 Callgrind 、APD、 xdebug 、KCachegrind 等工具进行基准性能测试。任何一个 Web 项目,这也是不可或缺,也是比较容易忽略的一环。所有开发人员都应该具备熟练使用这些工具的能力才好。补充一下:语言的选择为什么 Facebook 选择 PHP 而不是其他语言? 用Flickr 的 Cal Henderson 这句话就能说明了: “Languages’s don’t Scale, Architecture Scale”。从 80-20 的原则看,APC 和 Memcached 是最主要的。在这两个环节上下功夫,受益/开销比要大于另外几个环节。(上面的图是从 Lucas Nealan 的文档截的,版权所有是他的)作者: Fenng网址: http://www.dbanotes.net/arch/facebook_php.html
2011年07月06日
14 阅读
0 评论
0 点赞