Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Íæ×ª Nginx Ö®£ºÊ¹Óà Lua À©Õ¹ Nginx ¹¦ÄÜ
 
×÷Õߣºleejun2005
  2171  次浏览      27
 2019-10-15
 
±à¼­ÍƼö:
ÎÄÕ¼òµ¥µÄ¶ÔNginx ºÍLua ×öÁ˽éÉÜ£¬ÒÔÒ»¸ö Nginx + Lua ²âÊÔµÄÀý×Ó²ûÊöÁËnginxÖ´Ðв½ÖèÓëngx_lua ÔËÐÐÖ¸Áî¡£
±¾ÎÄÀ´×ÔÓÚ´óÊý¾Ý֮·£¬ÓÉ»ðÁú¹ûÈí¼þÌÒ×ӱ༭¡¢ÍƼö¡£

1¡¢Nginx ¼ò½é

Nginx ×÷Ϊһ¿îÃæÏòÐÔÄÜÉè¼ÆµÄHTTP·þÎñÆ÷£¬Ïà½ÏÓÚApache¡¢lighttpd¾ßÓÐÕ¼ÓÐÄÚ´æÉÙ£¬Îȶ¨ÐԸߵÈÓÅÊÆ¡£ÆäÁ÷ÐжÈÔ½À´Ô½¸ß£¬Ó¦ÓÃÒ²Ô½À´Ô½¹ã·º£¬³£¼ûµÄÓ¦ÓÃÓУºÍøÒ³·þÎñÆ÷¡¢·´Ïò´úÀí·þÎñÆ÷ÒÔ¼°µç×ÓÓʼþ£¨IMAP/POP3£©´úÀí·þÎñÆ÷£¬¸ß²¢·¢´óÁ÷Á¿Õ¾µã³£ÓÃÀ´×ö½ÓÈë²ãµÄ¸ºÔؾùºâ£¬»¹Óзdz£³£¼ûµÄÓ÷¨ÊÇ×÷ΪÈÕÖ¾²É¼¯·þÎñÆ÷µÈ¡£

Nginx ÕûÌå²ÉÓÃÄ£¿é»¯Éè¼Æ£¬ÓзḻµÄÄ£¿é¿âºÍµÚÈý·½Ä£¿é¿â£¬ÅäÖÃÁé»î¡£ÆäÖÐÄ£¿é»¯Éè¼ÆÊÇnginxµÄÒ»´óÂôµã£¬ÉõÖÁhttp·þÎñÆ÷ºËÐŦÄÜÒ²ÊÇÒ»¸öÄ£¿é¡£Òª×¢ÒâµÄÊÇ£ºnginxµÄÄ£¿éÊǾ²Ì¬µÄ£¬Ìí¼ÓºÍɾ³ýÄ£¿é¶¼Òª¶Ônginx½øÐÐÖØÐ±àÒ룬ÕâÒ»µãÓëApacheµÄ¶¯Ì¬Ä£¿éÍêÈ«²»Í¬¡£²»¹ýºóÀ´ÌÔ±¦×öÁ˶þ´Î¿ª·¢¿ªÔ´µÄ tengine ÊÇÖ§³Ö ¹Ù·½ËùÓÐµÄ HTTP Ä£¿é¶¯Ì¬¼ÓÔØ¶ø²»±ØÖØÐ±àÒë Nginx£¬³ý·ÇÊǵÚÈý·½Ä£¿é²ÅÐèÒªÖØÐ±àÒë¡£Òò´Ë£¬ÔÚÉú²ú»·¾³ÖУ¬ÍƼöÓÃÌÔ±¦¿ªÔ´µÄ tengine£¬±¾ÎÄÒ²ÒÔ tengine ×÷ΪʾÀý¡£

ËäÈ» Nginx ÓÐÈç´ËÇ¿´óµÄÐÔÄÜÒÔ¼°ÖÚ¶àµÄÈý·½Ä£¿éÖ§³Ö£¬µ«Ã¿´ÎÖØÐ±àÒëÒÔ¼°Ñ°ÕÒÈý·½Ä£¿é¶ÔÉú²ú»·¾³À´Ëµ»¹ÊDz»¿É½ÓÊܵģ¬ÐÒÔ˵ÄÊÇ£¬Nginx ËüÊÇÖ§³Ö¿Í»§×Ô¼º Lua ½Å±¾±à³ÌÀ©Õ¹ÏàÓ¦µÄ¹¦Äܵ쬶øÇÒ¿ÉÒÔÈȼÓÔØ£¬Õâ¾Í¸øÉú²ú»·¾³´øÀ´ÁËÎÞÏÞ¿ÉÄÜ¡£±ÈÈçÎÒÏÖÔÚÏëÒªÖ±½ÓÓÃNginx + redis ×ö·´ÅÀ³æºÍƵÂÊÏÞÖÆ£¬Nginx + Kafka ×öÈÕÖ¾µÄʵʱÁ÷´¦ÀíµÈµÈ¡£

×¢£ºlvs ºÍ nginx µÄ¸ºÔؾùºâÇø±ð£º

LVS£ºLinux Virtual Server£¬»ùÓÚIPµÄ¸ºÔؾùºâºÍ·´Ïò´úÀí¼¼Êõ£¬ËùÒÔËü¼¸ºõ¿ÉÒÔ¶ÔËùÓÐÓ¦ÓÃ×ö¸ºÔؾùºâ£¬°üÀ¨http¡¢Êý¾Ý¿â¡¢ÔÚÏßÁÄÌìÊҵȵȣ¬LVS¹¤×÷ÔÚ4²ã£¬ÔÚLinuxÄÚºËÖÐ×÷ËIJ㽻»»£¬Ö»»¨128¸ö×ֽڼǼһ¸öÁ¬½ÓÐÅÏ¢£¬²»Éæ¼°µ½Îļþ¾ä±ú²Ù×÷£¬¹ÊûÓÐ65535×î´óÎļþ¾ä±úÊýµÄÏÞÖÆ¡£LVSÐÔÄܸܺߣ¬¿ÉÒÔÖ§³Ö100¡«400ÍòÌõ²¢·¢Á¬½Ó¡£¿¹¸ºÔØÄÜÁ¦Ç¿¡¢Êǹ¤×÷ÔÚÍøÂç4²ãÖ®ÉϽö×÷·Ö·¢Ö®Óã¬Ã»ÓÐÁ÷Á¿µÄ²úÉú£¬Õâ¸öÌØµãÒ²¾ö¶¨ÁËËüÔÚ¸ºÔؾùºâÈí¼þÀïµÄÐÔÄÜ×îÇ¿µÄ£¬¶ÔÄÚ´æºÍcpu¡¢IO×ÊÔ´ÏûºÄ±È½ÏµÍ¡£

Nginx£º»ùÓÚHTTPµÄ¸ºÔؾùºâºÍ·´Ïò´úÀí·þÎñÆ÷£¬Nginx¹¤×÷ÔÚÍøÂçµÄ7²ã£¬ËùÒÔËü¿ÉÒÔÕë¶ÔhttpÓ¦Óñ¾ÉíÀ´×ö·ÖÁ÷²ßÂÔ£¬±ÈÈçÕë¶ÔÓòÃû¡¢URL¡¢Ä¿Â¼½á¹¹µÈ£¬Ïà±ÈÖ®ÏÂLVS²¢²»¾ß±¸ÕâÑùµÄ¹¦ÄÜ£¬Äܹ»ºÜºÃµØÖ§³ÖÐéÄâÖ÷»ú£¬¿ÉÅäÖÃÐÔºÜÇ¿£¬´óÔ¼ÄÜÖ§³Ö3¡«5ÍòÌõ²¢·¢Á¬½Ó¡£

2¡¢Lua ¼ò½é

Lua ÊÇÒ»¸ö¼ò½à¡¢ÇáÁ¿¡¢¿ÉÀ©Õ¹µÄ½Å±¾ÓïÑÔ£¬Ò²ÊǺųÆÐÔÄÜ×î¸ßµÄ½Å±¾ÓïÑÔ£¬ÓÃÔںܶàÐèÒªÐÔÄܵĵط½£¬±ÈÈ磺ÓÎÏ·½Å±¾£¬nginx£¬wiresharkµÄ½Å±¾£¬µ±Äã°ÑËûµÄÔ´ÂëÏÂÏÂÀ´±àÒëºó£¬Äã»á·¢ÏÖ½âÊÍÆ÷¾ÓÈ»²»µ½200k£¬·Ç³£±ä̬¡£¡£¡£ºÜ¶àÓ¦ÓóÌÐòʹÓÃLua×÷Ϊ×Ô¼ºµÄǶÈëʽ½Å±¾ÓïÑÔ£¬ÒÔ´ËÀ´ÊµÏÖ¿ÉÅäÖÃÐÔ¡¢¿ÉÀ©Õ¹ÐÔ¡£

LuaÔ­ÉúÖ§³ÖµÄÊý¾ÝÀàÐͷdz£Ö®ÉÙ£¬ËüÖ»ÌṩÁËnil¡¢Êý×Ö£¨È±Ê¡ÊÇË«¾«¶È¸¡µãÊý£¬¿ÉÅäÖã©¡¢²¼¶ûÁ¿¡¢×Ö·û´®¡¢±í¡¢×Ó³ÌÐò¡¢Ð­³Ì£¨coroutine£©ÒÔ¼°Óû§×Ô¶¨ÒåÊý¾ÝÕâ8ÖÖ¡£µ«ÊÇÆä´¦Àí±íºÍ×Ö·û´®µÄЧÂʷdz£Ö®¸ß£¬¼ÓÉÏÔª±íµÄÖ§³Ö£¬¿ª·¢Õß¿ÉÒÔ¸ßЧµÄÄ£Äâ³öÐèÒªµÄ¸´ÔÓÊý¾ÝÀàÐÍ£¨±ÈÈ缯ºÏ¡¢Êý×éµÈ£©¡£LuaÊÇÒ»¸ö¶¯Ì¬ÈõÀàÐÍÓïÑÔ£¬Ö§³ÖÔöÁ¿Ê½À¬»øÊÕ¼¯²ßÂÔ¡£ÓÐÄÚ½¨µÄ£¬Óë²Ù×÷ϵͳÎ޹صÄЭ×÷ʽ¶àỊ̈߳¨coroutine£©Ö§³Ö¡£Ëü»¹¿ÉÒÔÓÃÓÚǶÈëʽӲ¼þ£¬²»½ö¿ÉÒÔǶÈëÆäËû±à³ÌÓïÑÔ£¬¶øÇÒ¿ÉÒÔǶÈë΢´¦ÀíÆ÷ÖС£

3¡¢nginxÖ´Ðв½Öè

nginxÔÚ´¦Àíÿһ¸öÓû§ÇëÇóʱ£¬¶¼Êǰ´ÕÕÈô¸É¸ö²»Í¬µÄ½×¶ÎÒÀ´Î´¦ÀíµÄ£¬ÓëÅäÖÃÎļþÉϵÄ˳ÐòûÓйØÏµ£¬ÏêϸÄÚÈÝ¿ÉÒÔÔĶÁ¡¶ÉîÈëÀí½ânginx:Ä£¿é¿ª·¢Óë¼Ü¹¹½âÎö¡·Õâ±¾Ê飬ÕâÀïÖ»×ö¼òµ¥½éÉÜ£»

£¨1£©post-read

¶ÁÈ¡ÇëÇóÄÚÈݽ׶Σ¬nginx¶ÁÈ¡²¢½âÎöÍêÇëÇóÍ·Ö®ºó¾ÍÁ¢¼´¿ªÊ¼ÔËÐУ»

£¨2£©server-rewrite

serverÇëÇóµØÖ·ÖØÐ´½×¶Î£»

£¨3£©find-config

ÅäÖòéÕҽ׶Σ¬ÓÃÀ´Íê³Éµ±Ç°ÇëÇóÓëlocationÅäÖØ¿éÖ®¼äµÄÅä¶Ô¹¤×÷£»

£¨4£©rewrite

locationÇëÇóµØÖ·ÖØÐ´½×¶Î£¬µ±ngx_rewriteÖ¸ÁîÓÃÓÚlocationÖУ¬¾ÍÊÇÔÙÕâ¸ö½×¶ÎÔËÐеģ»

£¨5£©post-rewrite

ÇëÇóµØÖ·ÖØÐ´Ìá½»½×¶Î£¬µ±nginxÍê³Érewrite½×¶ÎËùÒªÇóµÄÄÚ²¿Ìø×ª¶¯×÷£¬Èç¹ûrewrite½×¶ÎÓÐÕâ¸öÒªÇóµÄ»°£»

£¨6£©preaccess

·ÃÎÊȨÏÞ¼ì²é×¼±¸½×¶Î£¬ngx_limit_reqºÍngx_limit_zoneÔÚÕâ¸ö½×¶ÎÔËÐУ¬ngx_limit_req¿ÉÒÔ¿ØÖÆÇëÇóµÄ·ÃÎÊÆµÂÊ£¬ngx_limit_zone¿ÉÒÔ¿ØÖÆ·ÃÎʵIJ¢·¢¶È£»

£¨7£©access

ȨÏÞ¼ì²é½×¶Î£¬ngx_accessÔÚÕâ¸ö½×¶ÎÔËÐУ¬ÅäÖÃÖ¸Áî¶àÊÇÖ´ÐзÃÎÊ¿ØÖÆÏà¹ØµÄÈÎÎñ£¬Èç¼ì²éÓû§µÄ·ÃÎÊȨÏÞ£¬¼ì²éÓû§µÄÀ´Ô´IPÊÇ·ñºÏ·¨£»

£¨8£©post-access

·ÃÎÊȨÏÞ¼ì²éÌá½»½×¶Î£»

£¨9£©try-files

ÅäÖÃÏîtry_files´¦Àí½×¶Î£»

£¨10£©content

ÄÚÈݲúÉú½×¶Î£¬ÊÇËùÓÐÇëÇó´¦Àí½×¶ÎÖÐ×îÎªÖØÒªµÄ½×¶Î£¬ÒòΪÕâ¸ö½×¶ÎµÄÖ¸Áîͨ³£ÊÇÓÃÀ´Éú³ÉHTTPÏìÓ¦ÄÚÈݵģ»

£¨11£©log

ÈÕ־ģ¿é´¦Àí½×¶Î£»

ͼ£ºNginx Ä£¿éÖ´ÐÐ˳ÐòÓë½×¶Î

4¡¢ngx_lua ÔËÐÐÖ¸Áî

ngx_luaÊôÓÚnginxµÄÒ»²¿·Ö£¬ËüµÄÖ´ÐÐÖ¸Áî¶¼°üº¬ÔÚnginxµÄ11¸ö²½ÖèÖ®ÖÐÁË£¬ÏàÓ¦µÄ´¦Àí½×¶Î¿ÉÒÔ×ö²åÈëʽ´¦Àí£¬¼´¿É²å°Îʽ¼Ü¹¹£¬²»¹ýngx_lua²¢²»ÊÇËùÓн׶ζ¼»áÔËÐеģ»ÁíÍâÖ¸Áî¿ÉÒÔÔÚhttp¡¢server¡¢server if¡¢location¡¢location if¼¸¸ö·¶Î§½øÐÐÅäÖãº

5¡¢°²×° tengine ÒÔ¼° Lua À©Õ¹

£¨1£©ÏȰ²×°NginxÐèÒªµÄһЩÀà¿â£º

yum install gcc
yum install gcc-c++

×¢£º´Ë²½ÖèÖ»ÊÇÔÚÄãµÄϵͳûÓа²×° gcc/gcc-c++ µÄÇé¿öϲÅÐèÒª×ÔÐбàÒë°²×°¡£

£¨2£©±àÒë°²×°¿âLuaJit-2.0.3£º

./configure --prefix=/usr/local/luajit
make PREFIX=/usr/local/luajit
make install PREFIX=/usr/local/luajit

ÔÚ/etc/profileÎļþÖÐÔö¼Ó»·¾³±äÁ¿£¬²¢Ö´ÐÐ source /etc/profile ʹ֮ÉúЧ£¨·Ç±ØÐ룩£º

export LUAJIT_LIB=/usr/install/luajit/lib
export LUAJIT_INC=/usr/install/luajit/include/luajit-2.0

×¢£º´Ë²½ÖèÖ»ÊÇÔÚÄãµÄϵͳûÓа²×° LuaJIT µÄÇé¿öϲÅÐèÒª×ÔÐбàÒë°²×°¡£

£¨3£©ÏÂÔØÄ£¿éÒÀÀµ pcre-8.34¡¢zlib-1.2.8¡¢ngx_devel_kit ºÍ lua-nginx-module£¬×îºó±àÒëNginx£º

ÍêÕûµÄ²ÎÊý¿ÉÄÜÕâÑù£º

nginx -V
Tengine version: Tengine/2.1.0 (nginx/1.6.2)
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx/ --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-cc-opt='-O2 -g -m64 -mtune=generic' --with-pcre=../pcre-8.33 --with-zlib=../zlib-1.2.8 --with-openssl=../openssl-1.0.1l

ÏÈ ./configure ¸÷ÖÖÅäÖòÎÊýÒÔ¼°Ä£¿é·¾¶£¬µ«ÎÒÕâÀïÖ»ÊÇÓÃÀ´²âÊԾ;«¼òÁ˲»ÉÙ²ÎÊý£º

./configure --prefix=/opt/soft/nginx --with-pcre=/root/soft/pcre-8.37 --with-zlib=/root/soft/zlib-1.2.8 --with-openssl=/root/soft/openssl-1.0.1p --add-module=/root/soft/lua-nginx-module-master --add-module=/root/soft/ngx_devel_kit-master --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp

È»ºó make¡¢make install ¼´¿É¡£

£¨5£©Æô¶¯Nginx sbin/nginx£¬ä¯ÀÀÆ÷ÊäÈëhttp://localhost²âÊÔ

ÐèҪעÒâµÄÊÇ£º

£¨1£©--with-pcre=/root/soft/pcre-8.37 --with-zlib=/root/soft/zlib-1.2.8 Ö¸ÏòµÄÊÇÔ´Âë·¾¶£¬¶ø·Ç±àÒëºóµÄ·¾¶£¬·ñÔò make »á±¨£º

cd /usr/local/pcre \
&& if [ -f Makefile ]; then make distclean; fi \
&& CC="gcc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
./configure --disable-shared
/bin/sh: ./configure: No such file or directory
make[1]: *** [/usr/local/pcre/Makefile] Error 127
make[1]: Leaving directory `/software/nginx-0.8.53'
make: *** [build] Error 2

ÒòΪ ./configure --help ¿´Ò»Ï°ïÖú˵Ã÷£º

--with-pcre=DIR set path to PCRE library sources

set path to PCRE library sources ÊÇÈÃÄãÉèÖõ½Ô´ÂëĿ¼£¬¶ø²»ÊDZàÒë°²×°ºóµÄĿ¼

£¨2£©pcre¡¢zlib¡¢openssl µÈϵͳ¿âÈç¹ûϵͳûÓм¯³É×Ô´ø£¬Ò»¶¨Òªµ¥¶À±àÒë°²×°£¬¶ø lua-nginx-module¡¢ngx_devel_kit µÈ²å¼þÄ£¿éÖ»ÐèÒªÖ¸Ô´Âë·¾¶¸ø nginx Ò»Æð±àÒë¼´¿É£¬²»ÐèÒªµ¥¶À±àÒë¡£

6¡¢Ò»¸ö Nginx + Lua ²âÊÔµÄÀý×Ó

user work work;
worker_processes 7;
error_log /opt/data1/logs/nginx/error.log;
pid /var/run/nginx.pid;
worker_rlimit_nofile 800000;
events {
use epoll;
worker_connections 65535;
}
http {

server {
listen 80;
set $idTest "idTest_11111111111" ;
log_format tracklog '$idTest $msec $remote_addr - $remote_user [$time_local] $request '
'"$status" resp_body:"$resp_body" --"$ref1"-- '
'"$http_user_agent"';

location ~ /gzip/(.*) {
default_type "text/html";

set $resp_body "";
content_by_lua '
--zlib ½âÂë post gzip Êý¾Ý
local zlib = require "zlib"
local encoding = ngx.req.get_headers()["Content-Encoding"]

if encoding == "gzip" then
ngx.req.read_body()
local body = ngx.req.get_body_data()
ngx.say("++++++++++++++++++++++++++++body data:")
ngx.print(body)
if body then
--ngx.var.resp_body = "55555555555555"
local stream = zlib.inflate()
ngx.var.resp_body = stream(body)
end
end
';

access_log on;
access_log /opt/data1/logs/nginx/pc/track/ooxx.com.access.log tracklog;
}
location ~ /post/(.*) {
default_type "text/html";
lua_need_request_body on;
set $resp_body "";
content_by_lua '
ngx.var.resp_body = ngx.var.request_body
';

access_log on;
access_log /opt/data1/logs/nginx/pc/track/ooxx.com.access.log tracklog;
}


location ~ /lua/(.*) {
default_type "text/html";
set $ref1 "Hello,Nginx & Lua !";
#ÉèÖÃnginx±äÁ¿
set $a $1;
set $b $host;

content_by_lua '
--nginx±äÁ¿
local var = ngx.var
ngx.say("ngx.var.a : ", var.a, "<br/>")
ngx.say("ngx.var.b : ", var.b, "<br/>")
ngx.say("ngx.var[2] : ", var[2], "<br/>")
ngx.var.b = 2;
ngx.say("<br/>")

--ÇëÇóÍ·
ngx.say(ngx.var.httpRef, "<br/>")
local headers = ngx.req.get_headers()
for k,v in pairs(headers) do
if type(v) == "table" then
ngx.say(k, " : ", table.concat(v, ","), "<br/>")
else
ngx.say(k, " : ", v, "<br/>")
end
end
ngx.say("------------headers end-----------", "<br/><br/><br/>")

--getÇëÇóuri²ÎÊý
ngx.say("uri args begin", "<br/>")
local uri_args = ngx.req.get_uri_args()
for k, v in pairs(uri_args) do
if type(v) == "table" then
ngx.say(k, " : ", table.concat(v, ", "), "<br/>")
else
ngx.say(k, ": ", v, "<br/>")
end
end
ngx.say("uri args end", "<br/>")
ngx.say("a: ",ngx.var.arg_a, "<br/>")
ngx.say("b: ",ngx.var.arg_b, "<br/>")
--δ¾­½âÂëµÄÇëÇó uri
local request_uri = headers["Host"] .. "/" .. ngx.var.request_uri;
ngx.say("request_uri : ", request_uri, "<br/>");
--½âÂëºóµÄ uri
local decode_request_uri = headers["Host"] .. "/" .. ngx.unescape_uri(ngx.var.request_uri);
ngx.var.ref1 = decode_request_uri;
ngx.say("decode request_uri : ", decode_request_uri, "<br/>");
--MD5
ngx.say("ngx.md5 : ", ngx.md5("123"), "<br/>")
--http time
ngx.say("ngx.http_time : ", ngx.http_time(ngx.time()), "<br/>")
--ngx.var.http_referer = "*********************"

';

log_format LogFormatv1 '$idTest@$msec@$remote_addr@-@$remote_user@[$time_local]@$request@'
'"$status"@$body_bytes_sent@"$http_referer"@'
'"$http_user_agent"';

access_log on;
access_log /opt/data1/logs/nginx/PCv1/track/ooxx.com.access.log LogFormatv1;
}
}
}

ÐèҪעÒâµÄÊÇÏßÉ쵀 Nginx ¿ÉÄÜÃæ¶ÔµÄÊǸ߲¢·¢³¡¾°£¬¶ÔÓÚ×Ô¼ºµÄ Lua ´úÂë×îºÃ×ö¸öѹÁ¦²âÊÔ£¬±ÈÈ磺

tcpcopy
»òÕß
ab -c100 -n10000 'http://test.abc.com/lua/test%20haha/?a=3&b=4'

7¡¢¹ØÓÚ 64bit Cgywin ϱàÒë°²×° Tengine µÄһЩÎÊÌâ

£¨1£©openSSL ¿â²»Ö§³Ö 64bit Cygwin

cryptlib.c:1:0: ´íÎó£ºÄúÑ¡ÔñµÄ CPU ²»Ö§³Ö x86-64 Ö¸Á
/* crypto/cryptlib.c */
^
cryptlib.c:1:0: ´íÎó£ºÄúÑ¡ÔñµÄ CPU ²»Ö§³Ö x86-64 Ö¸Á
<builtin>: recipe for target 'cryptlib.o' failed
make[3]: *** [cryptlib.o] Error 1
make[3]: Leaving directory '/home/Jun/softs/openssl-1.0.1r/crypto'
Makefile:281: recipe for target 'build_crypto' failed

ÕâÖÖҪô×Ô¼ºÈ¥ÍøÉÏÕÒ²¹¶¡ patch£¬ÒªÃ´»»³É Cygwin 32bit£¬»¹ÓÐÒ»ÖÖ½â¾ö·½°¸¾ÍÊÇ×Ô¼ºÔÚ°²×° Cygwin °üµÄʱºò°Ñ openssl Ò²×°ÉÏ£¬Ò²¾ÍÊÇ˵ѡÔñ°²×°°üµÄʱºò¾¡Á¿×°È«Ò»µã¡£Ê¡µÃºóÐø×Ô¼º×°Óöµ½¸÷ÖÖÎÊÌâ¡£

ÕâÑùÈç¹ûÄã×Ô¼ºÒѾ­×°ÁË openssl ÄÇô¿ÉÒÔÔÚconfigure µÄʱºòÈ¥µôopenssl Ïà¹ØµÄ±àÒëÒÀÀµÑ¡Ï

./configure --with-openssl=/root/soft/openssl-1.0.1p £¨È¥µô¸ÃÏ

£¨2£©nginx Æô¶¯±¨´í£º

nginx: [emerg] the maximum number of files supported by select() is 64

±Ï¾¹ Cygwin »¹ÊÇÒÀÀµ windowsµÄ£¬¸÷ÖÖ²ÎÊýµÃÕë¶Ô windows ÓÅ»¯£¬±ÈÈçÕâ¸ö±¨´íÊÇ˵ĬÈÏÅäÖÃÎļþÀïµÄ worker_connections ²»Äܳ¬¹ý 64 ¸ö£¬Äã¸Ä³É 20 ¼´¿É¡£

events {
use epoll;
worker_connections 65535;
}

±ÈÈçÎÒÕâÀïµÄ±àÒëÅäÖòÎÊýÊÇ£¨×¢ÒâÓÐЩĿ¼¿ÉÄÜÐèÒªÌáǰ×Ô¼º´´½¨£©£º

./configure --prefix=/opt/soft/nginx --with-pcre=/home/Jun/softs/pcre-8.38 --with-zlib=/home/Jun/softs/zlib-1.2.8 --add-module=/home/Jun/softs/ngx_devel_kit-master --add-module=/home/Jun/softs/echo-nginx-module-master --add-module=/home/Jun/softs/form-input-nginx-module-master --add-module=/home/Jun/softs/set-misc-nginx-module-master --add-module=/home/Jun/softs/lua-nginx-module-master --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp

×îºó nginx.conf ÉÔ¼ÓÐÞ¸ÄÈçÏ£¨×¢ÒâÓÐЩĿ¼¿ÉÄÜÐèÒªÌáǰ×Ô¼º´´½¨£©£º

worker_processes 2;

#error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 20;
}

http {

server {
listen 80;

set $idTest "idTest_11111111111" ;

log_format tracklog '$idTest $msec $remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent --"$ref1"-- '
'"$http_user_agent"';

log_format LogFormatv1 '$idTest@$msec@$remote_addr@-@$remote_user@[$time_local]@$request@'
'"$status"@$body_bytes_sent@"$http_referer"@'
'"$http_user_agent"';

access_log on;

location ~ /lua/(.*) {
default_type "text/html";
set $ref1 "Hello,Nginx & Lua !";
#ÉèÖÃnginx±äÁ¿
set $a $1;
set $b $host;

content_by_lua '
--nginx±äÁ¿
local var = ngx.var
ngx.say("ngx.var.a : ", var.a, "<br/>")
ngx.say("ngx.var.b : ", var.b, "<br/>")
ngx.say("ngx.var[2] : ", var[2], "<br/>")
ngx.var.b = 2;
ngx.say("<br/>")

--ÇëÇóÍ·
ngx.say(ngx.var.httpRef, "<br/>")
local headers = ngx.req.get_headers()
for k,v in pairs(headers) do
if type(v) == "table" then
ngx.say(k, " : ", table.concat(v, ","), "<br/>")
else
ngx.say(k, " : ", v, "<br/>")
end
end
ngx.say("------------headers end-----------", "<br/><br/><br/>")

--getÇëÇóuri²ÎÊý
ngx.say("uri args begin", "<br/>")
local uri_args = ngx.req.get_uri_args()
for k, v in pairs(uri_args) do
if type(v) == "table" then
ngx.say(k, " : ", table.concat(v, ", "), "<br/>")
else
ngx.say(k, ": ", v, "<br/>")
end
end
ngx.say("uri args end", "<br/>")
ngx.say("a: ",ngx.var.arg_a, "<br/>")
ngx.say("b: ",ngx.var.arg_b, "<br/>")

--δ¾­½âÂëµÄÇëÇó uri
local request_uri = headers["Host"] .. "/" .. ngx.var.request_uri;
ngx.say("request_uri : ", request_uri, "<br/>");
--½âÂëºóµÄ uri
local decode_request_uri = headers["Host"] .. "/" .. ngx.unescape_uri(ngx.var.request_uri);
ngx.var.ref1 = decode_request_uri;
ngx.say("decode request_uri : ", decode_request_uri, "<br/>");
--MD5
ngx.say("ngx.md5 : ", ngx.md5("123"), "<br/>")
--http time
ngx.say("ngx.http_time : ", ngx.http_time(ngx.time()), "<br/>")
--ngx.var.http_referer = "*********************"
';

access_log /var/log/nginx/ooxx.com.access.log tracklog;
}

}
}

×îºó nginx -s reload Ч¹ûÈçÏ£¬http://localhost/lua/a=1&b=2 ÇëÇóÒ²Õý³££¬ºÍ linux Ͻá¹ûÒ»Ö£º

8¡¢¹ØÓÚ nginx ÕýÔò˵Ã÷

£¨1£©location Æ¥ÅäÓï·¨¹æÔò

Nginx location µÄÕýÔòÆ¥ÅäÓï·¨ÓëÓÅÏȼ¶ÈÝÒ×ÈÃÐÂͬѧÃÔ»ó¡£

~ #²¨ÀËÏß±íʾִÐÐÒ»¸öÕýÔòÆ¥Åä£¬Çø·Ö´óСд

~* #±íʾִÐÐÒ»¸öÕýÔòÆ¥Å䣬²»Çø·Ö´óСд

= #½øÐÐÆÕͨ×Ö·û¾«È·Æ¥Å䣬ÓëlocationÔÚÅäÖÃÎļþÖеÄ˳ÐòÎ޹أ¬= ¾«È·Æ¥Åä»áµÚÒ»¸ö±»´¦Àí

@ #"@" ¶¨ÒåÒ»¸öÃüÃûµÄ location£¬Ê¹ÓÃÔÚÄÚ²¿¶¨Ïòʱ£¬ÀýÈç error_page, try_files

^~ ±êʶ·ûºóÃæ¸úÒ»¸ö×Ö·û´®¡£±íʾÆÕͨ×Ö·ûÆ¥Å䣬Èç¹û¸ÃÑ¡ÏîÆ¥Å䣬ֻƥÅä¸ÃÑ¡Ï²»Æ¥Åä±ðµÄÑ¡ÏNginx½«ÔÚÕâ¸ö×Ö·û´®Æ¥ÅäºóÍ£Ö¹½øÐÐÕýÔò±í´ïʽµÄÆ¥Å䣨locationÖ¸ÁîÖÐÕýÔò±í´ïʽµÄÆ¥ÅäµÄ½á¹ûÓÅÏÈʹÓã©£¬È磺location ^~ /images/£¬ÄãÏ£Íû¶Ô/images/Õâ¸öĿ¼½øÐÐÒ»Ð©ÌØ±ðµÄ²Ù×÷£¬ÈçÔö¼ÓexpiresÍ·£¬·ÀµÁÁ´µÈ£¬µ«ÊÇÄãÓÖÏë°Ñ³ýÁËÕâ¸öĿ¼µÄͼƬÍâµÄËùÓÐͼƬֻ½øÐÐÔö¼ÓexpiresÍ·µÄ²Ù×÷£¬Õâ¸ö²Ù×÷¿ÉÄÜ»áÓõ½ÁíÍâÒ»¸ölocation£¬ÀýÈ磺location ~* \.(gif|jpg|jpeg)$£¬ÕâÑù£¬Èç¹ûÓÐÇëÇó/images/1.jpg£¬nginxÈçºÎ¾ö¶¨È¥½øÐÐÄĸölocationÖеIJÙ×÷ÄØ£¿½á¹ûÈ¡¾öÓÚ±êʶ·û^~£¬Èç¹ûÄãÕâÑùд£ºlocation /images/£¬ÕâÑùnginx»á½«1.jpgÆ¥Åäµ½location ~* \.(gif|jpg|jpeg)$Õâ¸ölocationÖУ¬Õâ²¢²»ÊÇÄãÐèÒªµÄ½á¹û£¬¶øÔö¼ÓÁË^~Õâ¸ö±êʶ·ûºó£¬ËüÔÚÆ¥ÅäÁË/images/Õâ¸ö×Ö·û´®ºó¾ÍÍ£Ö¹ËÑË÷ÆäËü´øÕýÔòµÄlocation¡£

ÀýÈ磺

location = / {
# ֻƥÅä"/".
[ configuration A ]
}
location / {
# Æ¥ÅäÈκÎÇëÇó£¬ÒòΪËùÓÐÇëÇó¶¼ÊÇÒÔ"/"¿ªÊ¼
# µ«ÊǸü³¤×Ö·ûÆ¥Åä»òÕßÕýÔò±í´ïʽƥÅä»áÓÅÏÈÆ¥Åä
[ configuration B ]
}
location ^~ /images/ {
# Æ¥ÅäÈκÎÒÔ /images/ ¿ªÊ¼µÄÇëÇ󣬲¢Í£Ö¹Æ¥Åä ÆäËülocation
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# Æ¥ÅäÒÔ gif, jpg, or jpeg½áβµÄÇëÇó.
# µ«ÊÇËùÓÐ /images/ Ŀ¼µÄÇëÇó½«ÓÉ [Configuration C]´¦Àí.
[ configuration D ]
}

ÇëÇóURIÀý×Ó:

/ -> ·ûºÏconfiguration A

/documents/document.html -> ·ûºÏconfiguration B

/images/1.gif -> ·ûºÏconfiguration C

/documents/1.jpg ->·ûºÏ configuration D

= ±íʾ¾«È·µÄ²éÕÒµØÖ·£¬Èçlocation = /ËüÖ»»áÆ¥ÅäuriΪ/µÄÇëÇó£¬Èç¹ûÇëÇóΪ/index.html£¬½«²éÕÒÁíÍâµÄlocation£¬¶ø²»»áÆ¥ÅäÕâ¸ö£¬µ±È»¿ÉÒÔдÁ½¸ölocation£¬location = /ºÍlocation /£¬ÕâÑù/index.html½«Æ¥Åäµ½ºóÕߣ¬Èç¹ûÄãµÄÕ¾µã¶Ô/µÄÇëÇóÁ¿½Ï´ó£¬¿ÉÒÔʹÓÃÕâ¸ö·½·¨À´¼Ó¿ìÇëÇóµÄÏìÓ¦ËÙ¶È¡£

@ ±íʾΪһ¸ölocation½øÐÐÃüÃû£¬¼´×Ô¶¨ÒåÒ»¸ölocation£¬Õâ¸ölocation²»Äܱ»Íâ½çËù·ÃÎÊ£¬Ö»ÄÜÓÃÓÚNginx²úÉúµÄ×ÓÇëÇó£¬Ö÷ҪΪerror_pageºÍtry_files¡£

£¨2£©location ÓÅÏȼ¶¹Ù·½Îĵµ

=ǰ׺µÄÖ¸ÁîÑϸñÆ¥ÅäÕâ¸ö²éѯ¡£Èç¹ûÕÒµ½£¬Í£Ö¹ËÑË÷¡£

ËùÓÐʣϵij£¹æ×Ö·û´®£¬×µÄÆ¥Åä¡£Èç¹ûÕâ¸öÆ¥ÅäʹÓÃ^ǰ׺£¬ËÑË÷Í£Ö¹¡£

ÕýÔò±í´ïʽ£¬ÔÚÅäÖÃÎļþÖж¨ÒåµÄ˳Ðò¡£

Èç¹ûµÚ3Ìõ¹æÔò²úÉúÆ¥ÅäµÄ»°£¬½á¹û±»Ê¹Ó᣷ñÔò£¬Èçͬ´ÓµÚ2Ìõ¹æÔò±»Ê¹Óá£

£¨3£©ÕýÔòÓï·¨

~ ÎªÇø·Ö´óСдµÄÆ¥Åä¡£

~* ²»Çø·Ö´óСдµÄÆ¥Å䣨ƥÅäfirefoxµÄÕýÔòͬʱƥÅäFireFox£©¡£

!~ ²»Æ¥ÅäµÄ

!~* ²»Æ¥ÅäµÄ

. Æ¥Åä³ý»»ÐзûÒÔÍâµÄÈÎÒâ×Ö·û

\w Æ¥Åä×Öĸ»òÊý×Ö»òÏ»®Ïß»òºº×Ö

\s Æ¥ÅäÈÎÒâµÄ¿Õ°×·û

\d Æ¥ÅäÊý×Ö

\b Æ¥Åäµ¥´ÊµÄ¿ªÊ¼»ò½áÊø

^ Æ¥Åä×Ö·û´®µÄ¿ªÊ¼

$ Æ¥Åä×Ö·û´®µÄ½áÊø

\W Æ¥ÅäÈÎÒâ²»ÊÇ×Öĸ£¬Êý×Ö£¬Ï»®Ïߣ¬ºº×ÖµÄ×Ö·û

\S Æ¥ÅäÈÎÒâ²»Êǿհ׷ûµÄ×Ö·û

\D Æ¥ÅäÈÎÒâ·ÇÊý×ÖµÄ×Ö·û

\B Æ¥Åä²»Êǵ¥´Ê¿ªÍ·»ò½áÊøµÄλÖÃ

²¶»ñ (exp) Æ¥Åäexp,²¢²¶»ñÎı¾µ½×Ô¶¯ÃüÃûµÄ×éÀï

(<name>exp) Æ¥Åäexp,²¢²¶»ñÎı¾µ½Ãû³ÆÎªnameµÄ×éÀҲ¿ÉÒÔд³É('name'exp)

(:exp) Æ¥Åäexp,²»²¶»ñÆ¥ÅäµÄÎı¾£¬Ò²²»¸ø´Ë·Ö×é·ÖÅä×éºÅ

Áã¿í¶ÏÑÔ (=exp) Æ¥ÅäexpÇ°ÃæµÄλÖÃ

(<=exp) Æ¥ÅäexpºóÃæµÄλÖÃ

(!exp) Æ¥ÅäºóÃæ¸úµÄ²»ÊÇexpµÄλÖÃ

(<!exp) Æ¥ÅäÇ°Ãæ²»ÊÇexpµÄλÖÃ

×¢ÊÍ (#comment) ÕâÖÖÀàÐ͵ķÖ×é²»¶ÔÕýÔò±í´ïʽµÄ´¦Àí²úÉúÈκÎÓ°Ï죬ÓÃÓÚÌṩעÊÍÈÃÈËÔĶÁ

 

   
2171 ´Îä¯ÀÀ       27
????

HTTP????
nginx??????
SD-WAN???
5G?????
 
????

??????????
IPv6???????
??????????
???????
????

????????
????????
???????????????
??????????