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同步索引文件。

一。先设置两台服务器时间是同步的。

Linux的时间设置与同步 (NTP)

二。设置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/tomcat

CATALINA_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 cache
 

mysql统计

服务器已经运行了 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 人在线 - 最高记录是 110122008-10-12.
Active connections: 3195
server accepts handled requests
 495784 495784 1917665
Reading: 16 Writing: 35 Waiting: 3144
top - 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]

Next Page »