Category ArchiveWeb Server/Apache/Nginx
Web Server/Apache/Nginx & 技术 24 Nov 2008 04:39 pm
UCenter Home 1.5 Nginx rewrite
UCenter Home 1.5 Nginx rewrite
http://www.discuz.net/forum-149-1.html
rewrite ^/(space|network)-(.+)\.html$ /$1.php?rewrite=$2 last;
rewrite ^/(space|network)\.html$ /$1.php last;
rewrite ^/([0-9]+)$ /space.php?uid=$1 last;
Web Server/Apache/Nginx & 技术 05 Nov 2008 05:11 pm
用squid缓存jsp加速lucene搜索
前面尝试了使用nginx负载均衡lucene,效果还不错,但更新维护比较麻烦。
搜索来源中大部分是由连接方式过来,所以大部分的页面内容相同,可以使用缓存的方式重复使用。
方案一:用nginx的proxy stone
方案二:用nginx的ncache
方案三:用Varnish
方案四:用squid
方案一和方案二:
方案一和二是副本概念不会自动更新缓存,需写脚本来控制
都要使用nginx 的rewrite将html转成jsp
修改jsp中分页等连接地址为html
方案二需修改jsp在header中增加max-age
尝试结果:
jsp的参数超过了10个,但nginx只支持10个,所以不能缓存所有页面,但可以尝试缓存最常用的关键词第一页。
linux上好像没法将文件缓存起来并且没log,以下是windows上error.log
——————————————————
2008/11/04 16:39:16 [crit] 2828#0: *3 rename() “/proxy_temp/0000000004″ to “html/locals.c1gstudio.com/search/” failed (21: Is a directory) while reading upstream, client: 127.0.0.1, server: locals.c1gstudio.com, request: “GET /search/ HTTP/1.1″, upstream: “http://192.168.1.50:8080/search/”, host: “locals.c1gstudio.com”
2008/11/04 16:39:19 [crit] 2828#0: *1 rename() “/proxy_temp/0000000013″ to “html/locals.c1gstudio.com/search/result.jsp?keyword=+%E7%BC%96%E8%BE%91&city=0&type=0&do=1″ failed (2: No such file or directory) while reading upstream, client: 127.0.0.1, server: locals.c1gstudio.com, request: “GET /search/result.jsp?keyword=+%E7%BC%96%E8%BE%91&city=0&jobtype=0&do=1 HTTP/1.1″, upstream: “http://192.168.1.50:8080/search/result.jsp?keyword=+%E7%BC%96%E8%BE%91&city=0&type=0&do=1″, host: “locals.c1gstudio.com”, referrer: http://locals.c1gstudio.com/search/
——————————————————-
貌似不必rewrite也可缓存。=_=!!!
方案三:
缓存放在内存里,软件重启后需重新生成,瞬时并发比较大
网卡流量也比较多,性能也比squid差。
参考it流言终结者的比较
IT流言终结者1续篇:varnish vs squid
IT流言终结者1:Varnish vs Squid
http://www.hiadmin.com/category/service/squid-app/
方案四:
以前有架设过,改改配置就可以上了。
选择squid2.6stable22,据测试性能稳定。
架设参考
squid 安装
http://blog.c1gstudio.com/archives/130
squid.conf中
开1.5G内存,4G硬盘
cache_store_log none
access_log none
refresh_pattern -i \.html$ 60 25% 240
refresh_pattern -i \.htm$ 60 25% 240
refresh_pattern -i \.jsp$ 5 25% 20
refresh_pattern -i \.gif$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.jpg$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.jpeg$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.png$ 1440 50% 2880 ignore-reload
总结:
最终架构是
nginx(80)->squid(81)->tomcat(8080)
nginx 跑在80端口代理81
squid 跑81端口代理远程的tomcat (squid跑在80会报access denied,忘改这个了acl Safe_ports port 81)
tomcat 在另一台机器上
jsp中header增加max-age=3600和相应expires,让页面在ie中缓存一小时,squid中缓存5~20分钟。
目前的负载
跑nginx和squid的 load average: 0.18, 0.14, 0.08 以前是load为1左右
跑tomcat的 load average: 1.57, 1.41, 1.28 以前load为3左右
现在改动程序只需改动一台机器,结果很满意哈~
Web Server/Apache/Nginx & 技术 30 Oct 2008 05:58 pm
Nginx for Windows
kevin写的nginx for windows 支持(Windows Vista, Windows XP, Windows 2000)
他的主页:http://www.kevinworthington.com/nginx/win32/
目前有三个主流版本下载:
| Branch | Download Package | Release Date |
| Development | 0.7.19 | 13 October 2008 |
| Stable | 0.6.32 | 07 July 2008 |
| Legacy | 0.5.37 | 07 July 2008 |
tips:请不要用在生产环境,仅供开发测试。
一。下载
我这里下载0.6.32版http://www.kevinworthington.com/nginx/win32/nginx-0.6.32-win32-setup.exe
下载后安装到c:\nginx。
到PHP 官方下载php
我这里下载PHP 5.2.6 zip package
下载后以解压到c:\php。
二。配置nginx
下面这张截图内容为廖老师 nginx 配置单:

上图中用红线椭圆圈起来的,是nginx php 配置的关键部分,没配置正确会出现404错误,让我郁闷很久。
如果你的程式放在有空格的文件夹下如program files下,可以用以下方法。
include fcgi.conf;
set $rootpath “D:\Program Files\wamp\www”;
fastcgi_param SCRIPT_FILENAME $rootpath$fastcgi_script_name;
三。启动nginx
执行c:\nginx\Start-nginx.bat启动
启动php的cgi server
关于php cgi server 可以使用以下命令:
php-cgi.exe -b 127.0.0.1:9000 -q
这样做,缺陷是命令行窗口一直打开,若关闭那cgi server 也关闭啦。到网上下载RunHiddenConsole.exe 可以使命令行窗口隐藏啦。
RunHiddenConsole.exe php-cgi.exe -b 127.0.0.1:9000 -q
你也可以写一个批处理来做这件事:
start_phpcgi.bat
@ECHO OFF
ECHO Starting PHP FastCGI…
RunHiddenConsole.exe c:/php/php-cgi.exe -b 127.0.0.1:9000 -q
EXIT
关闭的批处理
stop_phpcgi.bat
@ECHO OFF
ECHO Stopping PHP FastCGI…
bin\process.exe -k php-cgi.exe >nul
ECHO.
EXIT
最后写一个简单PHPINFO来验证PHP 是否工作正常。
参考:http://blog.chinaitlab.com/html/30/104830-166195.html
Web Server/Apache/Nginx & 技术 27 Oct 2008 11:53 am
使用nginx负载均衡lucene
server a是之前退役的,现存放着一些小些php站点和lucene 搜索,
server a
cpu: Xeon(TM) CPU 2.80GHz (双核*2)
mem:1G*2
disk:scsi 74G *2 (raid 0)
os:as4
app:nginx+php+fcgi+xcache+mysql+tomcat+postfix
server b为刚退役,没有站点。
server b
cpu: Xeon(TM) CPU 2.80GHz (双核*2)
mem:1G*2
disk: sata 80G *1 (7200)
os:as4
app:nginx+tomcat
—————————————
server a 的搜索每天有几十万PV,平均load 5,更新索引达30,高峰时tomcat会挂掉。
产品结构:nginx代理tomcat,jsp提供搜索结果,jsp+mysql记录搜索关键字,crontab定时生成索引。
方案一:server a 提供生成索引和mysql服务,server b 提供纯web搜索服务,用rsync同步索引文件。
方案二:server a 提供生成索引和mysql服务,server b 和server a使用负载均衡一起提供需web搜索服务,用rsync同步索引文件。
一。先设置两台服务器时间是同步的。
二。设置rsync时不需要登录。
用server b 去拉server a的索引
使用crontab+ssh每天自动完全备份mysql数据
三。写更新的bash和设置crontab
rsync在第一次是全部同步,以后就是只更新有异动的文件。
目前索引为1G左右,
cache使用三级目录分布小文件,占4G
在server b上
vi rsync_index.sh
#!/bin/bash
#获取lucene索引
/usr/bin/rsync -avlR –delete -e /usr/bin/ssh rsync@221.0.0.1:/lucene/index / >> /opt/shell/rsync_index.log
vi rsync_cache.sh
#!/bin/bash
#获取职位的cache和关键词
/usr/bin/rsync -avlR –delete -e /usr/bin/ssh rsync@221.0.0.1:/lucene/keyword / >> /opt/shell/rsync_keyword.log
/usr/bin/rsync -avlR –delete -e /usr/bin/ssh rsync@221.0.0.1:/lucene/cache / >> /opt/shell/rsync_cache.log
crontab每小时更新一次。
50 * * * * /bin/sh /opt/shell/rsync_cache.sh > /dev/null 2>&1
52 * * * * /bin/sh /opt/shell/rsync_index.sh > /dev/null 2>&1
四。设置nginx
设置nginx的配置文件,使用方案一
location / {
proxy_pass http://127.0.0.1:8080;
location ~* ^.+\.(jpg|jpeg|gif|png|css|js)$ {
root /opt/tomcat/webapps/search;
access_log off;
expires 3d;
break;
}
}
重启nginx,将域名指向server b.
server b平均load 为5,当rsync更新时load 会达到20,还是不可靠,使用方案二。
upstream mysvr {
#ip_hash; (据说可以以C类IP将用户固定在某台server,开启后并发大降不能肯定是否有bug)
server 127.0.0.1:8080;
server 221.0.0.1:8080;
}
server {
…..
location / {
#proxy_pass http://127.0.0.1:8080;
proxy_pass http://mysvr;
location ~* ^.+\.(jpg|jpeg|gif|png|css|js)$ {
root /opt/tomcat/webapps/search;
access_log off;
expires 3d;
break;
}
}
…….
}
重启nginx,将域名指向server b.
server b 和server 平均load 为1~2,更新会到5,还可以接受。
Web Server/Apache/Nginx & 技术 22 Oct 2008 06:28 pm
设置tomcat用jsvc启动
根据tomcat官方的document说明,linux下设置开机自启动可以使用jsvc(tomcat包里自带)
设置tomcat以独立的用户运行(防止以root运行,权限太大) shell>sudo useradd -d /opt/tomcat -s /usr/sbin/nologin tomcat 上边的这个命令是添加一个系统用户tomcat,并且设置为不可登录系统。
设置用户tomcat 对tomcat6的访问权限 shell>sudo chown -R tomcat:website /opt/tomcat
安装jsvc,前提需要系统安装了gcc(系统一般默认安装),autoconf,libc6-dev 解压jsvc.tar.g shell>cd /opt/tomcat/bin
shell>sudo tar zxvf jsvc.tar.gz
准备编译配置文件 shell>cd jsvc-src shell>sudo sh support/buildconf.sh 如果成功,命令终端会打出: support/buildconf.sh: configure script generated successfully
为configure添加执行权限 shell>sudo chmod 755 configure
编译 shell>sudo ./configure –with-java=/usr/java/jdk1.6.0_10(java的安装路径) shell>sudo make 如果没有出现错误,jsvc就安装成功了。
设置启动脚本
修改/opt/tomcat/bin/jsvc-src/native/Tomcat5.sh 文件
# Adapt the following lines to your configuration
JAVA_HOME=/usr/java/jdk1.6.0_10
CATALINA_HOME=/opt/tomcat
DAEMON_HOME=/opt/tomcat/bin
TOMCAT_USER=tomcat# for multi instances adapt those lines.
TMP_DIR=/var/tmp
PID_FILE=/var/run/jsvc.pid
CATALINA_BASE=/opt/tomcatCATALINA_OPTS=”"
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
case “$1″ in
start)
#
# Start Tomcat
#
$DAEMON_HOME/jsvc-src/jsvc \
-user $TOMCAT_USER \
-home $JAVA_HOME \
-Dcatalina.home=$CATALINA_HOME \
-Dcatalina.base=$CATALINA_BASE \
-Djava.io.tmpdir=$TMP_DIR \
-wait 10 \
-pidfile $PID_FILE \
-outfile $CATALINA_HOME/logs/catalina.out \
-errfile ‘&1′ \
$CATALINA_OPTS \
-cp $CLASSPATH \
org.apache.catalina.startup.Bootstrap
#
# To get a verbose JVM
#-verbose \
# To get a debug of jsvc.
#-debug \
exit $?
;;stop)
#
# Stop Tomcat
#
$DAEMON_HOME/jsvc-src/jsvc \
-stop \
-pidfile $PID_FILE \
org.apache.catalina.startup.Bootstrap
exit $?
;;*)
echo “Usage tomcat.sh start/stop”
exit 1;;
esac拷贝jsvc带的tomcat5.sh 脚本拷贝到 /etc/init.d/ 下,并改名为tomcat
shell>sudo cp /opt/tomcat/bin/jsvc-src/native/Tomcat5.sh /etc/init.d/tomcat
设置 /etc/init.d/tomcat的可执行权限 Shell>sudo chmod 755 /etc/init.d/tomcat在/etc/rc2.d/下设置一个/etc/init.d/tomcat 的软链接 shell>cd /etc/rc2.d/ shell>sudo ln -s /etc/init.d/tomcat S16tomcat /etc/init.d/tomcat start ps aux|grep java 可以看到2个进程,一个是root,一个是tomcat 参考 http://wiki.ubuntu.org.cn/Tomcat6
Web Server/Apache/Nginx & 技术 22 Oct 2008 09:23 am
优化tomcat 内存
编辑tomcatpath/bin/catalina.sh
在最前面加上下面两行
CATALINA_OPTS=’-Xms800m -Xmx1000m’
JAVA_OPTS=’-Xms800m -Xmx1000m’
表示初始化内存为800MB,可以使用的最大内存为1000MB
另外需要考虑的是Java提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾可以接受的速度与应用有关,应该通过分析实际的垃圾收集的时间和频率来调整。如果堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低。如果你把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。在基准测试的时候,为保证最好的性能,要把堆的大小设大,保证垃圾收集不在整个基准测试的过程中出现。
如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过 3-5 秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详细输出,研究 垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的 80% 作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。
参考:
http://vod.sjtu.edu.cn/help/Article_Show.asp?ArticleID=1387&ArticlePage=1
Web Server/Apache/Nginx & 技术 14 Oct 2008 01:27 pm
ncache试用
NCACHE 是基于 NGINX 的 WEB 服务器模型构件起来的缓存系统, 是SINA公司的开源产品.
起初的目的是为了提升缓存响应速度而开发的,因为SQUID实在比较慢, 而NGINX的优势就在于网络服务上,所以NCACHE计划也就诞生了.
NCACHE最早的时候是作为NGINX的一个HTTP模块进行开发的,因为当时希望做到更好的兼容性和可扩展性,作为独立模块,可以被更好的推广和使用,安装也会很方便.但后来发现随着代码量的增加,功能的扩充,NGINX的原有模块框架已经不能很好的满足我们了,因此,我们提取了NGINX的内核代码,并把CACHE部分欠入其中,形成了今天的NCACHE
NCACHE本身功能并不强大,且不具备像SQUID般完善的功能和开发框架,甚至不能支持RFC中关于CACHE部分的描述. NCACHE完全是一套定制化的产品,可以满足像我们一样需要快速部署,简单易用,大并发量,大存储量的朋友们的需求,它不需要复杂的配置,不需要冗余的复杂代码,并使用最先进的技术组合.
NCACHE 2.0版本,是作为一个完整的NGINX 模块进行发布和使用的,从原有的NCACHE内核中进行了剥离,更方便开发者的安装和配置
http://code.google.com/p/ncache/
下载后重新编译nginx
配制文件检查无错;
生成cache目录;
nginx在80,使用apache在8080做后台;
产生max-age;
time_count:1583 request_count:29 shoot_count:0 disk_writes:4 store_files:10 upstream_count:2 free_index:16777215
Web Server/Apache/Nginx & 技术 10 Oct 2008 02:02 pm
让nginx的expires和防盗链都有效
expires有效,防盗链失效
location ~* ^.+\.(jpg|jpeg|gif|png|css|js|swf)$ {
access_log off;
root /opt/htdocs/career;
expires 1h;
#break;
}
location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip)$ {
valid_referers none blocked *.c1gstudio.com;
if ($invalid_referer) {
rewrite ^/ http://leech.c1gstudio.com/leech.gif;
return 412;
}
}
只有js和css的expire有效,防盗链有效
location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip)$ {
valid_referers none blocked *.c1gstudio.com;
if ($invalid_referer) {
rewrite ^/ http://leech.c1gstudio.com/leech.gif;
return 412;
}
}
location ~* ^.+\.(jpg|jpeg|gif|png|css|js|swf)$ {
access_log off;
root /opt/htdocs/career;
expires 1h;
#break;
}
让expire和防盗链都有效
location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers none blocked *.c1gstudio.com;
if ($invalid_referer) {
rewrite ^/ http://leech.c1gstudio.com/leech.gif;
return 412;
}
access_log off;
root /opt/htdocs/career;
expires 1h;
break;
}
Web Server/Apache/Nginx & 技术 09 Oct 2008 03:12 pm
nginx应用日三百万pv记录
使用nginx架构的php应用负载5以下达到了日pv三百五十万,平均连接数六千多,并且保持了不错的响应速度。
具体安装:
nginx+php(FCGI)+xcache+mysql on as4
以下为awstats一天的详细统计数据
广告系统(简单php+js)
| 参观者 | 参观人次 | 网页数 | 文件数 | 字节 | |
| 浏览器流量 * | 96823 |
130818 (1.35 参观人次/参观者) |
713865 (5.45 网页数/参观) |
7163660 (54.76 文件数/参观) |
763.43 M字节 (5.97 K字节/参观) |
| 非浏览器流量 * | |
7471 | 11096 | 1.01 M字节 | |
sns(一般复杂php+mysql)
| 参观者 | 参观人次 | 网页数 | 文件数 | 字节 | |
| 浏览器流量 * | 30300 |
35773 (1.18 参观人次/参观者) |
102488 (2.86 网页数/参观) |
339758 (9.49 文件数/参观) |
574.38 M字节 (16.44 K字节/参观) |
| 非浏览器流量 * | |
180110 | 2558206 | 2.84 G字节 | |
文章(简单php+mysql)
| 参观者 | 参观人次 | 网页数 | 文件数 | 字节 | |
| 浏览器流量 * | 23168 |
29433 (1.27 参观人次/参观者) |
135918 (4.61 网页数/参观) |
475899 (16.16 文件数/参观) |
1.17 G字节 (41.81 K字节/参观) |
| 非浏览器流量 * | |
16498 | 20887 | 87.61 M字节 | |
discuz6(php+mysql)
| 参观者 | 参观人次 | 网页数 | 文件数 | 字节 | |
| 浏览器流量 * | 81182 |
118632 (1.46 参观人次/参观者) |
2568752 (21.65 网页数/参观) |
10408084 (87.73 文件数/参观) |
26.48 G字节 (234.05 K字节/参观) |
| 非浏览器流量 * | |
189089 | 209570 | 5.89 G字节 | |
一般复杂php+mysql
| 参观者 | 参观人次 | 网页数 | 文件数 | 字节 | |
| 浏览器流量 * | 2908 |
3455 (1.18 参观人次/参观者) |
11183 (3.23 网页数/参观) |
30527 (8.83 文件数/参观) |
52.70 M字节 (15.61 K字节/参观) |
| 非浏览器流量 * | |
1645 | 1663 | 3.24 M字节 | |
商店(简单php+mysql)
| 参观者 | 参观人次 | 网页数 | 文件数 | 字节 | |
| 浏览器流量 * | 2286 |
2612 (1.14 参观人次/参观者) |
7829 (2.99 网页数/参观) |
78226 (29.94 文件数/参观) |
859.63 M字节 (337 K字节/参观) |
| 非浏览器流量 * | |
437 | 477 | 1.38 M字节 | |
软件
os:as4
app:nginx 0.62+php5.26(fcgi)+mysql5.16+xcache+postfix
nginx:4
keepalive_timeout 60
phpcgi:50
mysql:
key_buffer_size = 160M query_cache_size = 64M query_cache_limit = 2M #default=1M query_cache_min_res_unit = 2k #default=4K max_allowed_packet = 16M table_cache = 768 tmp_table_size = 128M #default=16M max_heap_table_size = 128M #default=16M read_buffer_size = 2M read_rnd_buffer_size = 8M sort_buffer_size = 32M join_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 80 #default=0 thread_stack = 192K #default=192K thread_concurrency = 8 #default=10 max_connection = 100 max_connect_errors = 100 wait_timeout = 10
硬件
cpu :2颗双核至强 1.60GHz
mem:1G*2
harddisk:scsi 74G*1
负载
主要应用为discuz ,六十万会员,每日1.5万贴,db大小为三百多兆,其中php的javascript缓存占了大部分。
论坛平均一小时在线五千多人,高峰为七千.
nginx status Active connections: 6845 server accepts handled requests 14859839 14859839 56220725 Reading: 12 Writing: 15 Waiting: 6818 高峰时同时连接达八千多
top(高峰时load可达十几)
top - 14:45:37 up 35 days, 21:51, 1 user, load average: 3.82, 3.78, Tasks: 202 total, 1 running, 201 sleeping, 0 stopped, 0 zombie Cpu(s): 21.6% us, 4.1% sy, 0.0% ni, 70.5% id, 3.7% wa, 0.1% hi, 0 Mem: 2073976k total, 1985372k used, 88604k free, 83884k buffe Swap: 2040244k total, 4336k used, 2035908k free, 1267284k cachemysql统计 服务器已经运行了 0 天 2 小时,23 分 55 秒 连接 ø 每小时 % max. concurrent connections 65 --- --- 尝试失败 46 18.55 0.02%(firefox每次刷新都会加2,不明白) 中止 1,699 685.08 0.83% 统计 206 k 82.97 k 100.00%
2008-10-10 去掉广告系统。
修改expire增加到3天,来降低http连接(参考discuz.net的10天) 日志不记录图片的请求 效果:Active connections降低一半多。负载降低了四分之一左右。
论坛共 7196 人在线 - 最高记录是 11012 于 2008-10-12.
Active connections: 3195 server accepts handled requests 495784 495784 1917665 Reading: 16 Writing: 35 Waiting: 3144top - 10:55:43 up 39 days, 18:01, 1 user, load average: 2.89, 3.06, Tasks: 174 total, 1 running, 173 sleeping, 0 stopped, 0 zombie Cpu(s): 23.6% us, 4.2% sy, 0.0% ni, 63.7% id, 8.5% wa, 0.1% hi, 0 Mem: 2073976k total, 1958516k used, 115460k free, 117848k buffe Swap: 2040244k total, 188k used, 2040056k free, 1313148k cache
Web Server/Apache/Nginx & 技术 22 Sep 2008 03:09 pm
nginx下j_space人才系统rewrite
系统设置为“完整格式” 如: http://www.wjob.com.cn/index.php/index.html
[code]
location ~ .*\.php?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~* ^/index.php/
{
rewrite ^/index.php/(.*) /index.php?$1 break;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
[/code]