<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Nicholas_F の 领域</title><subtitle type="text">Let's Go</subtitle><id>http://feed.cnblogs.com/blog/u/54276/rss</id><updated>2012-05-31T09:58:12Z</updated><author><name>Nicholas_F</name><uri>http://www.cnblogs.com/nicholas_f/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nicholas_f/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/54276/rss"/><entry><id>http://www.cnblogs.com/nicholas_f/archive/2012/05/31/2528867.html</id><title type="text">resin下定义mime-mapping</title><summary type="text">mime-mapping是web服务器提供给web站点管理员能够将文件扩展名与媒体相关联的方法。由于某种原因，有些请求到了/favicon.ico。chrome变了下载。修改resin的conf/app-default.xml，增加如下代码：&lt;mime-mappingextension=".ico"mime-type="image/jpeg"/&gt;</summary><published>2012-05-31T09:58:00Z</published><updated>2012-05-31T09:58:00Z</updated><author><name>Nicholas_F</name><uri>http://www.cnblogs.com/nicholas_f/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nicholas_f/archive/2012/05/31/2528867.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nicholas_f/archive/2012/05/31/2528867.html"/><content type="html">&lt;p&gt;mime-mapping是web服务器提供给web站点管理员能够将文件扩展名与媒体相关联的方法。&lt;/p&gt;&lt;p&gt;由于某种原因，有些请求到了/favicon.ico。chrome变了下载。&lt;/p&gt;&lt;p&gt;修改resin的conf/app-default.xml，增加如下代码：&lt;/p&gt;&lt;p&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;mime-mapping&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="xml color1"&gt;extension&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;".ico"&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;code class="xml color1"&gt;mime-type&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"image/jpeg"&lt;/code&gt;&lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nicholas_f/aggbug/2528867.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nicholas_f/archive/2012/05/31/2528867.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nicholas_f/archive/2012/05/16/2504185.html</id><title type="text">Nginx日志分析</title><summary type="text">一，日志的切割shell脚本如下：#!/bin/bashlogs_path="/nginx/logs/"mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").logkill-USR1 `cat /nginx/logs/nginx.pid`其中 "/nginx/logs" 指的是nginx的log日志文件所在目录，生成的日志文件是以昨天日期命名的。为了达到每天自动分割的目的，在crontab中加入以下部分：1 0 *</summary><published>2012-05-16T08:12:00Z</published><updated>2012-05-16T08:12:00Z</updated><author><name>Nicholas_F</name><uri>http://www.cnblogs.com/nicholas_f/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nicholas_f/archive/2012/05/16/2504185.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nicholas_f/archive/2012/05/16/2504185.html"/><content type="html">&lt;p&gt;&lt;strong&gt;一，日志的切割&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;shell脚本如下：&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span&gt;#!/bin/bash&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;logs_path="&lt;span&gt;/nginx/logs/&lt;/span&gt;"&lt;br /&gt;&lt;span&gt;mv&lt;/span&gt;&lt;span&gt;&amp;nbsp; ${logs_path}&lt;/span&gt;access.log&lt;span&gt;&amp;nbsp;&amp;nbsp; ${logs_path}&lt;/span&gt;access_$(date -d "yesterday" +"%Y%m%d").log&lt;br /&gt;&lt;span&gt;kill&lt;/span&gt;&amp;nbsp;-USR1 `&lt;span&gt;cat /nginx/logs/nginx.pid&lt;/span&gt;`&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;其中 "/nginx/logs" 指的是nginx的log日志文件所在目录，生成的日志文件是以昨天日期命名的。&lt;/p&gt;&lt;p&gt;为了达到每天自动分割的目的，在crontab中加入以下部分：&lt;/p&gt;&lt;p&gt;1 0 * * * sh /home/zyf/sh/cut_nginx_log.sh&lt;br /&gt;这样就每天的0点1分把nginx日志重命名为日期格式，并重新生成今天的新日志文件。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二，Awstats的配置&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;日志文件分割好了，接下来就是分析了，也就是工具软件&lt;strong&gt;Awstats&lt;/strong&gt;的使用了。&lt;br /&gt;Awstats的配置文件默认会存储在/etc/awstats/目录下，包括你安装时设置的域名如：awstats.www.xxxxke.com.conf。&lt;/p&gt;&lt;p&gt;在这个配置文件中修改这个地方：&lt;br /&gt;&lt;strong&gt;LogFile="/nginx/logs/access_%YYYY-24%MM-24%DD-24.log"&lt;br /&gt;&lt;/strong&gt;这个意思是要去读取nginx昨天的日志文件，关于后边&lt;strong&gt;%YYYY-24%MM-24%DD-24&lt;/strong&gt;的设置，规则如下：&lt;/p&gt;&lt;p&gt;&lt;span&gt;# You can also use tags in this filename if you need a dynamic file name&lt;/span&gt;&lt;br /&gt;&lt;span&gt;# depending on date or time (Replacement is made by AWStats at the beginning&lt;/span&gt;&lt;br /&gt;&lt;span&gt;# of its execution). This is available tags :&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %YYYY-n&amp;nbsp; is replaced with 4 digits year we were n hours ago&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %YY-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with 2 digits year we were n hours ago&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %MM-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with 2 digits month we were n hours ago&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %MO-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with 3 letters month we were n hours ago&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %DD-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with day we were n hours ago&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %HH-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with hour we were n hours ago&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %NS-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with number of seconds at 00:00 since 1970&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %WM-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with the week number in month (1-5)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %Wm-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with the week number in month (0-4)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %WY-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with the week number in year (01-52)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %Wy-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with the week number in year (00-51)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %DW-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with the day number in week (1-7, 1=sunday)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; use n=24 if you need (1-7, 1=monday)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; %Dw-n&amp;nbsp;&amp;nbsp;&amp;nbsp; is replaced with the day number in week (0-6, 0=sunday)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; use n=24 if you need (0-6, 0=monday)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;#&amp;nbsp;&amp;nbsp; Use 0 for n if you need current year, month, day, hour&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三，开始分析、生成结果&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;最后，可以执行分析了。&lt;/p&gt;&lt;p&gt;使用这个命令：&lt;br /&gt;/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.xxxxke.com&lt;/p&gt;&lt;p&gt;这个命令会把结果生成到/var/lib/awstats 目录下 awstatsXXXX.www.XXXX.com.txt文件。&lt;/p&gt;&lt;p&gt;当然这样看起来不太方便，可以再用下面的命令来生成html页面，更加直观。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;perl /usr/local/awstats/tools/awstats_buildstaticpages.pl -update \&lt;br /&gt;&amp;nbsp;-config=www.xxxxoke.com -lang=cn \&amp;nbsp;&lt;br /&gt;-dir=/html/awstats \&lt;br /&gt;-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这样就会在/html/awstats目录下生成很直观的分析结果页。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;四,自动化&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;要是每天都去服务器上运行几条命令肯定是件令人烦燥的事情，幸亏Linux的世界里有crontab，&lt;/p&gt;&lt;p&gt;下面是从网友那找的 crontab&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1 0 * * * sh /home/zyf/sh/cut_nginx_log.sh&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;0 1 * * * /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.xxxxke.com&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;0 2 * * * perl /usr/local/awstats/tools/awstats_buildstaticpages.pl -update -config=www.xxxxke.com -lang=cn -dir=/html/awstats -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;LogFile="/usr/local/nginx/logs/%YYYY-24/%MM-24/expotia2.access_%YYYY-24%MM-24%DD-24.log"&lt;/p&gt;&lt;p&gt;log_format&amp;nbsp; main&amp;nbsp; '$remote_addr - $remote_user [$time_local] "$request" '&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '$status $body_bytes_sent "$http_referer" '&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '"$http_user_agent" "$http_x_forwarded_for"';&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nicholas_f/aggbug/2504185.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nicholas_f/archive/2012/05/16/2504185.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nicholas_f/archive/2012/05/01/2477646.html</id><title type="text">linux下开机启动nginx+resin</title><summary type="text">将nginx配置为系统的服务vi /etc/rc.d/init.d/nginx贴下以下内容：(根据实际情况做适当修改)#!/bin/bash# nginx Startup script for the Nginx HTTP Server# this script create it by gcec at 2009.10.22.# it is v.0.0.1 version.# if you find any errors on this scripts,please contact gcec cyz.# and send mail to support at gcec dot cc.## ch</summary><published>2012-05-01T01:49:00Z</published><updated>2012-05-01T01:49:00Z</updated><author><name>Nicholas_F</name><uri>http://www.cnblogs.com/nicholas_f/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nicholas_f/archive/2012/05/01/2477646.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nicholas_f/archive/2012/05/01/2477646.html"/><content type="html">&lt;p&gt;将nginx配置为系统的服务&lt;br /&gt;&lt;strong&gt;vi /etc/rc.d/init.d/nginx&lt;/strong&gt;&lt;br /&gt;贴下以下内容：(根据实际情况做适当修改)&lt;/p&gt;&lt;div class="UBBPanel codePanel"&gt;&lt;div class="UBBContent"&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;#!/bin/&lt;span style="color: #000000;"&gt;bash&lt;br/&gt;# nginx Startup script &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; the Nginx HTTP Server&lt;br/&gt;# &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt; script create it by gcec at &lt;span style="color: #800080;"&gt;2009.10&lt;/span&gt;.&lt;span style="color: #800080;"&gt;22&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;br/&gt;# it &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;is&lt;/span&gt; v.&lt;span style="color: #800080;"&gt;0.0&lt;/span&gt;.&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt; version.&lt;br/&gt;# &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; you find any errors on &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt; scripts,please contact gcec cyz.&lt;br/&gt;# and send mail to support at gcec dot cc.&lt;br/&gt;#&lt;br/&gt;# chkconfig: &lt;/span&gt;- &lt;span style="color: #800080;"&gt;85&lt;/span&gt; &lt;span style="color: #800080;"&gt;15&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;# description: Nginx &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;is&lt;/span&gt; a high-&lt;span style="color: #000000;"&gt;performance web and proxy server.&lt;br/&gt;#              It has a lot of features, but it&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;s not for everyone.&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;# processname: nginx&lt;br/&gt;# pidfile: &lt;/span&gt;/&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;/run/&lt;span style="color: #000000;"&gt;nginx.pid&lt;br/&gt;# config: &lt;/span&gt;/usr/local/nginx/conf/&lt;span style="color: #000000;"&gt;nginx.conf&lt;br/&gt;&lt;br/&gt;nginxd&lt;/span&gt;=/usr/local/nginx/sbin/&lt;span style="color: #000000;"&gt;nginx&lt;br/&gt;nginx_config&lt;/span&gt;=/usr/local/nginx/conf/&lt;span style="color: #000000;"&gt;nginx.conf&lt;br/&gt;nginx_pid&lt;/span&gt;=/&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;/run/&lt;span style="color: #000000;"&gt;nginx.pid&lt;br/&gt;&lt;br/&gt;RETVAL&lt;/span&gt;=&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;prog&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;nginx&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;# Source function library.&lt;br/&gt;. &lt;/span&gt;/etc/rc.d/init.d/&lt;span style="color: #000000;"&gt;functions&lt;br/&gt;&lt;br/&gt;# Source networking configuration.&lt;br/&gt;. &lt;/span&gt;/etc/sysconfig/&lt;span style="color: #000000;"&gt;network&lt;br/&gt;&lt;br/&gt;# Check that networking &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;is&lt;/span&gt;&lt;span style="color: #000000;"&gt; up.&lt;br/&gt;[ ${NETWORKING} &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;no&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; ] &amp;amp;&amp;amp; exit &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;[ &lt;/span&gt;-x $nginxd ] || exit &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;# Start nginx daemons functions.&lt;br/&gt;start() {&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; [ -&lt;span style="color: #000000;"&gt;e $nginx_pid ];then&lt;br/&gt;   echo &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;nginx already running....&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;   exit &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;fi&lt;br/&gt;&lt;br/&gt;   echo &lt;/span&gt;-n $&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Starting $prog: &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;   daemon $nginxd &lt;/span&gt;-&lt;span style="color: #000000;"&gt;c ${nginx_config}&lt;br/&gt;   RETVAL&lt;/span&gt;=$?&lt;span style="color: #000000;"&gt;&lt;br/&gt;   echo&lt;br/&gt;   [ $RETVAL &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt; ] &amp;amp;&amp;amp; touch /&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;/&lt;span style="color: #0000ff;"&gt;lock&lt;/span&gt;/subsys/&lt;span style="color: #000000;"&gt;nginx&lt;br/&gt;   &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; $RETVAL&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;# Stop nginx daemons functions.&lt;br/&gt;stop() {&lt;br/&gt;        echo &lt;/span&gt;-n $&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Stopping $prog: &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;        killproc $nginxd&lt;br/&gt;        RETVAL&lt;/span&gt;=$?&lt;span style="color: #000000;"&gt;&lt;br/&gt;        echo&lt;br/&gt;        [ $RETVAL &lt;/span&gt;= &lt;span style="color: #800080;"&gt;0&lt;/span&gt; ] &amp;amp;&amp;amp; rm -f /&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;/&lt;span style="color: #0000ff;"&gt;lock&lt;/span&gt;/subsys/nginx /&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;/run/&lt;span style="color: #000000;"&gt;nginx.pid&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;# reload nginx service functions.&lt;br/&gt;reload() {&lt;br/&gt;&lt;br/&gt;    echo &lt;/span&gt;-n $&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Reloading $prog: &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;    #kill &lt;/span&gt;-&lt;span style="color: #000000;"&gt;HUP `cat ${nginx_pid}`&lt;br/&gt;    killproc $nginxd &lt;/span&gt;-&lt;span style="color: #000000;"&gt;HUP&lt;br/&gt;    RETVAL&lt;/span&gt;=$?&lt;span style="color: #000000;"&gt;&lt;br/&gt;    echo&lt;br/&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;# See how we were called.&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;$1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;start)&lt;br/&gt;        start&lt;br/&gt;        ;;&lt;br/&gt;&lt;br/&gt;stop)&lt;br/&gt;        stop&lt;br/&gt;        ;;&lt;br/&gt;&lt;br/&gt;reload)&lt;br/&gt;        reload&lt;br/&gt;        ;;&lt;br/&gt;&lt;br/&gt;restart)&lt;br/&gt;        stop&lt;br/&gt;        start&lt;br/&gt;        ;;&lt;br/&gt;&lt;br/&gt;status)&lt;br/&gt;        status $prog&lt;br/&gt;        RETVAL&lt;/span&gt;=$?&lt;span style="color: #000000;"&gt;&lt;br/&gt;        ;;&lt;br/&gt;&lt;/span&gt;*&lt;span style="color: #000000;"&gt;)&lt;br/&gt;        echo $&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Usage: $prog {start|stop|restart|reload|status|help}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;        exit &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;esac&lt;br/&gt;&lt;br/&gt;exit $RETVAL&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;让nginx有可执行的权限&lt;br /&gt;&lt;strong&gt;chmod +x nginx&lt;/strong&gt;&lt;br /&gt;将nginx加入到服务当中&lt;br /&gt;&lt;strong&gt;chkconfig --add nginx&lt;/strong&gt;&lt;br /&gt;配置nginx的运行级别，让其可以在系统启动的时候跟着启动&lt;br /&gt;&lt;strong&gt;chkconfig --level 35 nginx on&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;通过以下命令来操作nginx&lt;br /&gt;启动：&lt;strong&gt;service nginx start&lt;/strong&gt;&lt;br /&gt;关闭：&lt;strong&gt;service nginx stop&amp;nbsp;&lt;/strong&gt;&lt;br /&gt;重起：&lt;strong&gt;service nginx restart&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;将resin配置为系统服务：&lt;br /&gt;进入$RESIN_HOME&lt;br /&gt;进入contrib目录，将init.resin文件copy到/etc/rc.d/init.d/resin&lt;br /&gt;&lt;strong&gt;cp init.resin /etc/rc.d/init.d/resin&lt;/strong&gt;&lt;br /&gt;给resin可执行的权限&lt;br /&gt;&lt;strong&gt;chmod +x /etc/rc.d/init.d/resin&lt;/strong&gt;&lt;br /&gt;将resin加入到系统服务当中&lt;br /&gt;&lt;strong&gt;chkconfig --add resin&lt;/strong&gt;&lt;br /&gt;将resin设置为自动启动&lt;br /&gt;&lt;strong&gt;chkconfig --level 35 resin on&lt;/strong&gt;&lt;/p&gt;&lt;div class="UBBPanel codePanel"&gt;&amp;nbsp;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/nicholas_f/aggbug/2477646.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nicholas_f/archive/2012/05/01/2477646.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nicholas_f/archive/2012/03/21/2409976.html</id><title type="text">java synchronized备忘</title><summary type="text">1 public class Test{ 2 3 public void method0(){//...} //普通函数 4 5 public synchronized void method1(){//...} //同步函数 6 7 public void method2() { 8 synchronized (this){//...} //以当前对象为锁的 同步代码块 9 }10 11 public void method3(SomeObject so) { 12 synchronized(so) {//...} //以某对象为锁的同步代码块13 } 14 15 publ...</summary><published>2012-03-21T07:24:00Z</published><updated>2012-03-21T07:24:00Z</updated><author><name>Nicholas_F</name><uri>http://www.cnblogs.com/nicholas_f/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nicholas_f/archive/2012/03/21/2409976.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nicholas_f/archive/2012/03/21/2409976.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Test{&lt;br /&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; method0(){&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;...} &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;普通函数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;synchronized&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; method1(){&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;...} &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;同步函数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; method2() { &lt;br /&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;synchronized&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;){&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;...} &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;以当前对象为锁的 同步代码块&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; }&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; method3(SomeObject so) { &lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;synchronized&lt;/span&gt;(so) {&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;...} &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;以某对象为锁的同步代码块&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; } &lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; method4() { &lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;...&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] lock = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[0];  &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 特别的instance变量&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;synchronized&lt;/span&gt; (lock){&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;...} &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 同步代码块&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;...&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt; }&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;synchronized&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; method5(){...} &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;静态同步函数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; method6(){&lt;br /&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;     &lt;span style="color: #0000ff;"&gt;synchronized&lt;/span&gt;(Test.&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;){...}&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; class literal作为同步锁的同步代码块&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt; }&lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt; }&lt;/div&gt;&lt;p&gt;一、method1同步函数和method2中同步块synchronized (this){...}所取得的同步锁都是类Test的实例对象，即对象锁，所以method1和method2效果等同。&lt;/p&gt;&lt;p&gt;二、当多个并发线程访问"&lt;span style="color: #ff6600;"&gt;同一个&lt;/span&gt;"对象中的同步函数或同步块时，取得对象锁的线程得到执行，该线程执行期间，其他要访问该对象同步函数或同步块(不管是不是相同的同步函数或同步块)的线程将会阻塞，直到获取该对象锁后才能执行，当然要访问该对象的非同步方法或同步块的线程不受对象锁的限制，可以直接访问。&lt;/p&gt;&lt;p&gt;三、method2同步块synchronized (this){...}中this是指调用这个方法的对象，如果两个线程中分别调用的是t1和t2(类Test的实例化)两个对象，则这个同步块对于这两个线程来说无效，这时可以使用method3中同步块synchronized(so)&amp;nbsp;{...}方式，将锁挂在其他对象上面。&lt;/p&gt;&lt;p&gt;四、如果要对函数中的部分代码进行同步处理，怎么办？method4中通过一个特别的实例变量充当锁来实现。&lt;/p&gt;&lt;p&gt;五、method5静态同步函数和method6中同步块synchronized(Test.class){...}所取得的同步锁是类锁，即类Test的锁，而非类Test的对象锁。&lt;/p&gt;&lt;p&gt;六、因为类锁跟对象锁是不同的锁，所以在多线程并发环境下method1和method5不构成同步。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nicholas_f/aggbug/2409976.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nicholas_f/archive/2012/03/21/2409976.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nicholas_f/archive/2012/02/24/2366994.html</id><title type="text">基于Java技术的大型网站架构方案(转)</title><summary type="text">1、Web层主体架构可以基于 Struts 1.X/2.X，当然有很多更好的控制层框架供选择，以快速敏捷为准则吧。 抽象出核心库封装 控制器和中间层的操作。 在大规模集群环境下，session复制会引起严重的性能问题。考虑用 集群缓存 + cookie验证 代替session实现权限控制吧。 2、Cache层配置 Memcache 组成集群缓存 对 Memcache 客户端进行封装 Memcached 节点组成池，调用示意：opList (BizName, 策略 ...)3、中间层“中间层”可以理解为基于应用和数据之间的层次。它被设计用来为Web应用提供：数据缓存 和 对应用透明的数据访问——</summary><published>2012-02-24T09:20:00Z</published><updated>2012-02-24T09:20:00Z</updated><author><name>Nicholas_F</name><uri>http://www.cnblogs.com/nicholas_f/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nicholas_f/archive/2012/02/24/2366994.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nicholas_f/archive/2012/02/24/2366994.html"/><content type="html">&lt;p&gt;1、Web层&lt;br /&gt;主体架构可以基于 Struts 1.X/2.X，当然有很多更好的控制层框架供选择，以快速敏捷为准则吧。 &lt;br /&gt;抽象出核心库封装 控制器和中间层的操作。 &lt;br /&gt;在大规模集群环境下，session复制会引起严重的性能问题。考虑用 集群缓存 + cookie验证 代替session实现权限控制吧。 &lt;br /&gt;2、Cache层&lt;br /&gt;配置 Memcache 组成集群缓存 &lt;br /&gt;对 Memcache 客户端进行封装 &lt;br /&gt;Memcached 节点组成池，调用示意：opList (BizName, 策略 ...)&lt;br /&gt;3、中间层&lt;br /&gt;&amp;ldquo;中间层&amp;rdquo;可以理解为基于应用和数据之间的层次。它被设计用来为Web应用提供：数据缓存 和 对应用透明的数据访问&amp;mdash;&amp;mdash;即应用不需要考虑数据表拆分的问题。以服务的方式提供对存储层的高性能调用以及分布式计算。可供选择的框架：ICE 、Hadoop 直接基于Memcache开发（减少复杂度，推荐） &lt;br /&gt;4、存储&lt;br /&gt;推荐MySQL，理由：免费，经过实践检验，有大量成熟的案例、解决方案、技术支持。&lt;br /&gt;小规模：一个 data table 维护存储服务器阵列，内容 -&amp;gt; mount &amp;hellip;&amp;hellip; &lt;br /&gt;大规模：Master-Slave模式+MySQL Proxy，实现数据库读写分离。在中间层的包装下，可做如下扩展，以支持更大规模的数据存取： &lt;br /&gt;数据库/表水平拆分，例 User -&amp;gt; User33% + User33% + User34% &lt;br /&gt;数据库/表垂直拆分，例 User -&amp;gt; UserBaseInfo + UserAddrInfo &lt;br /&gt;也可考虑使用 LongStore (龙存) 解决方案，由龙存管理存储阵列&amp;hellip;&amp;hellip;&lt;br /&gt;5、部署&lt;br /&gt;划分子域名，每个子域名一个Web应用包，互不干扰 &lt;br /&gt;静态资源（css, js, image ...）使用专门的静态服务器 &lt;br /&gt;6、负载均衡&lt;br /&gt;小规模：DNS轮询。&lt;br /&gt;大规模：F5， 2*X 台F5服务器，F5是L4/L7层交换机，每台至少可处理200万连接（与服务器内存有关）。&lt;br /&gt;Ngnix是L7层交换，LVS负载均衡也是一种方案&lt;br /&gt;7、Web中间件选择&lt;br /&gt;Tomcat - 最高400并发 &lt;br /&gt;Apache - 最高2000并发 &lt;br /&gt;Ngnix - 优于Apache &lt;br /&gt;采用方案：Ngnix + Resin ，理由：&lt;br /&gt;Resin提供更为快速的servlet引擎 - 选择Resin。 &lt;br /&gt;gzip问题 - Resin在单独处理gzip时存在内存溢出的隐患，因此要加一层 Ngnix。 &lt;br /&gt;Ngnix 能减少单独使用Resin时的内存占用 - Resin建立1000个连接使用1000个线程；加Ngnix后，透过其&amp;ldquo;异步连接&amp;rdquo;、&amp;ldquo;建立长连接&amp;rdquo;机制使Resin内存压力大大减小。 &lt;br /&gt;Ngnix 针对Linux系统有性能优化措施 - 0 Copy, send file ... &lt;br /&gt;因此采用：1 Ngnix + 1 Resin，一对一。&lt;br /&gt;静态服务器采用：Squid + Apache, why? because Squid has cache ability ...&lt;br /&gt;新变化 - Nginx从0.7.48版本开始，支持了类似Squid的缓存功能。这个缓存是把URL及相关组合当作Key，用md5编码哈希后保存在硬盘上，所以它可以支持任意URL链接，同时也支持 404/301/302 这样的非200状态码。虽然目前官方的Nginx Web缓存服务只能为指定URL或状态码设置过期时间，不支持类似Squid的PURGE指令，手动清除指定缓存页面，但是，通过一个第三方的Nginx模块，可以清除指定URL的缓存。&lt;br /&gt;Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成，前者用于反向代理时，对后端内容源服务器进行缓存，后者主要用于对FastCGI的动态程序进行缓存。两者的功能基本上一样。&lt;br /&gt;最新的Nginx 0.8.31版本，proxy_cache和fastcgi_cache已经比较完善，加上第三方的ngx_cache_purge模块（用于清除指定URL的缓存），已经可以完全取代Squid。有的网站已经在生产环境使用了 Nginx 的 proxy_cache 缓存功能超过两个月，十分稳定，速度不逊于 Squid。&lt;br /&gt;在功能上，Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上，Nginx对多核CPU的利用，胜过Squid不少。另外，在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上，Nginx也比Squid强大得多。这使得一台Nginx可以同时作为"负载均衡服务器"与"Web缓存服务器"来使用。以下是配置片段供参考：&lt;br /&gt;view plaincopy to clipboardprint?&lt;br /&gt;http&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;{&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; ...&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; client_body_buffer_size&amp;nbsp; 512k;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; proxy_connect_timeout&amp;nbsp;&amp;nbsp;&amp;nbsp; 5;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; proxy_read_timeout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 60;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; proxy_send_timeout&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; proxy_buffer_size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 16k;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; proxy_buffers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 64k;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; proxy_busy_buffers_size 128k;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; proxy_temp_file_write_size 128k;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; ...&amp;nbsp; &lt;br /&gt;&amp;nbsp; #注：proxy_temp_path和proxy_cache_path指定的路径必须在同一分区&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; proxy_temp_path&amp;nbsp;&amp;nbsp; /data0/proxy_temp_dir;&amp;nbsp; &lt;br /&gt;&amp;nbsp; #设置Web缓存区名称为cache_one，内存缓存空间大小为200MB，1天清理一次缓存，硬盘缓存空间大小为30GB。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; proxy_cache_path&amp;nbsp; /data0/proxy_cache_dir&amp;nbsp; levels=1:2&amp;nbsp;&amp;nbsp; keys_zone=cache_one:200m inactive=1d max_size=30g;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&amp;nbsp;&amp;nbsp; &lt;br /&gt;server&amp;nbsp;&amp;nbsp; &lt;br /&gt;{&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; ...&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; location /&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #如果后端的服务器返回502、504、执行超时等错误，自动将请求转发到upstream负载均衡池中的另一台服务器，实现故障转移。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_next_upstream http_502 http_504 error timeout invalid_header;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_cache cache_one;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #对不同的HTTP状态码设置不同的缓存时间&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_cache_valid&amp;nbsp; 200 304 12h;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_cache_valid&amp;nbsp; 301 302 1h;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #以域名、URI、参数组合成Web缓存的Key值，Nginx根据Key值哈希，存储缓存内容到二级缓存目录内&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_cache_key $host$uri$is_args$args;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_set_header Host&amp;nbsp; $host;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_set_header X-Forwarded-For&amp;nbsp; $remote_addr;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_pass &lt;a href="http://backend_server/" target="_blank"&gt;http://backend_server&lt;/a&gt;;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; expires&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1d;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&amp;nbsp; #用于清除缓存，假设一个URL为&lt;a href="http://192.168.1.44/test.txt" target="_blank"&gt;http://192.168.1.44/test.txt&lt;/a&gt;，通过访问&lt;a href="http://192.168.4.44/purge/test.txt" target="_blank"&gt;http://192.168.4.44/purge/test.txt&lt;/a&gt;就可以清除该URL的缓存。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; location ~ /purge(/.*)&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #设置只允许指定的IP或IP段才可以清除URL缓存。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; allow&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 127.0.0.1;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; allow&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.0.0/16;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; deny&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; all;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_cache_purge&amp;nbsp;&amp;nbsp;&amp;nbsp; cache_one&amp;nbsp;&amp;nbsp; $host$1$is_args$args;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; #扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; location ~ .*\.(php|jsp|cgi)?$&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_set_header Host&amp;nbsp; $host;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_set_header X-Forwarded-For&amp;nbsp; $remote_addr;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxy_pass &lt;a href="http://backend_server/" target="_blank"&gt;http://backend_server&lt;/a&gt;;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&amp;nbsp;&lt;/p&gt;&lt;p&gt;同时，对于影响页面展现的静态资源，例如：css, js 等可以放在具有优质带宽的IDC（IDC=互联网数据中心，优质/高速的带宽也比较贵，正所谓一份价钱一分货）；其他的静态资源，如图片等可以放在价格相对低廉的IDC中，以域名区分两种静态资源，节省每一分钱。&lt;br /&gt;8、网络拓扑图&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; / Ngnix - 1:1 - Resin &lt;br /&gt;F5 --&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; \ Squid - 1:n - Apache&lt;/p&gt;&lt;p&gt;9、监控统计平台&lt;br /&gt;业务统计 - 用户访问统计 &lt;br /&gt;软件性能 - 应用系统监控，例如：请求响应时间&amp;hellip;&amp;hellip; &lt;br /&gt;硬件/网络性能 - Ganglia监控 &lt;br /&gt;10、其它要点&lt;br /&gt;IE浏览器对同一域名（包括子域名）只能建立2个连接，连接多了只能排队&amp;hellip;&amp;hellip; &lt;br /&gt;双F5架构，两台职能划分不同，镜像，心跳接管&amp;hellip;&amp;hellip; &lt;br /&gt;Raid存储阵列&amp;hellip;&amp;hellip; &lt;br /&gt;Linux操作系统及其优化&amp;hellip;&amp;hellip;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nicholas_f/aggbug/2366994.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nicholas_f/archive/2012/02/24/2366994.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nicholas_f/archive/2012/02/21/2362108.html</id><title type="text">Windows下PHP5和Apache2.2的安装与配置</title><summary type="text">1、下载程序Apache:http://mirror.bjtu.edu.cn/apache//httpd/binaries/win32/PHP:http://www.php.net2、安装程序Apache2.2直接双击运行,略...PHP5.2下载zip，解压到c:/php，其中有两个ini文件(php.ini-dist和php.ini-recommended)，建议使用php.ini-recommented(默认设置作了性能和安全优化)，将php.ini-recommended拷贝到%WINDIR%,通常是c:\windows，如果是NT/2000，通常为c:\winnt或c:\winnt4</summary><published>2012-02-21T15:07:00Z</published><updated>2012-02-21T15:07:00Z</updated><author><name>Nicholas_F</name><uri>http://www.cnblogs.com/nicholas_f/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nicholas_f/archive/2012/02/21/2362108.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nicholas_f/archive/2012/02/21/2362108.html"/><content type="html">&lt;p&gt;1、下载程序&lt;br /&gt;Apache:&lt;a href="http://mirror.bjtu.edu.cn/apache//httpd/binaries/win32/"&gt;http://mirror.bjtu.edu.cn/apache//httpd/binaries/win32/&lt;/a&gt;&lt;br /&gt;PHP:&lt;a href="http://mirror.bjtu.edu.cn/apache//httpd/binaries/win32/"&gt;http://www.php.net&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="text-align: left; widows: 2; text-transform: none; background-color: #f5f8fd; text-indent: 0px; font: 14px/24px Arial, 宋体; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;2、安装程序&lt;br /&gt;Apache2.2直接双击运行,略...&lt;br /&gt;PHP5.2下载zip，解压到c:/php，其中有两个ini文件(php.ini-dist和php.ini-recommended)，建议使用php.ini-recommented(默认设置作了性能和安全优化)，将php.ini-recommended拷贝到%WINDIR%,通常是c:\windows，如果是NT/2000，通常为c:\winnt或c:\winnt40对应服务器版本&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="text-align: left; widows: 2; text-transform: none; background-color: #f5f8fd; text-indent: 0px; font: 14px/24px Arial, 宋体; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;3、Apache中PHP的设置(修改httpd.conf文件)&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="text-align: left; widows: 2; text-transform: none; background-color: #f5f8fd; text-indent: 0px; font: 14px/24px Arial, 宋体; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;PHP在Apache中工作有两种方式：&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="text-align: left; widows: 2; text-transform: none; background-color: #f5f8fd; text-indent: 0px; font: 14px/24px Arial, 宋体; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;一是使用CGI二进制文件，添加如下设置到Apache&lt;br /&gt;ScriptAlias /php/ "c:/php/"&lt;br /&gt;AddType application/x-httpd-php .php&lt;br /&gt;Action application/x-httpd-php "/php/php.exe"&lt;br /&gt;二是把PHP作为Apache的模块，添加如下设置&lt;br /&gt;LoadModule php5_module "c:/php/php5apache2_2.dll"&lt;br /&gt;AddType application/x-httpd-php .php&lt;br /&gt;*将php目录下php5ts.dll拷贝到windows/system32(Windows XP) 或winnt/system32(Windows NT/2000)&lt;/span&gt;&lt;span class="Apple-style-span" style="text-align: left; widows: 2; text-transform: none; background-color: #f5f8fd; text-indent: 0px; font: 14px/24px Arial, 宋体; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nicholas_f/aggbug/2362108.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nicholas_f/archive/2012/02/21/2362108.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nicholas_f/archive/2012/01/18/2325677.html</id><title type="text">减轻DDoS攻击的轻量级小程序</title><summary type="text">DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址，在检测到某个结点超过预设的限 制时，该程序会通过APF或IPTABLES禁止或阻挡这些IP.官网：http://deflate.medialayer.com/1、安装DDoS deflateshell&gt;wget http://www.inetbase.com/scripts/ddos/install.sh shell&gt;chmod 0700 install.shshell&gt;./install.sh2、配置DDoS deflateDDoS deflate的</summary><published>2012-01-18T07:55:00Z</published><updated>2012-01-18T07:55:00Z</updated><author><name>Nicholas_F</name><uri>http://www.cnblogs.com/nicholas_f/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nicholas_f/archive/2012/01/18/2325677.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nicholas_f/archive/2012/01/18/2325677.html"/><content type="html">&lt;p&gt;DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址，在检测到某个结点超过预设的限 制时，该程序会通过APF或IPTABLES禁止或阻挡这些IP.&lt;br /&gt;官网：&lt;a href="http://deflate.medialayer.com/"&gt;http://deflate.medialayer.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;1、安装DDoS deflate&lt;br /&gt;shell&amp;gt;wget http://www.inetbase.com/scripts/ddos/install.sh&amp;nbsp;&amp;nbsp; &lt;br /&gt;shell&amp;gt;chmod 0700 install.sh&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;shell&amp;gt;./install.sh&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、配置DDoS deflate&lt;br /&gt;DDoS deflate的默认配置位于/usr/local/ddos/ddos.conf ，内容如下：&lt;br /&gt;##### Paths of the script and other files&lt;br /&gt;PROGDIR="/usr/local/ddos"&lt;br /&gt;PROG="/usr/local/ddos/ddos.sh"&lt;br /&gt;IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list"&amp;nbsp; //IP地址白名单&lt;br /&gt;CRON="/etc/cron.d/ddos.cron"&amp;nbsp;&amp;nbsp;&amp;nbsp; //定时执行程序&lt;br /&gt;APF="/etc/apf/apf"&lt;br /&gt;IPT="/sbin/iptables"&lt;br /&gt;##### frequency in minutes for running the script&lt;br /&gt;##### Caution: Every time this setting is changed, run the script with --cron&lt;br /&gt;#####&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; option so that the new frequency takes effect&lt;br /&gt;FREQ=1&amp;nbsp;&amp;nbsp; //检查时间间隔，默认1分钟&lt;br /&gt;##### How many connections define a bad IP? Indicate that below.&lt;br /&gt;NO_OF_CONNECTIONS=150&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //最大连接数，超过这个数IP就会被屏蔽，一般默认即可&lt;br /&gt;##### APF_BAN=1 (Make sure your APF version is atleast 0.96)&lt;br /&gt;##### APF_BAN=0 (Uses iptables for banning ips instead of APF)&lt;br /&gt;APF_BAN=1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //使用APF还是iptables。推荐使用iptables,将APF_BAN的值改为0即可。&lt;br /&gt;##### KILL=0 (Bad IPs are'nt banned, good for interactive execution of script)&lt;br /&gt;##### KILL=1 (Recommended setting)&lt;br /&gt;KILL=1&amp;nbsp;&amp;nbsp; //是否屏蔽IP，默认即可&lt;br /&gt;##### An email is sent to the following address when an IP is banned.&lt;br /&gt;##### Blank would suppress sending of mails&lt;br /&gt;EMAIL_TO="root"&amp;nbsp;&amp;nbsp; //当IP被屏蔽时给指定邮箱发送邮件，推荐使用，换成自己的邮箱即可&lt;br /&gt;##### Number of seconds the banned ip should remain in blacklist.&lt;br /&gt;BAN_PERIOD=600&amp;nbsp;&amp;nbsp;&amp;nbsp; //禁用IP时间，默认600秒，可根据情况调整&amp;nbsp;&lt;/p&gt;&lt;p&gt;3、卸载DDoS deflate&lt;br /&gt;shell&amp;gt;wget http://www.inetbase.com/scripts/ddos/uninstall.ddos&lt;br /&gt;shell&amp;gt;chmod 0700 uninstall.ddos&lt;br /&gt;shell&amp;gt;./uninstall.ddos&lt;/p&gt;&lt;p&gt;4、白名单设置&lt;br /&gt;有时候默认的白名单经常有失误，为了避免这个情况，我们可以手工设置白名单的ip，然后强制不允许修改&lt;br /&gt;vi /usr/local/ddos/ignore.ip.list //手工设置白名单IP&lt;br /&gt;chattr +i /usr/local/ddos/ignore.ip.list&amp;nbsp; //强制不允许修改&lt;br /&gt;chattr -i /usr/local/ddos/ignore.ip.list&amp;nbsp; //解除不允许修改&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nicholas_f/aggbug/2325677.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nicholas_f/archive/2012/01/18/2325677.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nicholas_f/archive/2012/01/05/2312941.html</id><title type="text">Nginx使用反向代理时Hessian411错误解决方案(转)</title><summary type="text">问题描述：用Hessian实现web service过程中，需要创建对象时，是使用HTTP POST方法来传递数据的。但是在有反向代理(nginx)的情况下，会抛出异常(com.caucho.hessian.client.HessianConnectionException: 411:java.io.IOException: Server returned HTTP response code: 411 for URL:http://xxxx/xxx/xxxService)。首先来看下HTTP 411错误的解释：Length Required服务器不能处理请求，除非客户发送一个Content-</summary><published>2012-01-05T04:35:00Z</published><updated>2012-01-05T04:35:00Z</updated><author><name>Nicholas_F</name><uri>http://www.cnblogs.com/nicholas_f/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nicholas_f/archive/2012/01/05/2312941.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nicholas_f/archive/2012/01/05/2312941.html"/><content type="html">&lt;p&gt;问题描述：&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;用&amp;nbsp;Hessian&amp;nbsp;实现&amp;nbsp;web service&amp;nbsp;过程中，需要创建对象时，是使用&amp;nbsp;HTTP POST&amp;nbsp;方法来传递数据的。但是在有反向代理&amp;nbsp;(nginx)&amp;nbsp;的情况下，会抛出异常&amp;nbsp;(com.caucho.hessian.client.HessianConnectionException: 411:java.io.IOException: Server returned HTTP response code: 411 for URL:http://xxxx/xxx/xxxService)&amp;nbsp;。&lt;/p&gt;&lt;p&gt;首先来看下&amp;nbsp;HTTP 411&amp;nbsp;错误的解释：&amp;nbsp;Length Required&amp;nbsp;服务器不能处理请求，除非客户发送一个&amp;nbsp;Content-Length&amp;nbsp;头。（&amp;nbsp;HTTP 1.1&amp;nbsp;新）这是因为&amp;nbsp;Hessian&amp;nbsp;与服务端通信默认是采取分块的方式&amp;nbsp;(chunked encoding)&amp;nbsp;发送数据，而反向代理要获得&amp;nbsp;Content-Length&amp;nbsp;这个头，才能处理请求，但是&amp;nbsp;Hessian&amp;nbsp;的请求中并没有加入这个参数。&lt;/p&gt;&lt;p&gt;解决方法：&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;com.caucho.hessian.client.HessianProxyFactory&amp;nbsp;类中，有一个&amp;nbsp;boolean _chunckedPost&amp;nbsp;的域成员，其默认值为&amp;nbsp;true&amp;nbsp;。这个值就是规定&amp;nbsp;Hessian&amp;nbsp;是否以分块发送的方式与服务端交换数据的参数，因此在创建com.caucho.hessian.client.HessianProxyFactory&amp;nbsp;的对象后（假设为&amp;nbsp;factory&amp;nbsp;），只要调用其上的setChunckedPost()&amp;nbsp;方法，把这个属性设置为&amp;nbsp;false&amp;nbsp;即可。即&amp;nbsp;factory.setChunkedPost(false);&lt;/p&gt;&lt;p&gt;分块编码传输：&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;分块编码&amp;nbsp;(chunked encoding)&amp;nbsp;传输方式是&amp;nbsp;HTTP 1.1&amp;nbsp;协议中定义的&amp;nbsp;Web&amp;nbsp;用户向服务器提交数据的一种方法，当服务器收到&amp;nbsp;chunked&amp;nbsp;编码方式的数据时会分配一个缓冲区存放之，如果提交的数据大小未知，客户端会以一个协商好的分块大小向服务器提交数据。&lt;/p&gt;&lt;p&gt;The content can be broken up into a number of chunks; each of which is prefixed by its size in bytes. A zero size chunk indicates the end of the response message. If a server is using chunked encoding it must set the Transfer-Encoding header to "chunked".&lt;/p&gt;&lt;p&gt;Chunked encoding is useful when a large amount of data is being returned to the client and the total size of the response may not be known until the request has been fully processed. An example of this is generating an HTML table of results from a database query. If you wanted to use the Content-Length header you would have to buffer the whole result set before calculating the total content size. However, with chunked encoding you could just write the data one row at a time and write a zero sized chunk when the end of the query was reached.&lt;/p&gt;&lt;p&gt;如果不使用&amp;nbsp;Chunked encoding&amp;nbsp;传输方式，需要将要发送的数据缓存下来，计算出&amp;nbsp;content-length&amp;nbsp;，从而满足反向代理（&amp;nbsp;Nginx&amp;nbsp;）需要&amp;nbsp;content-length&amp;nbsp;的要求。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nicholas_f/aggbug/2312941.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nicholas_f/archive/2012/01/05/2312941.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nicholas_f/archive/2011/09/24/2189444.html</id><title type="text">nginx无法完整下载文件问题及解决方法</title><summary type="text">Nginx前端反向代理Resin，有一个接近1m的xml文件直接通过Resin打开没问题，通过Nginx反向代理后被折断，原因很明显了，Nginx反向代理设置限制了大文件传输，根据“实际”情况，加大限制即可：proxy_buffers 4 1m;proxy_busy_buffers_size 2m;这里 proxy_busy_buffers_size = proxy_buffers*2 否则可能报错</summary><published>2011-09-24T06:33:00Z</published><updated>2011-09-24T06:33:00Z</updated><author><name>Nicholas_F</name><uri>http://www.cnblogs.com/nicholas_f/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nicholas_f/archive/2011/09/24/2189444.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nicholas_f/archive/2011/09/24/2189444.html"/><content type="html">&lt;p&gt;Nginx前端反向代理Resin，有一个接近1m的xml文件直接通过Resin打开没问题，通过Nginx反向代理后被折断，原因很明显了，Nginx反向代理设置限制了大文件传输，根据&amp;ldquo;实际&amp;rdquo;情况，加大限制即可：&lt;/p&gt;&lt;p&gt;proxy_buffers&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 1m;&lt;/p&gt;&lt;p&gt;proxy_busy_buffers_size&amp;nbsp;&amp;nbsp;&amp;nbsp; 2m;&lt;/p&gt;&lt;p&gt;这里 proxy_busy_buffers_size = proxy_buffers*2 否则可能报错&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nicholas_f/aggbug/2189444.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nicholas_f/archive/2011/09/24/2189444.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/nicholas_f/archive/2011/07/17/2108618.html</id><title type="text">mysql5.5 master-slave(Replication)配置</title><summary type="text">一主一从：Master:OS:centos release 5.6 DB:mysql 5.5.8 IP:192.168.1.2Slave:OS:centos release 5.6 DB:mysql 5.5.8 IP:192.168.1.3修改主机Master配置文件 (/etc/my.cnf)[mysqld]//至少要有server-id、与log-bin两项server-id=1 log-bin=/var/lib/mysql/mysql-bin datadir=/var/lib/mysql//为了使用事务的InnoDB在复制中最大的持久性和一致性，你应该指定innodb_flush_log</summary><published>2011-07-17T03:06:00Z</published><updated>2011-07-17T03:06:00Z</updated><author><name>Nicholas_F</name><uri>http://www.cnblogs.com/nicholas_f/</uri></author><link rel="alternate" href="http://www.cnblogs.com/nicholas_f/archive/2011/07/17/2108618.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/nicholas_f/archive/2011/07/17/2108618.html"/><content type="html">&lt;p&gt;一主一从：&lt;/p&gt;&lt;p&gt;Master:&lt;/p&gt;&lt;p&gt;OS:centos release 5.6 &amp;nbsp;DB:mysql 5.5.8 &amp;nbsp;IP:192.168.1.2&lt;/p&gt;&lt;p&gt;Slave:&lt;/p&gt;&lt;p&gt;OS:centos release 5.6 &amp;nbsp;DB:mysql 5.5.8 &amp;nbsp;IP:192.168.1.3&lt;/p&gt;&lt;p&gt;修改主机Master配置文件 (/etc/my.cnf)&lt;/p&gt;&lt;p&gt;[mysqld]&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #339966;"&gt;//至少要有server-id、与log-bin两项&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;server&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;id&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;log&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;bin&lt;/span&gt;&lt;span style="color: #000000;"&gt;=/&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;mysql&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;mysql&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;bin   &lt;br /&gt;datadir&lt;/span&gt;&lt;span style="color: #000000;"&gt;=/&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;mysql&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #339966;"&gt;//为了使用事务的InnoDB在复制中最大的持久性和一致性，你应该指定innodb_flush_log_at_trx_commit=1,sync_binlog=1选项&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;innodb_flush_log_at_trx_commit&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;sync_binlog&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;p&gt;在主机Master创建一个有复制权限的用户&lt;/p&gt;&lt;p&gt;mysql&amp;gt;create user repl_user@192.168.1.3;&lt;/p&gt;&lt;p&gt;mysql&amp;gt;grant replication slave on *.* to repl_user@192.168.1.3 identified by '123456';&lt;/p&gt;&lt;p&gt;锁住主机，记录二进制日志的位置(后面设置从机的时候会用到)&lt;/p&gt;&lt;p&gt;mysql&amp;gt;&lt;span style="color: #ff0000;"&gt;flush tables with read lock;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;mysal&amp;gt;show master status;&lt;/p&gt;&lt;p&gt;File：mysql-bin.000013 &amp;nbsp;Position：7863951&lt;/p&gt;&lt;p&gt;复制主机数据库(test)到从机&lt;/p&gt;&lt;p&gt;shell&amp;gt;/usr/bin/mysqldump test -uroot &amp;nbsp;-padmin --opt | mysql test -uroot -padmin -h 192.168.1.3&lt;/p&gt;&lt;p&gt;重新打开主机Master写操作功能&lt;/p&gt;&lt;p&gt;mysql&amp;gt;&lt;span style="color: #ff0000;"&gt;unlock tables;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;修改从机Slave配置文件(/etc/my.cnf)&lt;/p&gt;&lt;p&gt;[mysqld]&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;p&gt;server-id=2 &lt;span style="color: #339966;"&gt;//必须是1到2的32次方之间的一个整数，且必须和主机Master的server-id不一样&lt;/span&gt;&lt;br /&gt;relay-log-index=slave-relay-bin.index&lt;br /&gt;relay-log=slave-relay-bin&lt;br /&gt;replicate-do-db=test&amp;nbsp;&lt;span style="color: #339966;"&gt;//指定复制数据库&lt;/span&gt;&lt;br /&gt;datadir=/var/lib/mysql&lt;/p&gt;&lt;/div&gt;&lt;p&gt;从机Slave初始化复制&lt;/p&gt;&lt;p&gt;mysql&amp;gt;slave stop;&lt;/p&gt;&lt;p&gt;mysql&amp;gt;change master to master_host='192.168.1.2',&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;master_user='repl_user',&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;master_password='123456',&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;master_log_file='mysql-bin.000013',&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;master_log_pos=7863951;&lt;/p&gt;&lt;p&gt;开启复制&lt;/p&gt;&lt;p&gt;mysql&amp;gt;start slave;&lt;/p&gt;&lt;p&gt;查看复制状态&lt;/p&gt;&lt;p&gt;mysql&amp;gt;show slave status\G&lt;/p&gt;&lt;p&gt;测试复制：&lt;/p&gt;&lt;p&gt;在主机master中对test数据库进行sql操作，再查看从机test数据库是否产生同步。&lt;/p&gt;&lt;p&gt;Slave SQL错误导致同步卡住的一种处理方法&lt;/p&gt;&lt;p&gt;mysql&amp;gt;slave stop;&lt;/p&gt;&lt;p&gt;mysql&amp;gt;set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;&lt;/p&gt;&lt;p&gt;mysql&amp;gt;slave start;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/nicholas_f/aggbug/2108618.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nicholas_f/archive/2011/07/17/2108618.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
