Nginx HTTP¸ºÔؾùºâ/·´Ïò´úÀíµÄÏà¹Ø²ÎÊý²âÊÔ
ÔÎÄ£ºhttp://salogs.com/2010/05/nginx-http¸ºÔؾùºâ·´Ïò´úÀíµÄÏà¹Ø²ÎÊý²âÊÔ/
²âÊÔÄ¿µÄ
£¨1£©ÅªÇå³þHTTP Upstream Ä£¿éÖÐServerÖ¸ÁîµÄmax_failsÓëfail_timeout²ÎÊýµÄ¹Øϵ¡¢ËüÃǶԺó¶Ë·þÎñÆ÷½¡¿µÇé¿öµÄ¼ì²éÆðµ½ÁËʲô×÷Óá¢ËüÃǵÄÈ¡Öµ¶ÔHttp proxyÄ£¿éÖеÄÆäËüÖ¸ÁîÊÇ·ñÓÐÖ±½Ó»ò¼ä½ÓµÄÓ°ÏìµÈ¡¡
£¨2£©²âÊÔHTTP ProxyÄ£¿éÖÐproxy_next_upstream¡¢proxy_connect_timeout¡¢proxy_read_timeout¡¢ proxy_send_timeoutÖ¸ÁîµÄ×÷ÓᢶÔnginxÐÔÄܵÄÓ°Ïì¡¢¶Ôºó¶Ë·þÎñÆ÷ÏìÓ¦µÄ´¦ÀíµÈ¡¡
²âÊÔ·½·¨
±¾ÎIJâÊÔ²»»áʹÓÃѹÁ¦²âÊÔ£¬ËùÓеIJâÊÔ¶¼ÊÇͨ¹ýä¯ÀÀÆ÷ÊÖ¶¯Ë¢ÐÂÀ´ÊµÏֵġ£ºó¶Ë·þÎñÆ÷ʹÓüòµ¥µÄphp³ÌÐòÀ´ÊµÏÖ¡£
²âÊÔ»·¾³
Nginx¸ºÔؾùºâ/·´Ïò´úÀí·þÎñÆ÷
ϵͳ£ºCentOS 5.4 64bit
Nginx£º0.7.65
IP:192.168.108.10
ºó¶Ëweb·þÎñÆ÷
ϵͳ£ºCentOS 5.4 64bit
Web»·¾³£ºapache+php
Web-1 IP:192.168.108.163
Web-2 IP:192.168.108.164
±¾´Î²âÊÔÖ÷ÒªÕë¶ÔHTTP UpstreamºÍHTTP ProxyÄ£¿é½øÐУ¬ÏÂÃæ²âÊÔ»·¾³ÖÐhttp upstream ºÍhttp proxyÄ£¿é²ÎÊýµÄ³õʼ»¯ÉèÖ㬺óÎÄ»áÕë¶Ô²âÊԵIJÎÊý½øÐÐÏàÓ¦µÄÐ޸ģº
¡upstream test {
server 192.168.108.163 ;
server 192.168.108.164: 80;
}
server {
listen 80;
server_name .test.com;
index index.php index.html index.htm;
location / {
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
proxy_connect_timeout 10s;
proxy_read_timeout 2s;
#proxy_send_timeout 10s;
proxy_pass http: // test;
}
}
¡
Ìá³öserverÖ¸ÁîºóÃæµÄ²ÎÊý²¿·Ö£¬ÒÔÏÂÕª³nginx wiki ÄÚÈÝ
Óï·¨£ºserver name [parameters]
parameters°üº¬£º
¡¤weight = NUMBER - ÉèÖ÷þÎñÆ÷ȨÖØ£¬Ä¬ÈÏΪ1¡£
¡¤max_fails = NUMBER - ÔÚÒ»¶¨Ê±¼äÄÚ£¨Õâ¸öʱ¼äÔÚfail_timeout²ÎÊýÖÐÉèÖ㩼ì²éÕâ¸ö·þÎñÆ÷ÊÇ·ñ¿ÉÓÃʱ²úÉúµÄ×î¶àʧ°ÜÇëÇóÊý£¬Ä¬ÈÏΪ1£¬½«ÆäÉèÖÃΪ0¿ÉÒԹرռì²é£¬Õâ Щ´íÎóÔÚproxy_next_upstream»òfastcgi_next_upstream£¨404´íÎó²»»áʹmax_failsÔö¼Ó£©Öж¨Òå¡£
¡¤fail_timeout = TIME - ÔÚÕâ¸öʱ¼äÄÚ²úÉúÁËmax_failsËùÉèÖôóСµÄʧ°Ü³¢ÊÔÁ¬½ÓÇëÇóºóÕâ¸ö·þÎñÆ÷¿ÉÄܲ»¿ÉÓã¬Í¬ÑùËüÖ¸¶¨ÁË·þÎñÆ÷²»¿ÉÓõÄʱ¼ä£¨ÔÚÏÂÒ»´Î³¢ÊÔÁ¬½ÓÇëÇó·¢Æð ֮ǰ£©£¬Ä¬ÈÏΪ10Ã룬fail_timeoutÓëÇ°¶ËÏìӦʱ¼äûÓÐÖ±½Ó¹Øϵ£¬²»¹ý¿ÉÒÔʹÓÃproxy_connect_timeoutºÍ proxy_read_timeoutÀ´¿ØÖÆ¡£
¡¤down - ±ê¼Ç·þÎñÆ÷´¦ÓÚÀëÏß״̬£¬Í¨³£ºÍip_hashÒ»ÆðʹÓá£
¡¤backup - (0.6.7»ò¸ü¸ß)Ö»ÓÃÓÚ±¾·þÎñÆ÷£¬Èç¹ûËùÓеķDZ¸·Ý·þÎñÆ÷¶¼å´»ú»ò·±Ã¦¡£
¹ØÓÚmax_fails²ÎÊýµÄÀí½â£º¸ù¾ÝÉÏÃæµÄ½âÊÍ£¬max_failsĬÈÏΪ1£¬fail_timeoutĬÈÏΪ10Ã룬Ҳ¾ÍÊÇ˵£¬Ä¬ÈÏÇé¿öϺó¶Ë·þÎñÆ÷ÔÚ10ÃëÖÓÖ®ÄÚ¿ÉÒÔÈÝÐíÓÐÒ»´ÎµÄʧ°Ü£¬Èç¹û³¬¹ý1´ÎÔòÊÓΪ¸Ã·þÎñÆ÷ÓÐÎÊÌ⣬½«¸Ã·þÎñÆ÷±ê¼ÇΪ²»¿ÉÓᣵȴý10ÃëºóÔÙ½«ÇëÇ󷢸ø¸Ã·þÎñÆ÷£¬ÒÔ´ËÀàÍƽøÐкó¶Ë·þÎñÆ÷µÄ½¡¿µ¼ì²é¡£µ«Èç¹ûÎÒ½«max_failsÉèÖÃΪ0£¬Ôò´ú±í²»¶Ôºó¶Ë·þÎñÆ÷½øÐн¡¿µ¼ì²é£¬ÕâÑùÒ»À´fail_timeout²ÎÊýÒ²¾ÍûʲôÒâÒåÁË¡£ÄÇÈôºó¶Ë·þÎñÆ÷ÕæµÄ³öÏÖÎÊÌâÔõô°ìÄØ£¿ÉÏÎÄҲ˵ÁË£¬¿ÉÒÔ½èÖúproxy_connect_timeoutºÍproxy_read_timeout½øÐпØÖÆ¡£
ÏÂÃæ½éÉÜhttp proxyÄ£¿éÖеÄÏà¹ØÖ¸Á
proxy_next_upstream
Óï·¨£º proxy_next_upstream [error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off]
È·¶¨ÔÚºÎÖÖÇé¿öÏÂÇëÇó½«×ª·¢µ½ÏÂÒ»¸ö·þÎñÆ÷¡£×ª·¢ÇëÇóÖ»·¢ÉúÔÚûÓÐÊý¾Ý´«µÝµ½¿Í»§¶ËµÄ¹ý³ÌÖС£
proxy_connect_timeout
ºó¶Ë·þÎñÆ÷Á¬½ÓµÄ³¬Ê±Ê±¼ä_·¢ÆðÎÕÊֵȺòÏìÓ¦³¬Ê±Ê±¼ä
proxy_read_timeout
Á¬½Ó³É¹¦ºó_µÈºòºó¶Ë·þÎñÆ÷ÏìӦʱ¼ä_ÆäʵÒѾ½øÈëºó¶ËµÄÅŶÓÖ®ÖеȺò´¦Àí£¨Ò²¿ÉÒÔ˵ÊǺó¶Ë·þÎñÆ÷´¦ÀíÇëÇóµÄʱ¼ä£©
proxy_send_timeout
ºó¶Ë·þÎñÆ÷Êý¾Ý»Ø´«Ê±¼ä_¾ÍÊÇÔڹ涨ʱ¼äÖ®ÄÚºó¶Ë·þÎñÆ÷±ØÐë´«ÍêËùÓеÄÊý¾Ý
proxy_pass
Õâ¸öÖ¸ÁîÉèÖñ»´úÀí·þÎñÆ÷µÄµØÖ·ºÍ±»Ó³ÉäµÄURI
¿ªÊ¼²âÊÔ
Çé¿ö1£ººó¶Ë³ÌÐòÖ´ÐÐʱ¼ä³¬¹ý»òµÈÓÚproxy_read_timeoutÉèÖÃÖµ£¬max_fails=0 ¹Ø±Õºó¶Ë·þÎñÆ÷½¡¿µ¼ì²é¡£
NginxÅäÖÃÐÞ¸ÄÄÚÈÝ server 192.168.108.163 max_fails = 0;server 192.168.108.164 max_fails = 0;
proxy_next_upstream error timeout
proxy_read_timeout 2s
ºó¶Ëweb·þÎñÆ÷ Web1 test.php Web2 test.php <?php
header('RS:Web1');
$t = 2;
sleep($t);
echo "sleep {$t}s<br>";
echo "web-1<br>";
?> <?php
header('RS:Web2');
$t = 5;
sleep($t);
echo "sleep {$t}s<br>";
echo "web-2<br>";
?> ±¸×¢£º
ÎÒÕâÀïµÄÁ½Ì¨ºó¶Ëweb·þÎñÆ÷£¬ËûÃǵÄÖ÷Ò³Îļþ¾ùΪһ¸ötest.php³ÌÐò£¬¸Ã³ÌÐò·Ö±ðsleepÁË2ÃëºÍ5Ã룬µÈÓںͳ¬¹ýÁË proxy_read_timeoutµÄʱ¼ä£¬[max_fails=0] ¼´¹Ø±Õºó¶Ë·þÎñÆ÷½¡¿µ¼ì²é¡£[proxy_next_upstream error timeout] ˵Ã÷Åöµ½´íÎó»ò³¬Ê±µÄÇé¿öÇе½ÏÂÒ»¸öºó¶Ë·þÎñÆ÷¡£Èç´ËÉèÖúóÀûÓÃcurlÃüÁî¶Ônginx·¢ÆðÁ¬½ÓÇëÇ󣬿´nginx»á×÷ºÎ·´Ó¦¡£
²âÊÔ¿ªÊ¼£º£¨1£©curl -I -w %{time_total}:%{time_connect}:%{time_starttransfer} www.test.com/test.php
HTTP/1.1 504 Gateway Time-out
Server: nginx/0.7.65
Date: Tue, 18 May 2010 02:43:08 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 183
Connection: keep-alive
4.008:0.002:4.007
˵Ã÷£º
Á¬ÐøÇëÇó3´ÎºóµÃµ½µÄhttp·µ»Ø½á¹ûÊÇÒ»ÑùµÄ£¬¾ùΪ504 Gateway Time-out ´íÎó¡£ÕâÖÖÇé¿öÖ»ÓÐÔÚºó¶Ë·þÎñÆ÷¶¼ÓÐÎÊÌâµÄʱ²Å»á³öÏÖÕâ¸ö´íÎ󣬺ÜÏÔÈ»ÎÒÕâÀïµÄproxy_read_timeoutÉèÖõÄʱ¼äÌ«¶Ì£¬ºó¶Ë³ÌÐò»¹Ã»À´µÃ¼° °Ñ³ÌÐòÖ´ÐÐÍ꣬nginx¾ÍÆȲ»¼°´ýµÄ½«ÇëÇó˦¸øupstream¶¨ÒåµÄÁíһ̨·þÎñÆ÷ÉÏÁË£¬µ±·¢ÏÖÁíÍâһ̨·þÎñÆ÷ͬÑù2ÃëûÓзµ»Øºó£¬nginxÕâ»ØûÓÐ ·þÎñÆ÷¿ÉÓã¬Ö»Óзµ»Ø504 Gateway Time-out ¡£ÕâÒ²ÊÇΪʲô×îºóµÄtime_totalʱ¼äÊÇ4Ãë¡££¨¾²é¿´Á½Ì¨web·þÎñÆ÷µÄ·ÃÎÊÈÕÖ¾µÃÖª£¬¾ùÓÐÒ»Ìõ·ÃÎʼǼ£¬ÇÒ·µ»Ø´úÂëΪ200£¬ËµÃ÷nginx ȷʵÀ´¹ý£¬µ«Ã»Óеȵ½Ö´ÐÐÍê³É¾Í´Ò´ÒµÄÀëÈ¥ÁË£©Èç¹ûÎÒÓÐ3̨·þÎñÆ÷£¬ÔÚ±£Ö¤Èκβ»±äµÄÇé¿öÏ£¬time_totalʱ¼äÒ»¶¨»áÊÇ6Ã룬ÒòΪnginx»áÒ» ¸ö½ÓÒ»¸öµÄ½«3̨·þÎñÆ÷¶¼×ßÒ»±é¡£
-----------------------------------------------------------------------------------------------------------------------
ºÃÁË£¬È·ÈÏÊÇÎÒproxy_read_timeoutÉèÖÃʱ¼äÌ«¶Ìºó£¬ÎÒ½«ËüµÄÖµÉèÖÃΪ3Ã룬ÔÙͨ¹ýcurlÃüÁî·ÃÎÊ£º
£¨2£©curl -I -w %{time_total}:%{time_connect}:%{time_starttransfer} www.test.com/test.php
HTTP/1.1 200 OK
Server: nginx/0.7.65
Date: Tue, 18 May 2010 03:07:58 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.1.6
RS: Web1
5.042:0.005:5.042
˵Ã÷£ºÍ¨¹ý3´ÎÁ¬ÐøÇëÇ󣬵õ½µÄ½á¹ûÊÇÒ»ÑùµÄ£¬RS:Web1 Ò²¾ÍÊÇ˵ÎÒÕâÈý´ÎµÄÇëÇó¶¼Ë¦µ½ÁËweb1ÉÏ¡£µ«ÎÒweb1ÖеijÌÐòÖ»ÐèÒª2Ãëºó¾Í¿ÉÒÔ·µ»Ø½á¹û£¬µ«ÎªÊ²Ã´ÎÒͨ¹ýnginx´úÀíºóʱ¼ä×ÜÊÇÎÒµÄ ³ÌÐòÖ´ÐÐʱ¼ä+proxy_read_timeoutʱ¼äÄØ£¿
-----------------------------------------------------------------------------------------------------------------------
¼ÌÐø½«proxy_read_timeoutÉèÖÃΪ4s
£¨3£©curl -I -w %{time_total}:%{time_connect}:%{time_starttransfer} www.test.com/test.php
HTTP/1.1 200 OK
Server: nginx/0.7.65
Date: Tue, 18 May 2010 03:15:25 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.1.6
RS: Web1
6.004:0.000:6.004
Èý´ÎÇëÇóºó½á¹ûÒ²ÊÇÒ»Ñù£¬Õâ´Î»¨µÄʱ¼ä¸ü³¤ÁË£¬µ«È·ÊµÊdzÌÐòÖ´ÐÐʱ¼ä+proxy_read_timeout ʱ ¼ä¡£µ«ÎªÊ²Ã´Ã¿´Î¶¼ÐèÒª6ÃëÄØ£¿°´ÕÕupstreamÖж¨ÒåµÄȨÖØÓ¦¸ÃÊÇƽ·ÖÇëÇóµÄ£¬×îÆðÂëÓ¦¸ÃÓÐ2ÃëµÄʱºò¡£¾¹ý·ÖÎöµÃÖª£º×îÖÕ·µ»Ø¸øÓû§ÇëÇóµÄÊÇ web1£¬ÄÇôµ±ÔÙ´ÎÇëÇóµÄʱºòÒ»¶¨»á·Ö¸øweb2£¬ÓÉÓÚweb2ÊÇsleep 5ÃëµÄ£¬Òò´Ë¾¹ýproxy_read_timeoutµÄʱ¼ä£¨4s£©ºó»áÌøµ½web1£¬½á¹û»¹ÊÇweb1·µ»ØµÄÇëÇó£¬Ëù»¨Ê±¼ä¾ÍÊÇnginxÔÚweb2 µÈ´ýµÄʱ¼ä+web1Ö´ÐеÄʱ¼ä£¬ÒÔ´ËÀàÍÆÏÂÒ»´Înginx×ÔÈ»µÄ»¹»á·Ö¸øweb2¡¡¡£Èç¹ûÓиü¶àµÄºó¶Ëweb£¬ÔòÅжÏÏÂÒ»¸öÇëÇó·þÎñÆ÷¿ÉÒÔ¿´µ±Ç°·µ»Ø ¸ø×îÖÕÓû§µÄÊÇÄÇ̨·þÎñÆ÷£¬È»ºó¸ù¾ÝupstreamÖж¨ÒåµÄ˳ÐòÏòϲéѯ£¨È¨ÖØÒ»ÑùµÄÇé¿ö£©
½áÂÛ£º£¨1£©ÉÏÃæµÄÈý´Î²âÊÔ·Ö±ð½«proxy_read_timeoutµÄÖµÉèÖÃΪ2s¡¢3s¡¢4sµÄÇé¿ö½øÐеġ£×îÖյIJâÊÔ½á¹ûÒ²¶¼ÔÚºóÃæ×öÁ˽âÊÍÓë˵ Ã÷¡£ÓÉÓÚÎҹرÕÁ˺ó¶Ë·þÎñÆ÷µÄ½¡¿µ¼ì²é£¨max_fails=0£©Òò´ËÅжϺó¶Ë·þÎñÆ÷Çé¿öµÄΨһÒÀ¾Ý±ãÊÇproxy_read_timeout²ÎÊý£¬Èç¹û Õâ¸ö²ÎÊýÉèÖõùýС£¬µ«ºó¶Ë³ÌÐòµÄÖ´Ðлò¶à»òÉٻᳬ¹ýÕâ¸öʱ¼äµÄ»°£¬ÕâÖÖÇé¿önginxµÄЧÂÊÊǷdz£µÍµÄ¡£
£¨2£©ÉÏÃæµÄ²âÊÔ¶¼ÊǺó¶Ë·þÎñÆ÷Õý³£µ«Ö´Ðг¬Ê±µÄÇé¿öÏÂnginx¸ù¾Ýproxy_read_timeoutºÍ proxy_next_upstreamµÄÖµÀ´Ñ¡ÔñÏÂÒ»¸ö·þÎñÆ÷£¬ÄÇÈç¹ûÎÒºó¶Ë·þÎñÆ÷Ö±½Ó±¨´íµÄÇé¿öÄØ£¿¿ÉÒÔÏëµ½Èç¹û±¨´íÐÅÏ¢ÔÚ proxy_next_upstream ÖÐÓж¨ÒåµÄ»°nginx»¹»áÌøµ½ÏÂһ̨·þÎñÆ÷¡£·ñÔòÖ±½Ó½«±£´æÐÅÏ¢·µ»Ø¸ønginx´Ó¶ø×îÖÕ³ÊÏ׸øÓû§
Çé¿ö2£º´ò¿ªºó¶Ë·þÎñÆ÷½¡¿µ¼ì²é£¬²âÊÔ³ÌÐòÖ´ÐÐʱ¼ä³¬¹ý»òµÈÓÚproxy_read_timeoutÖµ»òºó¶Ë·þÎñÆ÷Ö±½Ó±¨´íµÄÇé¿ö
NginxÅäÖÃÐÞ¸ÄÄÚÈÝ | server 192.168.108.163 max_fails = 1; server 192.168.108.164 max_fails = 1; proxy_next_upstream error timeout http_500 http_502 http_504 proxy_read_timeout 2s |
ºó¶Ëweb·þÎñÆ÷ | |
Web1 test.php | Web2 test.php |
<?php header('RS:Web1'); $t = 2; sleep($t); echo "sleep {$t}s<br>"; echo "web-1<br>"; ?> |
<?php header('RS:Web2'); header('http/1.1 500 Internal Server Error '); #$t = 5; #sleep($t); echo "sleep {$t}s<br>"; echo "web-2<br>"; ?> |
±¸×¢£º ¿ªÆôÁ˺ó¶Ë·þÎñÆ÷½¡¿µ¼ì²é |
|
²âÊÔ¿ªÊ¼£º £¨1£©Á¬Ðø²âÊÔÈý´Î½á¹ûÈçÏ£º curl -I -w %{time_total}:%{time_connect}:%{time_starttransfer} www.test.com/test.php 2.005:0.001:2.005 curl -I -w %{time_total}:%{time_connect}:%{time_starttransfer} www.test.com/test.php 0.001:0.001:0.001 curl -I -w %{time_total}:%{time_connect}:%{time_starttransfer} www.test.com/test.php 2.005:0.001:2.005 ˵Ã÷£º µÚ1´ÎÇëÇóËùÓÃʱ¼äÊÇ2Ã룬web1Ö´Ðг¬Ê±£¬web2·µ»ØÁË500´íÎó£¬upstreamûÓиü¶àµÄºó¶Ë£¬Òò´ËnginxÖ±½Ó°Ñ504ÈÓ³öÀ´ÁË£¬Í¬Ê±±ê¼Çweb2£¬web1²»¿ÉÓᣲ鿴ºó¶Ë2̨web·þÎñÆ÷µÄ·ÃÎÊÈÕÖ¾£¬¾ùÓÐnginx´úÀíµÄ·ÃÎʼǼ¡£ £¨2£©ÐÞ¸Ä proxy_read_timeout 3s Á¬Ðø·ÃÎÊ6´Îºó½á¹ûÒÔ¼°2̨web·þÎñÆ÷µÄÈÕÖ¾Çé¿ö 2.003:0.001:2.002 ·ÃÎÊÈÕÖ¾ Web1 Web2 [18/May/2010:15:30:00 ˵Ã÷£º ÓÉ·ÃÎÊÈÕÖ¾¿ÉÖª£º |
|
½áÂÛ£º £¨1£©proxy_next_upstream²ÎÊýºÜÓÐÓã¬Ëû¿ÉÒÔ±ÜÃâºÜ¶à´íÎó |
ÍƼöÐÅÏ¢
- linuxÃüÁîѧϰ±Ê¼Ç£¨11£©£ºnlÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨5£©£ºrmÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨4£©£ºmkdirÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨1£©£ºlsÃüÁî
- ½«CentosµÄyumÔ´¸ü»»Îª¹úÄڵİ¢ÀïÔÆÔ´
- ʹÓÃNginxÌí¼Óheader·ÀÖ¹ÍøÒ³±»frame
- linuxϼÓËÙscp´«Êä´óÎļþµÄËÙ¶È
- linuxϵͳÉ϶ÔnginxÈÕÖ¾·Ö¸î´¦Àí
- lnmp/nginxϵͳÕæÕýÓÐЧµÄͼƬ·ÀµÁÁ´ÍêÕûÉèÖÃÏê½â
- Í»ÆÆÊ®Íò²¢·¢µÄNginxµÄÅäÖü°ÓÅ»¯
ÈÈÃÅÐÅÏ¢
- nohup: redirecting stderr to stdou....
- ʹÓÃlog_formatΪNginx·þÎñÆ÷ÉèÖøüÏêϸµÄÈÕÖ¾¸ñʽ
- jquery easyUI--dataGrid-Json
- [Ô´´]·ÂGoogle Reader¡¢ÐÂÀË΢²©¡¢ÌÚѶ΢²©µ....
- ÀûÓÃKeepalived+mysql¹¹½¨¸ß¿ÉÓÃMySQLË«Ö÷×Ô¶....
- Nginx+keepalivedʵÏÖ¸ºÔؾùºâºÍË«»úÈȱ¸¸ß¿ÉÓÃ
- jqueryʵÏÖÒ³Ãæ¼ÓÔؽø¶ÈÌõ
- Rolling cURL: PHP²¢·¢×î¼Ñʵ¼ù
- codeigniter ·ÓÉÖÕ¼«ÓÅ»¯(url rewrite)
- linuxÏÂÉèÖÃsshÎÞÃÜÂëµÇ¼
×î½ü¸üÐÂ
- ²éÕÒ²¢É¾³ý.svnĿ¼Îļþ
- redis ÆßÖÖÊý¾ÝÀàÐ͵ÄʹÓó¡¾°
- linux ÏÂÎļþ¸´ÖƵ½windowsÏÂÂÒÂëµÄ½â¾ö°ì·¨
- nginx³öÏÖ502 upstream sent too big he....
- linuxÏÂsudoÅäÖÃÏê½â
- linuxÃüÁîѧϰ±Ê¼Ç£¨15£©£ºtailÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨14£©£ºheadÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨13£©£ºlessÃüÁî
- linuxÃüÁîѧϰ±Ê¼Ç£¨12£©£ºmoreÃüÁî
- ¼ÓÃÜËã·¨±È½Ï3DES AES RSA ECC MD5 SHA1µÈ
ÆÀÂÛ