በማስተናገድ ላይ የ nginx ውቅረትን በማዘጋጀት ላይ። Nginx ጥሩ ማስተካከያ። ጥበቃ, ማመቻቸት. ምናባዊ አስተናጋጅ…

ነሐሴ 14 ቀን 2009 ከቀኑ 7፡29 ሰዓት

nginx በማዋቀር ላይ

  • Nginx

nginxን በትክክል የማዋቀር ርዕስ በጣም ትልቅ ነው, እና, እፈራለሁ, በ Habré ላይ ካለው አንድ መጣጥፍ ማዕቀፍ ጋር ሊጣጣም አይችልም. በዚህ ጽሑፍ ውስጥ ለመነጋገር ሞከርኩ አጠቃላይ መዋቅርማዋቀር፣ ይበልጥ አስደሳች የሆኑ ትናንሽ ነገሮች እና ዝርዝሮች በኋላ ሊመጡ ይችላሉ። :)

nginx ን ለማዋቀር ጥሩ መነሻ ነጥብ ከስርጭቱ ጋር አብሮ የሚመጣው ውቅረት ነው, ነገር ግን ብዙዎቹ የዚህ አገልጋይ ችሎታዎች በእሱ ውስጥ እንኳን አልተጠቀሱም. ብዙ ተጨማሪ ዝርዝር ምሳሌበ Igor Sysoev ድረ-ገጽ: sysoev.ru/nginx/docs/example.html ላይ ይገኛል። ሆኖም፣ አወቃቀራችንን ከባዶ፣ በድልድይ እና ገጣሚዎች ለመገንባት እንሞክር። :)

በዚ እንጀምር አጠቃላይ ቅንብሮች. በመጀመሪያ ፣ nginx የሚሠራበትን ተጠቃሚ እንጠቁማለን (እንደ ስር መስራት መጥፎ ነው ፣ ሁሉም ያውቃል :))

አሁን ምን ያህል የሰራተኛ ሂደቶች መፈልፈል እንዳለባቸው ለ nginx እንንገረው። በተለምዶ፣ ጥሩ ምርጫአንዳንድ ጊዜ የሂደቱ ብዛት በአገልጋዩ ውስጥ ካለው የአቀነባባሪዎች ብዛት ጋር እኩል ነው ፣ ግን በዚህ ቅንብር መሞከር ጠቃሚ ነው። ከፍተኛ ጭነት የሚጠበቅ ከሆነ ኤችዲዲ, ሁሉም ስራ አሁንም በአፈፃፀሙ የተገደበ ስለሆነ ለእያንዳንዱ አካላዊ ሃርድ ድራይቭ አንድ ሂደት ማድረግ ይችላሉ.

የሰራተኛ_ሂደቶች 2;

የስህተት ምዝግብ ማስታወሻዎችን የት እንደሚፃፍ እናብራራ። ከዚያም ለግለሰብ ምናባዊ አገልጋዮች, ይህ ግቤት ሊሻር ይችላል, ስለዚህ "አለምአቀፍ" ስህተቶች ብቻ ለምሳሌ, ከአገልጋይ ጅምር ጋር የተያያዙ, በዚህ ምዝግብ ማስታወሻ ውስጥ ይታያሉ.

Error_log /spool/logs/nginx/nginx.error_log ማስታወቂያ; # የ"ማስታወቂያ" የማሳወቂያ ደረጃ ሊቀየር ይችላል።

አሁን በጣም አስደሳች "ክስተቶች" ክፍል ይመጣል. በውስጡም ማዘጋጀት ይችላሉ ከፍተኛ መጠንአንድ ሠራተኛ በአንድ ጊዜ የሚያስኬዳቸው ግንኙነቶች፣ እና በስርዓተ ክወናው ውስጥ ስላሉ ክስተቶች ያልተመሳሰሉ ማሳወቂያዎችን ለመቀበል የሚያገለግል ዘዴ። በእርግጥ በስርዓተ ክወናዎ ላይ ያሉትን እና በማጠናቀር ጊዜ የተካተቱትን እነዚያን ዘዴዎች ብቻ መምረጥ ይችላሉ።

እነዚህ ቅንብሮች በአገልጋይዎ አፈጻጸም ላይ ከፍተኛ ተጽዕኖ ሊያሳድሩ ይችላሉ። በስርዓተ ክወናው እና በሃርድዌር ላይ በመመስረት በተናጥል መመረጥ አለባቸው. ጥቂት አጠቃላይ ደንቦችን ብቻ መስጠት እችላለሁ.

ከክስተቶች ጋር ለመስራት ሞጁሎች
- መምረጥ እና መጠይቅ ብዙውን ጊዜ ቀርፋፋ ናቸው እና ፕሮሰሰሩን በጣም ይጭናሉ ፣ ግን በሁሉም ቦታ ይገኛሉ እና ሁል ጊዜም ይሰራሉ ​​\u200b\u200b።
- kqueue እና epoll - የበለጠ ቀልጣፋ, ግን በ FreeBSD እና Linux 2.6 ላይ ብቻ ይገኛሉ, በቅደም ተከተል;
- rtsig - ቆንጆ ውጤታማ ዘዴ, እና በጣም በቆዩ ሊኑክስ እንኳን የተደገፈ ነው, ነገር ግን ሲከሰት ችግር ሊፈጥር ይችላል ትልቅ ቁጥርግንኙነቶች;
- /dev/poll - እኔ እስከማውቀው ድረስ በትንሹ በትንሹ ይሰራል ያልተለመዱ ስርዓቶችእንደ Solaris, እና በውስጡ በጣም ውጤታማ ነው;

የሰራተኛ_ግንኙነቶች መለኪያ፡-
- የሚቀርቡት ከፍተኛው የደንበኞች ብዛት ከሠራተኛ_ሂደቶች * የሠራተኛ_ግንኙነቶች ጋር እኩል ይሆናል።
- አንዳንድ ጊዜ እነሱ ውስጥ ሊሠሩ ይችላሉ አዎንታዊ ጎንእንደ 128 ሂደቶች፣ በአንድ ሂደት 128 ግንኙነቶች፣ ወይም 1 ሂደት፣ ነገር ግን ከሰራተኛ_ግንኙነቶች=16384 መለኪያ ጋር ያሉ እጅግ በጣም ጽንፈኛ እሴቶች። በመጨረሻው ሁኔታ ግን OSውን ማስተካከል ያስፈልግዎታል።

ክስተቶች (
የሰራተኛ_ግንኙነቶች 2048;
kqueue ይጠቀሙ; # BSD አለን :)
}

የሚቀጥለው ክፍል ትልቁ እና በጣም አስደሳች ነገሮችን ይዟል. ይህ የቨርቹዋል ሰርቨሮች መግለጫ ነው፣ እና አንዳንድ መለኪያዎች ለሁሉም የተለመዱ ናቸው። እተወዋለሁ መደበኛ ቅንብሮችእንደ ሎግ የሚወስዱ ዱካዎች ያሉ በእያንዳንዱ ውቅሮች ውስጥ ያሉ።

ኤችቲቲፒ
# ከታች ያሉት ሁሉም ኮድ በዚህ ክፍል ውስጥ ይሆናሉ %)
# ...
}

በዚህ ክፍል ውስጥ አንዳንድ በጣም አስደሳች መለኪያዎች ሊኖሩ ይችላሉ።

የመልእክት ፋይል ስርዓት ጥሪ በአንጻራዊነት ለሊኑክስ አዲስ ነው። ወደ አፕሊኬሽኑ የአድራሻ ቦታ መገልበጥ ሳያስፈልግ ወደ አውታረ መረቡ እንዲልኩ ያስችልዎታል። በአብዛኛዎቹ አጋጣሚዎች ይህ የአገልጋይ አፈጻጸምን በእጅጉ ያሻሽላል, ስለዚህ ሁልጊዜ የመላክ አማራጭን ማንቃት የተሻለ ነው.

የ keepalive_timeout መለኪያው ተጠያቂ ነው። ከፍተኛው ጊዜተጠቃሚው በእሱ በኩል ምንም ነገር ካልጠየቀ የቆይታ ግንኙነትን ማቆየት። ጣቢያዎ እንዴት ጥያቄዎችን እንደሚልክ አስቡ እና ይህን ቅንብር ያስተካክሉ። AJAX ን በንቃት ለሚጠቀሙ ጣቢያዎች ግንኙነቱን ረዘም ላለ ጊዜ ማቆየት የተሻለ ነው; የቦዘነ keepalive ግንኙነትን በመጠበቅ፣ በተለየ መንገድ ጥቅም ላይ ሊውል የሚችል ግንኙነት እየወሰዱ እንደሆነ ያስታውሱ። :)

የቆይታ ጊዜ 15;

በተናጥል የ nginx ፕሮክሲ ቅንብሮችን ማጉላት ተገቢ ነው። ብዙውን ጊዜ nginx እንደ ተኪ አገልጋይ በትክክል ጥቅም ላይ ይውላል ፣ በዚህ መሠረት እነሱ በጣም ብዙ ናቸው። ትልቅ ጠቀሜታ. በተለይም የመጠባበቂያውን መጠን ለተኪ መጠይቆች ከጀርባ አገልጋዩ ከሚጠበቀው መጠን ያላነሰ ማቀናበሩ ተገቢ ነው። በዝግታ (ወይም በተገላቢጦሽ፣ በጣም ፈጣን) የኋለኛ ክፍል፣ ከኋላው ምላሽ ለመጠበቅ ጊዜያቶችን መቀየር ምክንያታዊ ነው። ያስታውሱ፣ እነዚህ የጊዜ ማብቂያዎች በረዘሙ መጠን የኋላው ቀርፋፋ ከሆነ ተጠቃሚዎችዎ ምላሽ እስኪያገኙ ድረስ ይጠብቃሉ።

Proxy_buffers 8 64k;
ፕሮክሲ_ጣልቃ_ስህተቶች በ ላይ;
proxy_connect_timeout 1s;
proxy_read_timeout 3s;
proxy_send_timeout 3s;

ትንሽ ብልሃት። nginx ከአንድ በላይ ምናባዊ አስተናጋጅ የሚያገለግል ከሆነ፣ በደንበኛው ጥያቄ ውስጥ አስተናጋጁን በመጠቀም አገልጋዩ ሌላ አማራጭ ማግኘት በማይችልበት ጊዜ ጥያቄዎችን የሚያስኬድ “ነባሪ ምናባዊ አስተናጋጅ” መፍጠር ምክንያታዊ ነው።

# ነባሪ ምናባዊ አስተናጋጅ
አገልጋይ (
80 ነባሪ ያዳምጡ;
አገልጋይ_ስም localhost;
ሁሉንም መካድ;
}

ይህ አንድ (ወይም ብዙ) “አገልጋይ” ክፍል ሊከተል ይችላል። እያንዳንዳቸው ምናባዊ አስተናጋጅ (ብዙውን ጊዜ በስም ላይ የተመሰረተ) ይገልፃሉ። በአንድ ማስተናገጃ ላይ ለብዙ ጣቢያዎች ባለቤቶች ወይም ለአስተናጋጆች እንደ መመሪያ ያለ ነገር ሊኖር ይችላል።

ያካትቱ /spool/users/nginx/*.conf;

የተቀሩት በአብዛኛው የእነሱን ምናባዊ አስተናጋጅ በቀጥታ በዋናው ውቅረት ውስጥ ይገልጻሉ።

አገልጋይ (
ሰማ 80;

# እባክዎን የአገልጋይ_ስም መመሪያ በአንድ ጊዜ ብዙ ስሞችን ሊገልጽ እንደሚችል ልብ ይበሉ።
የአገልጋይ ስም myserver.ru myserver.com;
access_log /spool/logs/nginx/myserver.access_log የጊዜ ገደብ;
error_log /spool/logs/nginx/myserver.error_log ማስጠንቀቂያ;
# ...

ለውጽአት ነባሪው ኢንኮዲንግ እናዘጋጅ።

Charset utf-8;

እና ከ1 ሜጋባይት በላይ ርዝማኔ ያላቸውን ደንበኞች ጥያቄ መቀበል አንፈልግም እንበል።

የደንበኛ_ከፍተኛ_የሰውነት መጠን 1ሜ;

ለአገልጋዩ SSIን እናንቃት እና ከ1 ኪሎባይት በላይ ለኤስኤስአይ ተለዋዋጮች እንድንያዝ እንጠይቅ።

ሲ ኦን;
ssi_value_ርዝመት 1024;

እና በመጨረሻም ፣ ሁለት ቦታዎችን እንገልፃለን ፣ አንደኛው ወደ ጀርባው ይመራል ፣ ወደ Apache በፖርት 9999 ፣ እና ሁለተኛው ከአካባቢው የማይለዋወጡ ምስሎችን ይልካል። የፋይል ስርዓት. ለሁለት ቦታዎች ይህ ትንሽ ትርጉም አይሰጥም, ነገር ግን ለእነሱ ትልቅ ቁጥር ወዲያውኑ የአገልጋይ ስርወ ማውጫ የሚከማችበትን ተለዋዋጭ መግለፅ እና ከዚያም በቦታ መግለጫዎች ውስጥ መጠቀም ምክንያታዊ ነው.

ድር Nginx አገልጋይበጣም ከፍተኛ አፈጻጸም እና በጣም ታዋቂ ከሆኑ የድር አገልጋዮች አንዱ ነው። ፈጣን ሂደት የማይንቀሳቀሱ መጠይቆችከተጠቃሚዎች. በትክክለኛው ውቅር አማካኝነት ከዚህ የድር አገልጋይ በጣም ከፍተኛ አፈፃፀም ማግኘት ይችላሉ። Nginx የማይንቀሳቀሱ ፋይሎችን በማስተናገድ ረገድ በጣም ፈጣን ነው። html ገጾችወይም ሌሎች የንብረቶች ዓይነቶች.

ከቀደሙት መጣጥፎች ውስጥ በአንዱ ዋና ዋና መለኪያዎችን ማዋቀርን አስቀድመን ተመልክተናል ፣ በዚህ ጽሑፍ ውስጥ በድር አገልጋይ አፈፃፀም እና በጦርነት ሁኔታዎች ውስጥ ጥቅም ላይ በሚውልበት ሁኔታ ላይ የበለጠ መኖር እፈልጋለሁ ። በተመለከተ የሊኑክስ ስርጭት, ከዚያ ዛሬ CentOS ን እንመለከታለን, ይህ ስርዓት ብዙውን ጊዜ በአገልጋዮች ላይ ጥቅም ላይ ይውላል እና Nginx ን በማዋቀር አንዳንድ ችግሮች ሊፈጠሩ ይችላሉ. በመቀጠል Nginx CentOS ን ማዋቀርን እንመለከታለን፣ ለ http2 ሙሉ ድጋፍን እንዴት ማንቃት እንደሚቻል እንነጋገር። ጉግል ገጽ ፍጥነት, እና ዋናውን የማዋቀሪያ ፋይል ያዋቅሩ.

ይፋዊው የCentOS ማከማቻዎች Nginxን ያካትታሉ እና ምናልባት ቀድሞውኑ በስርዓትዎ ላይ ተጭኗል። ነገር ግን ጣቢያው በ http2 ፕሮቶኮል በመጠቀም እንዲሰራ እንፈልጋለን, ይህም ሁሉንም መረጃዎች ከአንድ ግንኙነት ጋር ለማስተላለፍ ያስችልዎታል, ይህ ደግሞ አፈፃፀሙን ይጨምራል. በ http2 በኩል ለመስራት ማዋቀር ያስፈልግዎታል SSL ሰርተፍኬትነገር ግን ይህ አስቀድሞ የ Nginx ሰርተፍኬት እናስመስጥር በሚለው መጣጥፍ ላይ ተጽፏል። ግን ያ ብቻ አይደለም። ከመደበኛ ኤስኤስኤል ወደ HTTP2.0 ለመቀየር፣ አሁን አብዛኛዎቹ አሳሾች የ ALPN ፕሮቶኮልን ይጠቀማሉ፣ እና ከOpenSSL 1.02 ጀምሮ ይደገፋል። በማጠራቀሚያዎች ውስጥ OpenSSL 1.01 ብቻ አለ። ስለዚህ በOpenSSL 1.02 የተሰራ የ Nginx ስሪት መጫን አለብን። ለዚህ Broken Repo መጠቀም ይችላሉ፡-

sudo yum -y yum-utils ን ይጫኑ
# sudo yum-config-manager --add-repo https://brouken.com/brouken.repo

የ EPEL ማከማቻን እየተጠቀሙ ከሆነ Nginx ን ከእሱ መውሰድ እንደማያስፈልጋት ማመልከት ያስፈልግዎታል:

sudo yum-config-manager --save --setopt=epel.exclude=nginx*;

አሁን ትክክለኛውን የ Nginx ስሪት ለመጫን፣ በቀላሉ ይተይቡ፡-

sudo yum ጫን nginx

በጣም የቅርብ ጊዜ ስሪት Nginx 1.13.2፣ ከሙሉ ALPN ድጋፍ ጋር። በመቀጠል ወደ ማዋቀሩ እንሂድ።

2. Nginx ማዋቀር

የመጀመሪያው እርምጃ የውቅር ፋይልን አወቃቀር ግምት ውስጥ ማስገባት ነው. በመጀመሪያ በጨረፍታ ፣ እዚህ ሁሉም ነገር በጣም ግራ የሚያጋባ ሊመስል ይችላል ፣ ግን ሁሉም ነገር በጣም ምክንያታዊ ነው-

ዓለም አቀፍ አማራጮች
ክስተቶች()
http(
አገልጋይ (
አካባቢ()
}
አገልጋይ()
}

በመጀመሪያ ደረጃ የፕሮግራሙን መሰረታዊ መመዘኛዎች የሚያዘጋጁ አለምአቀፍ አማራጮች አሉ, ለምሳሌ, የትኛው ተጠቃሚ እንደ እና የሂደቱ ብዛት ይጀምራል. ቀጥሎ አንድ ክፍል አለ ክስተቶች, እሱም Nginx ለገቢ ግንኙነቶች እንዴት ምላሽ እንደሚሰጥ ይገልጻል, ከዚያም ክፍል http, ይህም ሥራን በተመለከተ ሁሉንም ቅንብሮች ያጣምራል http ፕሮቶኮል. ክፍል ይዟል አገልጋይ, እያንዳንዱ እንዲህ ያለ ክፍል የተለየ ጎራ ተጠያቂ ነው; አካባቢ, እያንዳንዳቸው ለአንድ የተወሰነ ኃላፊነት አለባቸው URL ጠይቅ, እባክዎን በአገልጋዩ ላይ ያለ ፋይል አይደለም ፣ ልክ እንደ Apache ፣ ግን የጥያቄ URL።

መሰረታዊ ዓለም አቀፍ ቅንብሮችበ /etc/nginx/nginx.conf ፋይል ውስጥ እናደርገዋለን. በመቀጠል ፣ በትክክል ምን እንደምንለውጥ እና ምን እሴቶችን ማዋቀር እንደሚመከር እንይ። በአለምአቀፍ አማራጮች እንጀምር፡-

  • ተጠቃሚ- አገልጋዩ የሚጀምርበት ተጠቃሚ ከጣቢያው ፋይሎች ጋር የማውጫው ባለቤት መሆን አለበት ፣ እና php-fpm በእሱ ምትክ መሮጥ አለበት ፣
  • የሰራተኛ_ሂደቶች- የሚጀምሩት የ Nginx ሂደቶች ብዛት ልክ እንደ ኮሮችዎ በትክክል መቀመጥ አለበት ፣ ለምሳሌ እኔ 4 አለኝ ።
  • የሰራተኛ_ሲፒዩ_ግንኙነት- ይህ ግቤት እያንዳንዱን ሂደት በተለየ ፕሮሰሰር ኮር እንዲመድቡ ይፈቅድልዎታል ፣ ይህም ፕሮግራሙ ራሱ ምን ማያያዝ እንዳለበት ይመርጣል ፣
  • ሰራተኛ_rlimit_nofile- ፕሮግራሙ የሚከፍተው ከፍተኛው የፋይሎች ብዛት ፣ ለእያንዳንዱ ግንኙነት ቢያንስ ሁለት ፋይሎች ያስፈልጉዎታል እና እያንዳንዱ ሂደት እርስዎ የገለፁት የግንኙነት ብዛት ይኖረዋል ፣ ስለሆነም ቀመሩ የሚከተለው ነው- የሰራተኛ_ሂደቶች * የሰራተኛ_ግንኙነቶች * 2, መለኪያ የሰራተኛ_ግንኙነቶችከዚህ በታች እንመልከተው;
  • pcre_jit- ሂደቱን ለማፋጠን ይህንን አማራጭ ያንቁ መደበኛ መግለጫዎችየጂአይቲ ስብስብን በመጠቀም;

በክስተቶች ክፍል ውስጥ ሁለት መለኪያዎች ማዋቀር አለብዎት:

  • የሰራተኛ_ግንኙነቶች- ገቢ ግንኙነቶችን ለማስኬድ የአንድ ሂደት የግንኙነት ብዛት በቂ መሆን አለበት። በመጀመሪያ፣ ከእነዚህ ገቢ ግንኙነቶች ውስጥ ስንት እንደሆኑ ማወቅ አለብን፣ ለዚህም በአገልጋዩ ip_address/nginx_status ላይ ያለውን ስታቲስቲክስ እንመለከታለን። እንዴት ማንቃት እንደሚቻል ከዚህ በታች እንመለከታለን። በActive Connections መስመር ውስጥ ከአገልጋዩ ጋር ያሉ ንቁ ግንኙነቶችን ቁጥር እናያለን፤ ከ php-fpm ጋር ያሉ ግንኙነቶችም እንደሚቆጠሩ ግምት ውስጥ ማስገባት አለብን። በመቀጠልም ለተቀበሉት እና ለተያዙት መስኮች ትኩረት ይስጡ, የመጀመሪያው የተቀነባበሩትን ግንኙነቶች ያሳያል, ሁለተኛው - ተቀባይነት ያለው ቁጥር. እሴቶቹ ተመሳሳይ መሆን አለባቸው. የሚለያዩ ከሆነ, በቂ ግንኙነቶች የሉም ማለት ነው. ምሳሌዎችን ይመልከቱ, የመጀመሪያው ስዕል ችግሩ ነው, ሁለተኛው ደግሞ ቅደም ተከተል ነው. ለኔ ውቅረት፣ ጥሩው ምስል 200 ግንኙነቶች ሊሆን ይችላል (በአጠቃላይ 800 ፣ 4 ሂደቶችን ከግምት ውስጥ በማስገባት)

  • ብዙ_ተቀበል- ፕሮግራሙ ብዙ ግንኙነቶችን በአንድ ጊዜ እንዲቀበል ያስችለዋል, እንዲሁም ከብዙ ግንኙነቶች ጋር ስራን ያፋጥናል;
  • ተቀበል_mutex- ሁሉም ሂደቶች ስለ አዲስ ግንኙነቶች ወዲያውኑ ማሳወቂያ እንዲቀበሉ የዚህን ግቤት ዋጋ ያቀናብሩ።

በተጨማሪም የአጠቃቀም መመሪያን በክስተቶች ክፍል ውስጥ እንዲጠቀሙ ይመከራል ይህ ለሊኑክስ ገቢ ግንኙነቶችን ለማስኬድ በጣም ቀልጣፋው ዘዴ ነው ፣ ግን ይህ ዘዴ በነባሪነት ጥቅም ላይ ይውላል ፣ ስለሆነም በእጅ መጨመር ምንም ፋይዳ አይታየኝም። ከ http ክፍል ጥቂት ተጨማሪ መለኪያዎችን እንመልከት፡-

  • መላኪያ- የመላክ ዳታ መላኪያ ዘዴን ይጠቀሙ። ለሊኑክስ በጣም ውጤታማው ዘዴ.
  • tcp_nodelay፣ tcp_nopush- ራስጌዎችን እና የጥያቄውን አካል በአንድ ፓኬት ይልካል ፣ ትንሽ በፍጥነት ይሰራል ፣
  • በሕይወት_ጊዜ ማብቂያ- ከደንበኛው ጋር ያለውን ግንኙነት ለመጠበቅ ጊዜው ያበቃል ፣ በጣም ቀርፋፋ ስክሪፕቶች ከሌሉዎት 10 ሴኮንድ በቂ ይሆናል ፣ ተጠቃሚው ከአገልጋዩ ጋር እንዲገናኝ አስፈላጊ እስከሆነ ድረስ እሴቱን ያዘጋጁ ፣
  • የማለቂያ_ግንኙነትን ዳግም አስጀምር- ከተወሰነ ጊዜ በኋላ ግንኙነቶችን ያቋርጡ።
  • ክፈት_ፋይል_መሸጎጫ- ስለ መሸጎጫ መረጃ ፋይሎችን ይክፈቱ. ለምሳሌ፡ open_file_cache max=200000 inacctive=120s; ከፍተኛ - በመሸጎጫ ውስጥ ከፍተኛው የፋይሎች ብዛት ፣ የመሸጎጫ ጊዜ።
  • ክፍት_ፋይል_መሸጎጫ_ይሰራል።- የፋይሎችን አግባብነት ማረጋገጥ ሲፈልጉ. ለምሳሌ፡ open_file_cache_valid 120s;
  • ክፈት_ፋይል_መሸጎጫ_ደቂቃ_ጥቅሞች- መሸጎጫ ብቻ የተወሰነ ጊዜ የተከፈቱ ፋይሎች;
  • ክፈት_ፋይል_መሸጎጫ_ስህተቶች- የፋይል መክፈቻ ስህተቶችን ያስታውሱ።
  • ጀምሮ_ከተቀየረ- ከተቀየረ - በኋላ ራስጌዎች እንዴት እንደሚሠሩ ያዘጋጃል። በዚህ ራስጌ፣ ገፁ ከዚያን ጊዜ ጀምሮ ካልተቀየረ አሳሹ 304 ምላሽ ሊቀበል ይችላል። ለመጨረሻ ጊዜ የታየው. ሊሆኑ የሚችሉ አማራጮች: አይላኩ - አጥፋ, ጊዜው በትክክል የሚዛመድ ከሆነ ይላኩ - በትክክል, ጊዜው በትክክል ወይም ከዚያ በላይ ከሆነ ይላኩ - በፊት;

ይህ ነው የሚመስለው nginx ማዋቀር conf

ተጠቃሚ nginx;
የሰራተኛ_ሂደቶች 4;
የሰራተኛ_ሲፒዩ_አፊኒቲ አውቶ;
ሰራተኛ_rlimit_nofile 10000;
pcre_jit በርቷል;

error_log /var/log/nginx/error.log ማስጠንቀቂያ;
ሎድ_ሞዱል "ሞዱሎች/ngx_pagespeed.so";

ክስተቶች (
ባለብዙ_ተቀበል ላይ;
ተቀበል_mutex ጠፍቷል;
የሰራተኛ_ግንኙነቶች 1024;
}

መላክ በ ላይ;
tcp_nopush በርቷል;
tcp_nodelay በርቷል;

open_file_cache max=200000 እንቅስቃሴ-አልባ=20 ሰ;
ክፍት_ፋይል_መሸጎጫ_የሚሰራ 120ዎች;
ክፍት_ፋይል_መሸጎጫ_ስህተቶች በርቷል;

የጊዜ ማብቂያ_ግንኙነቱን ዳግም አስጀምር በርቷል;
የደንበኛ_አካል_ጊዜ 10;
Keepalive_timeout 65;

ማካተት /etc/nginx/sites-enabled.*.conf

3. http2 በማዘጋጀት ላይ

የአገልጋይ ክፍሉን ማዋቀር በዝርዝር አልገልጽም ፣ ምክንያቱም ይህንን ቀድሞውኑ በኡቡንቱ ውስጥ Nginx ን በሚጭንበት መጣጥፍ ውስጥ ስላደረኩ እና እዚህ ምንም የምጨምረው ነገር የለኝም ፣ SSL ማዋቀርይህ በጣም ሰፊ ርዕስ ነው እና በተለየ ጽሑፍ ውስጥም ይብራራል። ነገር ግን http2ን ለማዋቀር ቀደም ሲል SSL ሊኖርዎት ይገባል። በመቀጠል፣ በቀላሉ በአገልጋይ ክፍልዎ ውስጥ ያለውን የማዳመጥ መመሪያ ያስተካክሉ፡

194.67.215.125:443 default_server ያዳምጡ;

194.67.215.125:443 ያዳምጡ http2 default_server;

ልክ እንደዚህ በቀላል መንገድከዚህ በፊት ከጫኑት http2 ን ማንቃት ይችላሉ። ትክክለኛው ስሪት Nginx

4. የገጽ ፍጥነት ማዘጋጀት

Google Pagespeed ገፆች በፍጥነት እንዲጫኑ፣ ድር አገልጋዩ በብቃት እንዲሰራ እና ተጠቃሚዎች ትንሽ ምቾት እንዲሰማቸው ለማድረግ የተለያዩ ማሻሻያዎችን የሚያከናውን Nginx ሞጁል ነው። ይህ መሸጎጫ, ማመቻቸትን ያካትታል html ኮድ, ምስል ማመቻቸት, ጃቫስክሪፕት ውህደትእና css ኮድእና ብዙ ተጨማሪ። ይሄ ሁሉ የሚደረገው በNginx ደረጃ ነው፣ ስለዚህ በPHP ውስጥ ካደረጉት የበለጠ ቀልጣፋ ነው። ግን አንድ ችግር አለ: ሞጁሉ የመጨረሻውን የተሻሻለውን ራስጌ ያስወግዳል.

እውነታው ግን PageSpeed ​​​​ለሁሉም ፋይሎች በጣም ረጅም የመሸጎጫ መስመር ያዘጋጃል እና በፋይሉ ስም ላይ ሃሽ ያክላል። በዚህ መንገድ የመርጃዎች ጭነት ፍጥነት በጣም ከፍ ያለ ነው ፣ ምክንያቱም አሳሹ ፋይሎችን በአዲሱ ሃሽ ብቻ ስለሚጠይቅ ፣ እና ማንኛውም ፋይል ከተቀየረ ተጠቃሚዎች ለውጦቹን ማየት እንዲችሉ LastModified ተወግዷል። አሁን ሞጁሉን እንዴት እንደሚጭኑ እንመልከት. ከምንጭ ኮድ መገንባት አለብን።

በመጀመሪያ ለመገጣጠም መሳሪያዎቹን ይጫኑ, በጣም አስፈላጊ ነው, ካልጫኑት, ከዚያ ስህተት ያጋጥምዎታል እና ምን ማድረግ እንዳለብዎት አያውቁም:

yum ጫን wget gcc cmake gcc-c++ pcre-devel zlib-devel ን ያንሱ

ለእርስዎ ስሪት የNginx ምንጮችን ያውርዱ እና ያውጡ፣ ለምሳሌ 1.13.3፡

wget -c https://nginx.org/download/nginx-1.13.3.tar.gz
# tar -xzvf nginx-1.13.3.tar.gz

የ nginx አገልጋይን ማዋቀር ፕሮግራሙን ከማከማቻው ውስጥ እንደገና መሰብሰብ እና መተካትን አያካትትም, ሞጁሉን ለመገንባት በቀላሉ እነዚህን ምንጮች እንጠቀማለን. የ PageSpeed ​​ምንጮችን ያውርዱ እና ያውጡ፡-

wget -c https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-stable.zip
# ዚፕ v1.12.34.2-stable.zipን ይክፈቱ

የገጽ ፍጥነት ማበልጸጊያ ቤተ-መጽሐፍትን ከሞጁል ምንጮች ጋር ወደ አቃፊው ያውርዱ እና ይክፈቱ

ሲዲ ngx_ገጽ ፍጥነት-1.12.34.2-የተረጋጋ/
# wget -c https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
# tar -xvzf 1.12.34.2-x64.tar.gz

OpenSSL 1.02 ምንጮችን ያውርዱ እና ይንቀሉ፡-

wget -c https://www.openssl.org/source/openssl-1.0.2k.tar.gz -O /opt/lib/$OPENSSL.tar.gz
# tar xvpzf openssl-1.0.2k.tar.gz

አሁን ሞጁሉን መሰብሰብ ያስፈልገናል. በመጀመሪያ ፣ የአሁኑ Nginx የተገነባባቸውን አማራጮች ይመልከቱ-

አሁን በNginx ወደ አቃፊው እንሂድ፣ ሁሉንም የተቀበሉት አማራጮችን እንተካ፣ --add-dynamic-module አማራጭ ለ PageSpeed፣ OpenSSL እና ለመገንባት እንሞክር፡-

ሲዲ nginx-1.13.3
# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --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-compat --with-file-aio --ጋር-ክር --በhttp_flv_module --በhttp_gunzip_module --ከ-http_gzip_static_module --በhttp_mp4_module --http_random_index_module ጋር http_stub_status_module --ከhttp_sub_module ጋር --በhttp_v2_module --በፖስታ --በሜይል_ssl_module --ጋር-ዥረት --ከዥረት_realip_module ጋር O2 -g -ፓይፕ -ዎል -Wp፣-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=አጠቃላይ" --ጋር- ld-opt= --with-openssl=$HOME/openssl-1.0.2k --add-dynamic-module=$HOME/ngx_pagespeed-1.12.34.2-stable $(PS_NGX_EXTRA_FLAGS)
#አድርግ

ሁሉም ነገር በትክክል ከተሰራ በውጤቱ ላይ የ ngx_pagespeed.so ሞጁሉን በ obj አቃፊ ውስጥ ይቀበላሉ ፣ ወደ /etc/nginx/modules አቃፊ መቅዳት ያስፈልግዎታል

cp ngx_pagespeed.so /etc/nginx/modules/ngx_pagespeed.so

ለመሸጎጫ ማህደር ይፍጠሩ፡

mkdir -p /var/ngx_pagespeed_cache
# chown -R nginx:nginx /var/ngx_pagespeed_cache

ሞጁሉን በ /etc/nginx/nginx.conf ውስጥ ለማንቃት አሁን የሚከተለውን መስመር ያክሉ፡

ሎድ_ሞዱል "ሞዱሎች/ngx_pagespeed.so";

በጣም ታዋቂ ከሆኑ የድር አገልጋዮች አንዱ

Nginx በአፈፃፀሙ ምክንያት በድር እና በተኪ አገልጋይ ተጠቃሚዎች ዘንድ በጣም ታዋቂ ነው። አገልጋዩ ብዙ ጥቅሞች አሉት ፣ ግን እሱን ማዋቀር ለጀማሪ ከባድ ይሆናል። የማዋቀር ፋይሎችን፣ አገባብ እና መሰረታዊ የ Nginx መለኪያዎችን እንዲያዘጋጁ ልንረዳዎ እንፈልጋለን።

የማውጫ ተዋረድ

ሁሉም የአገልጋይ ውቅር ፋይሎች በ/etc/nginx ማውጫ ውስጥ ይገኛሉ። በተጨማሪም፣ በማውጫው ውስጥ ብዙ ተጨማሪ ማህደሮች፣ እንዲሁም ሞጁል ውቅር ፋይሎች አሉ።

cd /etc/nginx
ls -ኤፍ
conf.d/ koi-win naxsi.rules scgi_params uwsgi_params
fastcgi_params mime.types nginx.conf sites-available/win-utf
koi-utf naxsi_core.rules proxy_params ሳይቶች የነቁ/

Apacheን ከተጠቀሙ፣ በጣቢያዎች የነቁ እና በጣቢያዎች የሚገኙ ማውጫዎችን በደንብ ማወቅ አለብዎት። የጣቢያዎችን ውቅር ይወስናሉ. የተፈጠሩት ፋይሎች በመጨረሻው ማውጫ ውስጥ ተከማችተዋል። ውቅሮችን ለማከማቸት በጣቢያዎች የነቃው አቃፊ ያስፈልጋል ገቢር የተደረጉ ገጾች. እነሱን ለማገናኘት በአቃፊዎች መካከል ምሳሌያዊ አገናኝ ያስፈልግዎታል. ውቅረቶች በ conf.d ማውጫ ውስጥም ሊቀመጡ ይችላሉ። በተመሳሳይ ጊዜ፣ በNginx ጅምር ጊዜ፣ እያንዳንዱ የ.conf ቅጥያ ያለው ፋይል እንደገና ይነበባል። የማዋቀሪያ ፋይሎችን በሚጽፉበት ጊዜ, ያለምንም ስህተቶች ኮዱን ይተይቡ እና አገባቡን ይከተሉ. ሁሉም ሌሎች ፋይሎች በ /etc/nginx ውስጥ ይገኛሉ። አወቃቀሩ ስለ ተወሰኑ ሂደቶች, እንዲሁም ተጨማሪ ክፍሎችን መረጃ ይዟል.

ዋናው የ Nginx ውቅር ፋይል nginx.conf ነው።

ሁሉንም የማዋቀሪያ ፋይሎች ያነባል፣ አገልጋዩ ሲጀምር ወደ ሚጠየቀው አንድ በማጣመር። ፋይሉን በሚከተለው ይክፈቱ

sudo nano /etc/nginx/nginx.conf

የሚከተሉት መስመሮች በማያ ገጹ ላይ ይታያሉ:

ተጠቃሚ www-data;
የሰራተኛ_ሂደቶች 4;
pid /var/run/nginx.pid;
ክስተቶች (
የሰራተኛ_ግንኙነቶች 768;
# ብዙ_ተቀበል ;
}
http(
. . .

የመጀመሪያው ነው። አጠቃላይ መረጃስለ Nginx. ተጠቃሚው www-data የሚለው ሐረግ አገልጋዩን የሚያንቀሳቅሰውን ተጠቃሚ ያሳያል። የፒዲ መመሪያው የPID ሂደቶች የት እንደታሰቡ ያሳያል ውስጣዊ አጠቃቀም. የሰራተኛ_ሂደቶች መስመር Nginx ምን ያህል ሂደቶች በአንድ ጊዜ እንደሚሰራ ያሳያል። በተጨማሪም, ምዝግብ ማስታወሻዎችን እዚህ መግለጽ ይችላሉ (ለምሳሌ, የስህተት ምዝግብ ማስታወሻው የስህተት_ሎግ መመሪያን በመጠቀም ይወሰናል). ከታች የክስተቶች ክፍል ነው. የአገልጋይ ግንኙነቶችን ለማስተናገድ ያስፈልጋል። ከእሱ በኋላ የ http እገዳ ነው.

Nginx ውቅር ፋይል መዋቅር

የፋይል ቅርጸት አወቃቀሩን መረዳት የድር አገልጋይ ውቅርዎን በተሻለ ሁኔታ ለመረዳት ይረዳዎታል። ወደ መዋቅራዊ ብሎኮች ተከፍሏል. የ http block ውቅር ዝርዝሮች የግል ብሎኮችን በመጠቀም ተደራራቢ ናቸው። ከወላጅ ንብረቶችን ይወርሳሉ, ማለትም. እነሱ የሚገኙበት. ይህ እገዳአብዛኛዎቹን የአገልጋይ ውቅሮችን ያከማቻል። እነሱ በየትኛው ቦታ ውስጥ ወደ አገልጋይ ብሎኮች ተከፍለዋል ።

የ Nginx አገልጋይን ሲያዋቅሩ፣ የማዋቀሪያው እገዳው ዝቅተኛ መሆኑን ያስታውሱ፣ ያነሱ ንጥረ ነገሮች ንብረቶችን ይወርሳሉ እና በተቃራኒው። ፋይሉ የአገልጋዩን አሠራር የሚቀይሩ ብዙ አማራጮችን ይዟል። ለምሳሌ ለደንበኛው ለተላኩ ፋይሎች መጭመቂያ ማዘጋጀት ይችላሉ. ይህንን ለማድረግ መለኪያዎችን ያስገቡ-

gzip በርቷል;
gzip_"msie6" ማሰናከል;

እባክዎን ተመሳሳይ መለኪያ ሊወስድ እንደሚችል ያስተውሉ የተለያዩ ትርጉሞችየተለያዩ ብሎኮች. በመጀመሪያ ከላይ ያስቀምጡት, ከዚያም መለኪያውን በሚፈለገው ደረጃ እንደገና ይግለጹ. ከሆነ የመጨረሻው ድርጊትአልተሰራም, ፕሮግራሙ እሴቶቹን በራስ-ሰር ያዘጋጃል.

የ nginx.conf ፋይል የመጨረሻዎቹ መስመሮች፡-

ማካተት /etc/nginx/conf.d/*.conf;
ማካተት /etc/nginx/sites-የነቃ/*;

የቦታው እና የአገልጋይ ብሎኮች ከዚህ ፋይል ውጭ እንደተቀመጡ ያመለክታሉ። ለዩአርኤሎች እና ለተወሰኑ ፋይሎች ቅንብሮችን ይገልጻሉ። ይህ መዋቅር ሞዱል ውቅር መዋቅርን ለመጠበቅ አስፈላጊ ነው. በውስጡም ለተለያዩ ጣቢያዎች አዲስ ማውጫዎችን እና ፋይሎችን መፍጠር ይችላሉ። ከዚህም በተጨማሪ እ.ኤ.አ. ተመሳሳይ ፋይሎችመቧደን ትችላለህ። ከግምገማ በኋላ, nginx.conf ፋይል መዝጋት ይችላሉ.

ምናባዊ ብሎኮች

በ Apache ውስጥ ካሉ ምናባዊ አስተናጋጆች ጋር ተመሳሳይ ናቸው። የአገልጋይ ክፍል ብሎኮች በአገልጋዩ ላይ የሚገኙትን የነጠላ ጣቢያዎችን ባህሪያት ያካትታሉ። በጣቢያዎች የሚገኝ አቃፊ ውስጥ ነባሪውን የአገልጋይ እገዳ ፋይል ያገኛሉ። በውስጡም ጣቢያዎችን በሚንከባከቡበት ጊዜ አስፈላጊ የሆኑትን አስፈላጊ መረጃዎች ማግኘት ይችላሉ.

ሲዲ ጣቢያዎች - ይገኛሉ
sudo nano ነባሪ
አገልጋይ (
ስርወ / usr/share/nginx/www;
መረጃ ጠቋሚ.html index.htm;
አገልጋይ_ስም localhost;
አካባቢ/(
try_files $uri $uri/ /index.html;
}
ቦታ / ሰነድ / (
ተለዋጭ ስም /usr/share/doc/;
autoindex በርቷል;
ፍቀድ 127.0.0.1;
ሁሉንም መካድ;
}
}

ከላይ ባለው ምሳሌ, አስተያየቶች ሆን ተብሎ ተወግደዋል. ይህ የተደረገው በቀላሉ ለማስተዋል ነው። በአገልጋዩ ብሎኮች ውስጥ በተጠማዘዙ ቅንፎች ውስጥ የተዘጉ ቅንብሮች አሉ።

ይህ እገዳ በ nginx.conf ፋይል የተጻፈውን በ http መጨረሻ ላይ የማካተት መመሪያን በመጠቀም ተቀምጧል። የስር መመሪያው የጣቢያው ይዘት የሚገኝበትን ማውጫ ይገልጻል። በውስጡ, ፕሮግራሙ ተጠቃሚው የሚጠይቃቸውን ፋይሎች ይፈልጋል. ነባሪው መንገድ፡ /usr/share/nginx/www. Nginx ሴሚኮሎን በመጠቀም መስመሮችን ወይም መመሪያዎችን ከሌላው ይለያል። ሥርዓተ-ነጥብ ካላስቀመጡ ብዙ መስመሮች እንደ አንድ ይነበባሉ። እንደ መረጃ ጠቋሚ ጥቅም ላይ የሚውሉትን ደንቦች ለመግለጽ, የመረጃ ጠቋሚውን መመሪያ ይጠቀሙ. አገልጋዩ በተዘረዘሩት ቅደም ተከተል ይፈትሻቸዋል። ካሉት ገፆች ውስጥ አንዳቸውም በተጠቃሚው ካልተጠየቁ፣ index.html ይመለሳል። እዚያ ከሌለ አገልጋዩ index.htm ይፈልጋል።

የአገልጋይ_ስም ደንብ

የአገልጋዩ እገዳ ለማስኬድ የሚያስፈልጉትን የጎራ ስሞች ዝርዝር ያካትታል። በቦታ ተለያይተው ማንኛውንም ቁጥር ማስገባት ይችላሉ። በጎራው መጨረሻ ወይም መጀመሪያ ላይ * ካስቀመጥክ ጭምብል ያለው ስም መጥቀስ ትችላለህ። ኮከቢቱ ከስሙ ክፍል ጋር ይዛመዳል። * .com.ua ን ካስገቡ፣ ይህ ሁሉንም የተገለጹ አድራሻዎችን ያካትታል የጎራ ዞን. አድራሻው ከበርካታ መመሪያዎች መግለጫ ጋር የሚዛመድ ከሆነ ሙሉ ለሙሉ ለሚዛመደው ምላሽ ይሰጣል። ተዛማጆች ከሌሉ መልሱ ከሁሉም የበለጠ ይሆናል። ረጅም ስም, ጭምብል ያለው. ያለበለዚያ መደበኛ የቃላት ማዛመድ ይከናወናል። መደበኛ አገላለጾችን የሚጠቀሙ የአገልጋይ ስሞች በ tilde (~) ይጀምራሉ።

የአካባቢ እገዳዎች

በሚቀጥለው መስመር የቦታ እገዳ ይኖረናል. የማቀነባበሪያ ዘዴን ለመወሰን ያስፈልጋል የተወሰኑ ጥያቄዎች. ሃብቶች ከማናቸውም ሌላ የአካባቢ ብሎኮች ጋር የማይዛመዱ ከሆነ በቅንፍ ውስጥ የተገለጹት መመሪያዎች በእነሱ ላይ ይተገበራሉ። እነዚህ ብሎኮች እንደ /doc/ ያለ መንገድን ሊያካትቱ ይችላሉ። በዩሪ እና በቦታ መካከል የተሟላ ግጥሚያ ለመመስረት የ = ምልክት ጥቅም ላይ ይውላል። ጠርዙን በመጠቀም, መደበኛ መግለጫዎችን ማዛመድ ይችላሉ. ~ ን በመጫን የጉዳይ ስሜትን ማዘጋጀት ይችላሉ። ኮከብ ምልክት ካከሉ ጉዳዩ ምንም አይሆንም።

ያስታውሱ: ጥያቄው ከቦታ እገዳው ጋር ሙሉ በሙሉ ሲዛመድ, ጥቅም ላይ ይውላል እና ፍለጋው ይቆማል. ግጥሚያው ሳይጠናቀቅ ሲቀር፣ ዩአርአይ ከአካባቢው መመሪያዎች መለኪያዎች ጋር ይነጻጸራል። እገዳውን ለመምረጥ ^~ ከዩአርአይ ጋር የሚዛመድ ብሎክ ይጠቀሙ። ይህ አማራጭ ካልነቃ አገልጋዩ ትክክለኛውን ግጥሚያ ይመርጣል እና መደበኛ አገላለጾችን በመጠቀም ፍለጋ ያደርጋል። ተስማሚ ከሆኑ አብነቶች ውስጥ አንዱን ለመምረጥ ይህ አስፈላጊ ነው. ተስማሚ አገላለጽ ከተገኘ ጥቅም ላይ ይውላል. አለበለዚያ የቀደመው የዩአርአይ ግጥሚያ ተግባራዊ ይሆናል። ሆኖም Nginx ሙሉ ግጥሚያዎችን እንደሚመርጥ ያስታውሱ። እነሱ ከሌሉ, መደበኛ መግለጫዎችን መፈለግ ይጀምራል, ከዚያም በ URI. የፍለጋ እኩልነት በምልክት ጥምር ^~ ይገለጻል።

try_files ደንብ

ይህ በጣም ነው። ጠቃሚ መሣሪያየፋይሎች መኖራቸውን ማረጋገጥ የሚችል በተደነገገው መንገድ. ጥያቄውን ለማስኬድ ከመመዘኛዎቹ ጋር የሚስማማውን የመጀመሪያውን ይጠቀማል። መጠቀም ትችላለህ ተጨማሪ አማራጮችአገልጋዩ እንዴት ጥያቄዎችን እንደሚያቀርብ ለመግለጽ። አወቃቀሩ ይህ ነባሪ መስመር አለው፡-

try_files $uri $uri/ /index.html;

ምን ማለት ነው፧ በቦታ ብሎክ የሚቀርብ ጥያቄ ከመጣ፣ አገልጋዩ በመጀመሪያ ዩሪን እንደ ፋይል ለማየት ይሞክራል። ይህ የቀረበው በ$uri ተለዋዋጭ ነው። ተዛማጆች በማይኖሩበት ጊዜ ዩሪ እንደ ማውጫ ይቆጠራል። ተከታይ slash: $uri/ በማከል ህልውናውን ማረጋገጥ ይችላሉ። ፋይሉም ሆነ ማውጫው የማይገኝባቸው ሁኔታዎች አሉ። በዚህ አጋጣሚ ነባሪው ፋይል ይጫናል - index.html. የ try_files ደንቡ የመጨረሻውን መለኪያ እንደ ውድቀት ይጠቀማል። ለዛ ነው ይህ ፋይልበስርዓቱ ውስጥ መሆን አለበት. ሆኖም፣ ምንም ተዛማጆች ካልተገኙ Nginx የስህተት ገጽ ይመልሳል። እሱን ለማዘጋጀት፣ ያስገቡ = እና የስህተት ኮድ፡-

ተጨማሪ አማራጮች

ተለዋጭ ደንቡን ተግባራዊ ካደረጉ የቦታ ማገጃ ገጾችን ከስር ማውጫው ውጭ ማገልገል ይችላሉ ፣ ለምሳሌ። ከዶክ ፋይሎች ሲፈልጉ ከ/usr/share/doc/ ይጠየቃሉ። በተጨማሪም ፣ በደንቡ ላይ ያለው ራስ-ኢንዴክስ ለተጠቀሰው የአካባቢ መመሪያ የአገልጋይ ማውጫዎችን መዘርዘር ይጀምራል። ክህደቱን ከፃፉ እና መስመሮችን ከፈቀዱ ወደ ማውጫዎች መዳረሻ መቀየር ይችላሉ።

እንደ ማጠቃለያ, Nginx በጣም ኃይለኛ ነው ብሎ መናገር ተገቢ ነው ሁለገብ መሳሪያ. ግን የአሠራሩን መርህ በደንብ ለመረዳት ጊዜ እና ጥረት ይጠይቃል። ውቅሮች እንዴት እንደሚሠሩ ከተረዱ, ሁሉንም የፕሮግራሙን ባህሪያት ሙሉ በሙሉ መደሰት ይችላሉ.

ሀሎ፣ ውድ ተጠቃሚሀብራክሃብራ. የእኔ ንግግር በቀዶ ጥገና ክፍል ውስጥ ለአካባቢያዊ የድር ልማት ፕሮጀክቶች መሬቱን እንዴት ማዘጋጀት እንዳለብኝ ይሆናል የኡቡንቱ ስርዓት 16.04.1 LTS.

በዚህ ጽሑፍ ውስጥ ማጥፋት እና ማብራራት እፈልጋለሁ ሊሆኑ የሚችሉ ችግሮችከሚያስፈልገው ሶፍትዌር መጫን እና ማዋቀር ጋር የተያያዘ ዘመናዊ የድር ልማት, የትኞቹ ጀማሪ ገንቢዎች ሊያጋጥሟቸው የሚችሉት እና ብቻ አይደሉም.

በአንቀጹ ውስጥ ጥቅም ላይ የሚውሉ ቴክኖሎጂዎች: nginx, php-fpm.

ታሪኩን ከመጀመሬ በፊት, እነዚህን ሁሉ ድርጊቶች በ "ባዶ" ስርዓት ላይ እንዳደረግሁ ማስተዋል እፈልጋለሁ.
ከአፕቲዩድ ፓኬጅ አስተዳዳሪ ጋር እሰራለሁ። በተጨማሪም ሶፍትዌሩን ከመጫንዎ በፊት የጥቅል መረጃ ጠቋሚውን እና ፓኬጆቹን እራሳቸው እንዲያዘምኑ እመክራለሁ። በዚህ ጽሑፍ ውስጥ እነዚህን እርምጃዎች አንድ ላይ እናደርጋለን.

ሂድ!

የጥቅል አስተዳዳሪን በመጫን ላይ ብቃት፣ የመረጃ ጠቋሚ እና የጥቅል ዝመናዎች

ጫን፡

Sudo apt የመጫን ብቃት
መረጃ ጠቋሚውን እናዘምነዋለን.

የሱዶ ብቃት ዝማኔ
ጥቅሎችን እናዘምነዋለን (ትዕዛዙ አዳዲስ ስሪቶች ያሉባቸውን ሁሉንም ጥቅሎች ያዘምናል ፣ ጥቅሎች መወገድ ካለባቸው ይከናወናል)።

የሱዶ ብቃት ሙሉ-ማሻሻል

መጫን እና ማዋቀር nginx(ስሪት >= 1.10.0)

እኛ እንጭናለን.

Sudo aptitude ጫን nginx
እንጀምር።

የሱዶ አገልግሎት nginx ጀምር
የድሮውን ማለትም ከ1.10.0 በታች የሆነ እንዳልጫንን ለማረጋገጥ ስሪቱን እናረጋግጣለን።

መጫኑ እና ማስጀመሪያው ተጠናቅቋል, አሁን የእኛን nginx ወደተጫነበት ማውጫ እንሂድ እና አወቃቀሩን እንይ. የ nginx ማውጫ በዚህ መንገድ ላይ ይገኛል፡-

ሲዲ /ወዘተ/nginx/
የማውጫውን ይዘቶች በ ls ትእዛዝ ማየት ይችላሉ -la ባንዲራዎች የማውጫውን ይዘት ለመመልከት የበለጠ አመቺ ይሆናል (በእርግጥ ይህ ልዩ ባንዲራዎች ያሉት ትእዛዝ በበለጠ ዝርዝር እና በትክክል ሊገለፅ ይችላል ፣ ግን ዛሬ የተለየ ርዕስ አለን).

ልስ-ላ
ፍላጎት አለን። በዚህ ቅጽበትበቅጽበታዊ ገጽ እይታ ውስጥ የሚያዩዋቸው ሁለት ማውጫዎች. እነዚህ በጣቢያዎች የሚገኙ እና በጣቢያዎች የነቁ ማውጫዎች ናቸው።

ወደ ድረ-ገጾች-የሚገኘው ማውጫ እንሂድ እና የእኛን ምናባዊ አስተናጋጅ (ጣቢያ) ማዋቀር እንጀምር።

ሲዲ /etc/nginx/sites-available
የውቅረት ፋይሉን መፍጠር ከመጀመራችን በፊት ምን እንዳለን እንፈትሽ ይህ ካታሎግ. በእኔ ሁኔታ, ማውጫው ባዶ አይደለም, ቀድሞውኑ የማዋቀሪያ ፋይሎችን ይዟል, እርስዎን ላለማሳሳት ሰረዝኳቸው.

አስፈላጊ መረበሽ

በትእዛዙ nginx ን ሲያራግፉ “ከባዶ” ፣ በትክክል “ከባዶ” ን ሲጭኑ
sudo apt-get remove nginx or sudo apt remove nginx ውቅር ፋይሎች ይቀራሉ እና nginx ለምን እንደማይሰራ በድንገት ካልተረዱ እና እንደገና መጫን ከፈለጉ (ብዙውን ጊዜ ጀማሪዎች ወደዚህ ይሄዳሉ) የሊኑክስ ተጠቃሚዎች), ከዚያ እንደገና ከተጫነ በኋላ እንኳን በትክክል አይሰራም, ምክንያቱም የድሮው የውቅረት ፋይሎች (በማስወገድ ትዕዛዙ ከተወገዱ በኋላ አይሰረዙም) የተሳሳቱ ቅንብሮችን ይዘዋል, እነሱ መሰረዝ ወይም በትክክል ማዋቀር አለባቸው, ከዚያ በኋላ ብቻ nginx ይሰራል.

በ sudo apt-get purge nginx ወይም sudo apt purge nginx በትእዛዙ እንዲሰርዙ እመክራለሁ። እየተጠቀሙ ከሆነ የጥቅል አስተዳዳሪብቃት እንግዲህ sudo ትዕዛዝ aptitude purge nginx ሙሉውን ጥቅል በሁሉም ጥገኝነት እና ውቅረት ፋይሎች ያስወግዳል።


በዚህ ማውጫ ውስጥ በነባሪ አንድ ፋይል ይኖራል፣ ነባሪ ይባላል። የውቅረት ፋይልን በምሳሌ ይይዛል፣ ከአስተያየቶች ጋር፣ በመዝናኛ ጊዜ ሊያጠኑት ይችላሉ፣ ወይም ሙሉ ለሙሉ መሰረዝ ይችላሉ (ሁልጊዜም ኦፊሴላዊውን ሰነድ ማየት ይችላሉ)።

ልስ-ላ

የራሳችንን የማዋቀሪያ ፋይል እንፍጠር፣ ይህም ከአካባቢያችን ጣቢያ (ወይም እውነተኛው፣ ስሙን አስቀድመው ካወቁ) ጋር ይዛመዳል። ይህ ምቹ ነው, ለወደፊቱ, ብዙ የማዋቀሪያ ፋይሎች ሲኖሩ, በውስጣቸው ከግራ መጋባት ያድንዎታል. ለእኔ ይህ ፋይል project.local ይባላል።

Sudo touch project.local
የሆነውን ነገር እንይ።

አሁን በአርታዒው ውስጥ እንከፍተው, በ nano ውስጥ እከፍታለሁ.

Sudo nano project.local
ባዶ እንደሆነ እናያለን። አሁን ፋይላችንን ወደ መፍጠር እንሂድ። አወቃቀሩን ከዚህ በታች በተገለፀው ቅጽ ላይ ማምጣት ያስፈልግዎታል. የዚህን ፋይል አስፈላጊ መመሪያዎች ብቻ እገልጻለሁ, የቀረውን አልገልጽም, ይህ በአሁኑ ጊዜ አስፈላጊ ስላልሆነ, ከሁሉም በላይ, ርዕስ አለን. መሰረታዊ ቅንብሮች. እነዚህ "ስላይድ" ቅንጅቶች በአካባቢው ፕሮጀክቶችን ለማዳበር በቂ ናቸው, ትናንሽ ብቻ ሳይሆን በጣም ትልቅም ጭምር. በሚቀጥሉት መጣጥፎች ውስጥ የዚህን ፋይል እያንዳንዱን መመሪያ ለየብቻ እገልጻለሁ (መስመሮቹ የሚጠሩት ለምሳሌ የአገልጋይ ስም) ነው።

አስተያየቶችን በቀጥታ በ ላይ ይመልከቱ የማዋቀር ፋይል.

አገልጋይ (80 ያዳምጡ፤ # ወደብ ማዳመጥ በ nginx server_name project.local; # የጎራ ስምከአሁኑ ጋር የተያያዘ ምናባዊ አስተናጋጅ root /home/stavanger/code/project.local; # ፕሮጀክቱ የሚገኝበት ማውጫ ፣ ወደ የመግቢያ ነጥብ ማውጫ index.php የሚወስደው መንገድ; # add_header መዳረሻ-ቁጥጥር-ፍቀድ-መነሻ *; # ቋሚ ፋይሎችን በቀጥታ ቦታ ያቅርቡ ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ (መዳረሻ_ሎግ ጠፍቷል፤ ከፍተኛው ጊዜ ያበቃል፤ መዝገብ_አልተገኘም፤ ) አካባቢ / ( # add_header Access-Control-Allow- መነሻ *; try_files $uri $uri/ /index.php?$query_string; :/var/run/php/php7.0-fpm.sock; # የ php-fpm ሶኬት fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $ document_root$ fastcgi_script_name;
ፋይሉን ያስቀምጡ. አሁን በእሱ ውስጥ ስህተቶች ካሉ ማረጋገጥ አለብን. ይህንን በቡድን ማድረግ እንችላለን።

ሱዶ nginx -t
እንደ ቅጽበታዊ ገጽ እይታው እንደዚህ ያለ መረጃ ከተመለከትን, ሁሉም ነገር ትክክል ነው እና ማዋቀሩን መቀጠል እንችላለን. ማናቸውም ስህተቶች ካጋጠሙዎት የማዋቀሪያ ፋይልዎን ሁለት ጊዜ መፈተሽ ተገቢ ነው።

አሁን የማዋቀሪያውን ፋይል ማንቃት አለብን፣ በ /etc/nginx/sites-enabled/ directory ውስጥ ሲምሊንክ (ሲምሊንክ) መፍጠር አለብን። Nginx ን ከባዶ ከጫኑ ፣በዚህ ማውጫ ውስጥ ወደ ነባሪው ፋይል ሲምሊንክ አለ ፣ይህም ካላስፈለገዎት ሊሰርዙት ይችላሉ። ወደ ተፈላጊው ማውጫ ይሂዱ.

ሲዲ /ወዘተ/nginx/ጣቢያዎች የነቁ/
አሁን ገብተናል የሚፈለገው ማውጫ. የእኛን ሲምሊንክ እንፍጠር። ለመፍጠር የ ln ትዕዛዙን በ -s ባንዲራ ይጠቀሙ፣ ከዚያ ወደ ፕሮጄክታችን.local config የሚወስደውን መንገድ እናሳያለን።

Sudo ln -s /etc/nginx/sites-available/project.local
የተፈጠረውን ሲምሊንክን እንመልከት።

አሁንም ሁሉንም ነገር በትክክል እየሰራን መሆናችንን ለማረጋገጥ ትዕዛዙን እንደገና እናሂዱ።

ፋይል አስተናጋጆች

ይህ ፋይል በ /etc/hosts ላይ ይገኛል። በውስጡ ያሉ ግቤቶች መኖራቸው localhost እንደ ጎራ በመጠቀም nginx ን እንዲያሄዱ ያስችልዎታል። በዚህ ፋይል ውስጥ መመደብ ይችላሉ አማራጭ ተለዋጭ ስሞችለምሳሌ ለፕሮጀክታችን ፕሮጄክት.local፣ ጎራውን ፕሮጄክት.local እንመድባለን።

ፋይሉን በ nano አርታኢ ውስጥ ይክፈቱ።

ሱዶ ናኖ /etc/hosts
በዚህ ፋይል ውስጥ ሌላ መረጃ ይኖርዎታል፣ ዝም ይበሉ። ልክ በእኔ ቅጽበታዊ ገጽ እይታ ላይ ያለ መስመር ማከል ያስፈልግዎታል።

መጫን php-fpm (>=7.0)

sudo aptitude php-fpm ጫን
በማጣራት ላይ የተጫነው ስሪትምንም እንኳን በኡቡንቱ 16.04.1 የ 7.0 እትም በማጠራቀሚያዎች ውስጥ አለ።

ፒፒ-fpm7.0 -v

ሁሉም ነገር ደህና መሆኑን እናረጋግጥ። php-fpm እንጀምር።

የሱዶ አገልግሎት php7.0-fpm ጅምር
አወቃቀሮችን ካስተካከሉ, daemon እንደገና ማስጀመርዎን አይርሱ. እንዲህ ያደርጋል። ግን አንፈልግም።

የሱዶ አገልግሎት php7.0-fpm እንደገና ይጀምራል
ይህ መጫኑ እና php-fpm ማዋቀርአልቋል። በእውነቱ ያ ብቻ ነው። ይህ አስማት አይደለም, ወደ php-fpm ሶኬት የሚወስደው መንገድ በማዋቀሪያው ፋይል ውስጥ አስቀድሞ ተገልጿል. በእርግጥ አንዳንድ ሊፈልጉ ይችላሉ php ቅጥያዎችለግል ፕሮጄክቶች ልማት ፣ ግን እንደ አስፈላጊነቱ እነሱን ማቅረብ ይችላሉ ።

አሁን ከፕሮጀክታችን ጋር ወደ ማውጫው እንሂድ፣ በዚህ መንገድ አለኝ።

ሲዲ /ሆም/stavanger/code/project.local
ከላይ ወዳለው ማውጫ እንሂድ እና ፈቃዶቹን 777 (ማለትም እናደርጋለን) ሙሉ መብቶችማውጫ ከፕሮጀክታችን ፕሮጀክት ጋር.local). ይህ ለወደፊቱ ከማያስፈልጉ ችግሮች ያድነናል.

ሲዲ .. sudo chmod -R 777 project.local
ይሄ የሶፍትዌር ማዋቀሩን ያጠናቅቃል፣ በእኛ የስራ ማውጫ ፕሮጄክት.local ውስጥ የሙከራ ፋይል እንፍጠር እና ሁሉም ነገር መስራቱን ያረጋግጡ። ከዚህ ይዘት ጋር index.php ፋይል እፈጥራለሁ.

ወደ አሳሹ እንሄዳለን እና ሁሉም ነገር ለእኛ ጥሩ እንደሚሰራ እንመለከታለን! ፒኤችፒ አስተርጓሚ ጨምሮ።

ከአንባቢዎች ጋር, Stavanger.

በNginx ላይ የተመሰረተ የድር አገልጋይ የድር ጣቢያዎችን አፈጻጸም ለማሻሻል ጥሩ መንገድ ነው። በቀላሉ የማይንቀሳቀስ ይዘትን በማዘጋጀት ፍጥነት ውስጥ ምንም እኩልነት የለውም፡ ብዙ ሺዎችን በአንድ ጊዜ የሚገናኙ ግንኙነቶችን በቀላሉ መቋቋም የሚችል እና በቀላሉ ማመቻቸት እና ለማንኛውም ውቅር ሊበጅ ይችላል። ይሁን እንጂ? ለ Apache እንደ የፊት ጫፍ ሆኖ የሚሰራ፣ nginx ከመላው የድር መሠረተ ልማት በጣም የተጋለጠ ነጥብ ሆኖ ተገኝቷል፣ ስለዚህ ልዩ ትኩረት ለ nginx ደህንነት መከፈል አለበት።

ይህ ጽሑፍ የትምህርት ፕሮግራም ዓይነት ነው፣ ወይም ከፈለጉ፣ የ nginx ደህንነትን ለማሻሻል የሁሉም ቴክኒኮች ማጠቃለያ ነው። እሱ ንድፈ ሃሳብ፣ የድር አገልጋይ የማዋቀር መሰረታዊ ነገሮች መግለጫ እና ሌሎች ፍሉፍ አይይዝም። ይልቁንም ደህንነቱ የተጠበቀ የድር አገልጋይ እንዲኖርዎት ማድረግ ያለብዎትን ሁሉንም መሰረታዊ እርምጃዎች የሚገልጽ አጠቃላይ እና ተግባራዊ የሆነ ጽሑፍ ይደርስዎታል።

መጫን

የ nginx ጥቅል ለማንኛውም ማከፋፈያ አስቀድሞ በተጠናቀረ ቅጽ ይገኛል። ነገር ግን፣ አገልጋዩን እራስዎ በመገንባት፣ የበለጠ የታመቀ እና አስተማማኝ እንዲሆን ማድረግ ይችላሉ፣ እና የዌብ ሰርቨር ሰላምታ መስመርን በመቀየር ሞኞች የስክሪፕት ልጆችን ተስፋ ለማስቆረጥ እድል ይኖርዎታል።

የድር አገልጋይ ሰላምታ መስመርን ይቀይሩ

የ nginx ምንጮችን ያውርዱ፣ ፋይሉን ይክፈቱ src/http/ngx_http_header_filter_module.c እና የሚከተሉትን ሁለት መስመሮች ያግኙ።

የማይንቀሳቀስ ቻር ngx_http_server_string = "አገልጋይ: nginx" CRLF;
የማይንቀሳቀስ ቻር ngx_http_server_full_string = "አገልጋይ:" NGINX_VER CRLF;

በሚከተለው ነገር ይተኩዋቸው፡-

የማይንቀሳቀስ ቻር ngx_http_server_string = "አገልጋይ: [የድር አገልጋይ" CRLF;
የማይንቀሳቀስ ቻር ngx_http_server_full_string = "አገልጋይ: [የድር አገልጋይ" CRLF;

የማይጠቀሙባቸውን ሁሉንም nginx ሞጁሎች ያስወግዱ

አንዳንድ nginx ሞጁሎች በሚጠናቀሩበት ጊዜ በቀጥታ ከድር አገልጋይ ጋር ይገናኛሉ፣ እና ማንኛቸውም በአደጋዎች የተሞሉ ናቸው። ምናልባት ወደፊት ተጋላጭነት በአንደኛው ውስጥ ሊገኝ ይችላል እና አገልጋይዎ ለአደጋ ይጋለጣል። አላስፈላጊ ሞጁሎችን በማሰናከል, እንደዚህ አይነት ሁኔታ የመከሰቱን አደጋ በከፍተኛ ሁኔታ መቀነስ ይችላሉ.

የሚከተሉትን ትዕዛዞች በመጠቀም ይገንቡ:

# ./configure --ያለ-http_autoindex_module --ያለ-http_ssi_module
#አድርግ
# ጫን

በዚህ መንገድ Nginxን በ SSI (የአገልጋይ ጎን ያካትታል) እና አውቶኢንዴክስ ሞጁሎች አስቀድመው ተሰናክለዋል (እና በአብዛኛዎቹ ጉዳዮች ከጥቅም ውጭ) ያገኛሉ። የትኛዎቹ ሞጁሎች በደህና ከድር አገልጋዩ ሊወገዱ እንደሚችሉ ለማወቅ የማዋቀሪያውን ስክሪፕት በ'-help' ባንዲራ ያሂዱ።

nginx.confን እንለያይ

ከተጫነ በኋላ nginx መዋቀር አለበት። በመጽሔቱ ገፆች ላይ ይህን ሂደት የሚገልጽ ቁሳቁስ አስቀድሞ ነበር, ነገር ግን በአንቀጹ ርዕስ ላይ እንጣበቃለን እና የአገልጋይ ደህንነትን ስለማሳደግ መንገዶች እንነጋገራለን.

በሁሉም የስህተት ገጾች ላይ የአገልጋይ ሥሪቱን ማሳየት አሰናክል

የ"server_tokens ጠፍቷል" የሚለውን መስመር ወደ nginx.conf ፋይል ያክሉ። ይህ nginx ለተሳሳተ የደንበኛ ጥያቄ በተፈጠሩ ገፆች ላይ ስለድር አገልጋይ አይነት እና ስሪት መረጃን እንዲደብቅ ያስገድደዋል።

ከቁልል መቆራረጥ መከላከያ ያዘጋጁ

የሚከተሉትን መስመሮች ወደ የአገልጋይ ክፍል ያክሉ።

# vi /etc/nginx/nginx.conf

የደንበኛ ጥያቄ አካልን ለማከማቸት ከፍተኛው ቋት መጠን
የደንበኛ_አካል_ቋት_መጠን 1ኬ;
የደንበኛ ጥያቄ ራስጌዎችን ለማከማቸት # ከፍተኛው ቋት መጠን
የደንበኛ_ራስጌ_ቋፍ_መጠን 1k;
# ከፍተኛው የደንበኛ ጥያቄ አካል መጠን፣ በይዘት-ርዝመት ርዕስ መስኩ ላይ የተገለጸው። አገልጋዩ የፋይል ሰቀላዎችን መደገፍ ካለበት ይህ ዋጋ መጨመር አለበት።
ደንበኛ_ከፍተኛ_የሰውነት_መጠን 1k;
ትልቅ የደንበኛ ጥያቄ ራስጌ ለማንበብ የመጠባበቂያዎች ብዛት እና መጠን
ትልቅ_ደንበኛ_ራስጌ_ማቆሚያ 2 1k;

ለትልቅ_ደንበኛ_ራስጌ_ማቋቋሚያ መመሪያ ትኩረት ይስጡ። በነባሪ፣ nginx የዩአርአይ ሕብረቁምፊን ለማከማቸት አራት ማቋቋሚያዎችን ይመድባል፣ የእያንዳንዳቸው መጠን ከማስታወሻ ገጽ መጠን ጋር እኩል ነው (ለ x86 ይህ 4 ኪባ ነው)። ግንኙነቱ ጥያቄን ካስተናገደ በኋላ ወደ ህያው ሁኔታ በገባ ቁጥር ቋት ይለቀቃሉ። ሁለት 1 ኪባ ቋት 2 ኪባ ብቻ ርዝመት ያላቸውን ዩአርአይዎችን ማከማቸት ይችላል ይህም ቦቶችን እና የዶኤስ ጥቃቶችን ለመዋጋት ይረዳል።

አፈጻጸምን ለማሻሻል የሚከተሉትን መስመሮች ያክሉ።

# vi /etc/nginx/nginx.conf

የደንበኛ ጥያቄ አካልን በሚያነቡበት ጊዜ # ጊዜ አልቋል
የደንበኛ_አካል_ጊዜ 10;
የደንበኛ ጥያቄ ራስጌን በሚያነቡበት ጊዜ # ጊዜ አልቋል
የደንበኛ_ራስጌ_ጊዜ ማብቂያ 10;
# ጊዜው ያለፈበት ከዚያ በኋላ ከደንበኛው ጋር ያለው ግንኙነት ከአገልጋዩ በኩል አይዘጋም።
Keepalive_timeout 5 5;
ለደንበኛው ምላሽ ሲላክ # ጊዜው አልፏል
መላኪያ_ጊዜ 10;

በተመሳሳይ ጊዜ የግንኙነቶች ብዛት ይቆጣጠሩ

የድር አገልጋዩን ከመጠን በላይ መጫን እና የ DoS ጥቃትን ለመፈጸም ሙከራዎችን ለመጠበቅ የሚከተሉትን መስመሮች ወደ ውቅሩ ያክሉ።

# vi /etc/nginx/nginx.conf

# የክፍለ-ግዛቶች የሚቀመጡበትን ዞን (ስሊምቶች) እንገልፃለን. አንድ 1 ሜባ ዞን ወደ 32000 ግዛቶች ማከማቸት ይችላል, መጠኑን ወደ 5 ሜባ እናዘጋጃለን
ገደብ_ዞን slimits $ binary_remote_addr 5m;
# ለአንድ ክፍለ ጊዜ ከፍተኛውን በአንድ ጊዜ የሚገናኙ ግንኙነቶችን ያቀናብሩ። በመሠረቱ, ይህ ቁጥር ከአንድ አይፒ ከፍተኛውን የግንኙነቶች ብዛት ይገልጻል
ገደብ_ኮን slimits 5;

የመጀመሪያው መመሪያ በኤችቲቲፒ ክፍል ውስጥ, ሁለተኛው በቦታ ክፍል ውስጥ መሆን አለበት. የግንኙነቶች ብዛት ከገደቡ ሲያልፍ ደንበኛው ኮድ 503 ያለው "አገልግሎት የለም" የሚል መልእክት ይደርሰዋል።

ከእርስዎ ጎራ ጋር ብቻ ግንኙነቶችን ፍቀድ

ሰርጎ ገቦች ንዑስ መረቦችን ለመቃኘት እና ተጋላጭ የድር አገልጋዮችን ለማግኘት ቦቶችን መጠቀም ይችላሉ። በተለምዶ ቦቶች ክፍት የሆኑ 80 ወደቦችን በመፈለግ የአይፒ አድራሻን ያቋርጣሉ እና ስለድር አገልጋይ (ወይም መነሻ ገጽ) መረጃ ለማግኘት የ HEAD ጥያቄ ይልካሉ። በአይፒ አድራሻ ወደ አገልጋዩ መድረስን በመከልከል እንዲህ ዓይነቱን ቅኝት በቀላሉ መከላከል ይችላሉ (ወደ ቦታው ንዑስ ክፍል ያክሉ)

# vi /etc/nginx/nginx.conf

ከሆነ ($ አስተናጋጅ! ~ ^(host.com|www.host.com)$) (
መመለስ 444;
}

የድር አገልጋዩን ለመድረስ ያሉትን ዘዴዎች ብዛት ይገድቡ

አንዳንድ ቦቶች አይነትን ለማወቅ እና/ወይም ሰርጎ ለመግባት አገልጋዩን ለማግኘት የተለያዩ ዘዴዎችን ይጠቀማሉ፣ነገር ግን RFC 2616 በግልፅ እንደሚያሳየው የድር አገልጋዩ ሁሉንም ተግባራዊ ለማድረግ የማይፈለግ ሲሆን ያልተደገፉ ዘዴዎች በቀላሉ ላይሰሩ ይችላሉ። ዛሬ፣ GET (የሰነድ ጥያቄ)፣ HEAD (የአገልጋይ አርዕስት ጥያቄ) እና POST (የሰነድ ሕትመት ጥያቄ) ስልቶች ብቻ በአገልግሎት ላይ ይገኛሉ፣ ስለዚህ ሌሎቹን ሁሉ በማዋቀር ፋይሉ የአገልጋይ ክፍል ውስጥ በማስቀመጥ ያለምንም ህመም ሊሰናከሉ ይችላሉ።

# vi /etc/nginx/nginx.conf

ከሆነ ($ ጥያቄ_ዘዴ !~ ^(GET|HEAD|POST)$) (
መመለስ 444;
}

ቦቶቹን ይዝጉ

ቦቶች፣ ስካነሮች እና ሌሎች እርኩሳን መናፍስትን የሚከለክሉበት ሌላው መንገድ የደንበኛውን አይነት (የተጠቃሚ-ወኪል) በመወሰን ላይ የተመሰረተ ነው። እሱ በጣም ውጤታማ አይደለም ፣ ምክንያቱም አብዛኛዎቹ ቦቶች ሙሉ በሙሉ ህጋዊ አሳሾችን ያነጣጥራሉ ፣ ግን በአንዳንድ ሁኔታዎች ጠቃሚ ሆኖ ይቆያል።

# vi /etc/nginx/nginx.conf

# የማውረድ አስተዳዳሪዎችን አግድ
ከሆነ ($ http_user_agent ~* LWP :: ቀላል|BBBike|wget) (
መመለስ 403;
}
# አንዳንድ አይነት ቦቶች አግድ
ከሆነ ($ http_user_agent ~* msnbot|scrapbot)
መመለስ 403;
}

አጣቃሹን አይፈለጌ መልዕክት አግድ

የእርስዎ ጣቢያ የድር ምዝግብ ማስታወሻዎችን ለሕዝብ ተደራሽ በሆነ መልኩ ከታተመ በቀላሉ የሪፈርር አይፈለጌ መልእክት ሰለባ ሊሆኑ ይችላሉ (አይፈለጌ መልእክት ቦቶች አገልጋይዎን ሲያነጋግሩ ፣ በርዕሱ ላይ ጠቋሚውን - የማስታወቂያው ጣቢያ አድራሻ) ። ይህ አይፈለጌ መልዕክት የድረ-ገጽን SEO ደረጃ በቀላሉ ሊያበላሽ ስለሚችል ሳይሳካ መታገድ አለበት። ይህንን ለማድረግ አንዱ መንገድ በማስታወቂያ ጣቢያዎች አድራሻ ውስጥ የሚገኙትን በጣም የተለመዱ ቃላትን በጥቁር መዝገብ ውስጥ ማስገባት ነው።

# vi /etc/nginx/nginx.conf

# የአገልጋይ ክፍል
ከሆነ ($ http_referer ~* (ጨቅላዎች | ለሽያጭ | ልጃገረድ | ጌጣጌጥ | ፍቅር | ኑዲት | ኦርጋኒክ | ፖከር | የወሲብ | ወሲብ | ታዳጊ))
{
መመለስ 403;
}

መገናኛን አግድ

መገናኛ በገጽ ላይ ከሌላ ጣቢያ የመጣ ምስል (ወይም ሌላ ይዘት) ማካተት ነው። በመሰረቱ ይህ ስርቆት ነው፣ ምክንያቱም ነፃ ጊዜያችሁ ከአንድ ሰአት በላይ ያሳለፍክበት ምስል ሌሎች በነጻነት የሚጠቀሙበት ብቻ ሳይሆን በድር ሰርቨርህ ላይ ጎብኝዎችን ሳታመጣ ሸክም ስለሚፈጥር ነው። ትኩስ አገናኞችን ለመዋጋት ምስሎች ለደንበኛው የሚላኩት በጣቢያው ላይ እያለ ከጠየቀ ብቻ መሆኑን ማረጋገጥ በቂ ነው (በሌላ አነጋገር የማጣቀሻ ጥያቄ ራስጌ የጣቢያዎን ስም መያዝ አለበት)። የሚከተሉትን መስመሮች ወደ nginx.conf ውቅር ፋይል የአገልጋይ ክፍል ያክሉ (host.com የድር ጣቢያዎ አድራሻ ነው)

# vi /etc/nginx/nginx.conf

አካባቢ / ምስሎች / (
ትክክለኛ_ማጣቀሻዎች ምንም አልተከለከሉም www.host.com host.com;
($ ልክ ያልሆነ_ማጣቀሻ) ከሆነ (
መመለስ 403;
}
}

እንደ አማራጭ ከተጠየቀው ምስል ይልቅ ስለ ስርቆት መልእክት የያዘ ልዩ ባነር እንዲመልስ አገልጋዩን ማዋቀር ይችላሉ። ይህንን ለማድረግ "መመለስ 403" የሚለውን መስመር በመስመሩ ይተኩ፡

እንደገና ፃፍ ^/images/uploads።*\.(gif|jpg|jpeg|png)$ http://www.host.com/banned.jpg የመጨረሻ

አስፈላጊ ማውጫዎችን ከማያውቋቸው ሰዎች ይጠብቁ

ልክ እንደሌላው የድረ-ገጽ አገልጋይ nginx በአይፒ አድራሻዎች እና በይለፍ ቃል ላይ ተመስርተው የማውጫዎችን መዳረሻ እንዲቆጣጠሩ ይፈቅድልዎታል። ይህ ባህሪ የተወሰኑ የጣቢያው ክፍሎችን ከሚታዩ ዓይኖች ለመዝጋት ሊያገለግል ይችላል። ለምሳሌ፣ ዩአርአይን ከውጪው አለም ለማጥፋት፡-

# vi /etc/nginx/nginx.conf

ቦታ / ሰቀላ / (
# በአካባቢያዊ አውታረመረብ ላይ ወደ ማሽኖች ብቻ እንዲደርሱ ይፍቀዱ
ፍቀድ 192.168.1.0/24;
# ሌላውን ሁሉ እንግደል።
ሁሉንም መካድ;
}

አሁን የአካባቢ አውታረ መረብ ተጠቃሚዎች ብቻ በሰቀላ ማውጫ ውስጥ ሰነዶችን ማግኘት ይችላሉ። የይለፍ ቃል ለማዘጋጀት የበለጠ ውስብስብ ደረጃዎችን ማለፍ ያስፈልግዎታል። በመጀመሪያ ፣ ለ nginx የግል የይለፍ ቃል ፋይል መፍጠር እና አስፈላጊዎቹን ተጠቃሚዎች በእሱ ላይ ማከል ያስፈልግዎታል (ለምሳሌ ፣ የአስተዳዳሪውን ተጠቃሚ እንጨምር)

# mkdir /etc/nginx/.htpasswd
# htpasswd -c /etc/nginx/.htpasswd/passwd አስተዳዳሪ

# vi /etc/nginx/nginx.conf

አካባቢ / አስተዳዳሪ / (
auth_መሰረታዊ "የተገደበ";
auth_basic_user_file /etc/nginx/.htpasswd/passwd;
}

አዲስ ተጠቃሚዎች በሚከተለው ትዕዛዝ ሊታከሉ ይችላሉ፡

# htpasswd -s /etc/nginx/.htpasswd/passwd ተጠቃሚ

SSL ተጠቀም

የእርስዎ ጣቢያ እንደ የክሬዲት ካርድ ቁጥሮች፣ የሌሎች አገልግሎቶች የይለፍ ቃሎች፣ ወይም ለሶስተኛ ወገኖች ጣፋጭ ምግብ ሊሆኑ የሚችሉ ሌሎች ጠቃሚ መረጃዎችን ካሉ የግል የተጠቃሚ ውሂብ ጋር የሚሰራ ከሆነ ምስጠራን ይንከባከቡ። Nginx ከኤስኤስኤል ጋር በደንብ ይሰራል፣ እና ይህ ባህሪ ችላ ሊባል አይገባም።

nginxን በመጠቀም SSL ምስጠራን ለማዋቀር ጥቂት ቀላል ደረጃዎችን ብቻ ይከተሉ። በመጀመሪያ የሚከተሉትን የትዕዛዞች ቅደም ተከተል በመጠቀም የምስክር ወረቀት መፍጠር አለብዎት:

# ሲዲ /etc/nginx
# openssl genrsa -des3 -out server.key 1024
# openssl req -new -key server.key -out server.csr
# cp server.key server.key.org
# openssl rsa -in server.key.org -out server.key
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

ከዚያ የምስክር ወረቀቱን በ nginx ውቅር ፋይል ውስጥ ያብራሩ፡

# vi /etc/nginx/nginx.conf

አገልጋይ (
የአገልጋይ_ስም አስተናጋጅ.com;
አዳምጡ 443;
ssl በርቷል;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
access_log /etc/nginx/logs/ssl.access.log;
error_log /etc/nginx/logs/ssl.error.log;
}

ከዚህ በኋላ የድር አገልጋዩን እንደገና ማስጀመር ይችላሉ-

# /etc/init.d/nginx እንደገና መጫን

በተፈጥሮ፣ ከድረ-ገፁ በራሱ ድጋፍ ከሌለ፣ ይህን ማድረግ ምንም ፋይዳ የለውም።

ሌሎች ዘዴዎች

ለስርዓት ተለዋዋጮች ትክክለኛ እሴቶችን ያዘጋጁ

የ /etc/sysctl.conf ፋይሉን ይክፈቱ እና የሚከተሉትን መስመሮች በእሱ ውስጥ ያስቀምጡ:

# vi /etc/sysctl.conf

# ከስሙር ጥቃቶች መከላከል
net.ipv4.icmp_echo_ignore_broadcasts = 1
# ልክ ካልሆኑ ICMP መልዕክቶች ጥበቃ
net.ipv4.icmp_ignore_bogus_error_responses = 1
# ከSYN ጎርፍ መከላከል
net.ipv4.tcp_syncookies = 1
# የምንጭ ማዘዋወርን አሰናክል
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# ፀረ-ስፖፊንግ ጥበቃ
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# እኛ ራውተር አይደለንም።
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# ExecShieldን አንቃ
kernel.exec-shield = 1
kernel.randomize_va_space = 1
# የሚገኙትን ወደቦች ክልል ማስፋፋት።
net.ipv4.ip_local_port_ክልል = 2000 65000
# ከፍተኛውን የTCP ቋት መጠን ይጨምሩ
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1

የድር አገልጋይ ስርወ ማውጫውን በልዩ ክፍልፍል ላይ ያድርጉት

የዌብ ሰርቨር ስርወ ማውጫውን በልዩ ክፍልፍል ላይ በማስቀመጥ እና ማንኛውም ፈጻሚ ፋይሎች ወይም የመሳሪያ ፋይሎች እዚያ እንዳይቀመጡ በመከልከል የድህረ ገፅ ሰርቨር ስርወ ሊገባ ከሚችል ማንኛውም ሰው የቀረውን ስርዓት ትከላከላለህ። በዚህ አጋጣሚ በ /etc/fstab ፋይል ውስጥ ያለው ግቤት እንደዚህ ያለ ነገር መምሰል አለበት፡-

/dev/sda5/nginx ext4 ነባሪዎች፣nosuid፣noexec፣nodev 1 2

Nginx በ chroot/እስር ቤት አካባቢ ያስቀምጡ

ማንኛውም ዘመናዊ * ኒክስ ሲስተም መተግበሪያውን በገለልተኛ የማስፈጸሚያ አካባቢ ውስጥ እንዲቆልፉ ያስችልዎታል። በሊኑክስ ውስጥ KVM, Xen, OpenVZ እና VServer ቴክኖሎጂዎችን ለዚህ በ FreeBSD - Jail, Solaris - Zones መጠቀም ይችላሉ. ከእነዚህ ቴክኖሎጂዎች ውስጥ አንዳቸውም የማይገኙ ከሆነ, nginx ን በሚታወቀው chroot ውስጥ ማስቀመጥ ይችላሉ, ይህም ምንም እንኳን በጣም ደካማ ቢሆንም, ብዙ ጠላፊዎችን ማቆም ይችላል.

nginx ን ለመጠበቅ የ SELinux ደንቦችን ይጫኑ

ከተገለሉ የማስፈጸሚያ አካባቢዎች ጥሩ አማራጭ እንደ SELinux ወይም AppArmor ያሉ የአካባቢያዊ ጣልቃገብነት ማወቂያ እና መከላከያ ስርዓቶች ነው። በትክክል ከተዋቀረ የድር አገልጋዩን ለመጥለፍ የተደረጉ ሙከራዎችን መከላከል ይችላሉ። በነባሪ ፣ አንዳቸውም ከ nginx ጋር አብረው እንዲሠሩ አልተዋቀሩም ፣ ግን በፕሮጀክቱ ማዕቀፍ ውስጥ SELinuxNginx(http://sf.net/projects/selinuxnginx/) ማንኛውም ሰው ሊጠቀምበት የሚችል የ SELinux ደንቦች ተፈጥረዋል። የቀረው ማውረድ እና መጫን ብቻ ነው፡-

# tar -zxvf se-ngix_1_0_10.tar.gz
# ሲዲ ሰ-ngix_1_0_10/ nginx
#አድርግ
# /usr/sbin/semodule -i nginx.pp

ፋየርዎል ማዋቀር

በተለምዶ nginx ለከፍተኛ ጭነት በተዘጋጁ ልዩ ማሽኖች ላይ ተጭኗል፣ ስለዚህ በአገልጋዩ ላይ የሚሰራው ብቸኛው የአውታረ መረብ አገልግሎት ነው። የአገልጋዩን ደህንነት ለመጠበቅ ወደቦች 80 ፣ 110 እና 143 የሚከፍቱ በጣም ትንሽ ህጎችን መፍጠር በቂ ነው (በእርግጥ nginx እንዲሁ እንደ IMAP/POP3 ፕሮክሲ መስራት ካለበት) እና ሁሉንም ነገር ከውጪው ዓለም ይዝጉ። .

ፋየርዎልን በመጠቀም የግንኙነቶችን ብዛት ይገድቡ

ቀላል ለተጫነ ድረ-ገጽ ከአንድ የአይ ፒ አድራሻ በደቂቃ የሚደረጉ ሙከራዎችን መገደብ ጥሩ ነው። ይህ ከአንዳንድ የDoS ጥቃቶች እና ከጭካኔ ኃይል ሊከላከልልዎ ይችላል። በሊኑክስ ላይ፣ ይህ መደበኛ iptables/netfilter state ሞጁሉን በመጠቀም ሊከናወን ይችላል፡-

# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m ግዛት --ግዛት NEW -m የቅርብ --ስብስብ
# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m state --state NEW -m የቅርብ --ዝማኔ \
--ሰከንዶች 60 --መታ 15 -j DROP

ደንቦቹ የግንኙነቶችን ብዛት ከአንድ አይፒ በደቂቃ ወደ 15 ይቀንሳሉ ። PFን በመጠቀም እንዲሁ ማድረግ ይቻላል-

# vi /etc/pf.conf

webserver_ip="1.1.1.1"
ጠረጴዛ ቀጥል
በፍጥነት ከ
በ$ext_if proto tcp ወደ $webserver_ip ያስገቡ
ወደብ www ባንዲራዎች S/SA አቆይ ሁኔታ \
(max-src-conn 100፣max-src-conn-rate 15/60፣\
ከመጠን በላይ መጫን ማጠብ)

ከተከታታይ ግንኙነቶች ብዛት (15 በደቂቃ) ላይ ካለው ገደብ በተጨማሪ ይህ ደንብ ከ 100 ጋር እኩል በሆነ በተመሳሳይ ጊዜ ግንኙነቶች ላይ ተጨማሪ ገደብ ያስቀምጣል.

ፒኤችፒ ማዋቀር

Nginxን ከ PHP ጋር በማጣመር የሚጠቀሙ ከሆነ እሱን ማዋቀርዎን አይርሱ። ደህንነቱ የተጠበቀ አገልጋይ የውቅረት ፋይል /etc/php/php.ini መምሰል ያለበት ይህ ነው።

# vi /etc/php/php.ini

# አደገኛ ተግባራትን አሰናክል
disable_functions = phpinfo፣ ስርዓት፣ ሜይል፣ ኤክሰ
# ከፍተኛው የስክሪፕት ማስፈጸሚያ ጊዜ
max_execution_time = 30
# ስክሪፕቱ የጥያቄ ውሂብን በማስኬድ ሊያጠፋ የሚችለው ከፍተኛው ጊዜ
ከፍተኛው_ግቤት_ጊዜ = 60
ለእያንዳንዱ ስክሪፕት የሚመደብ ከፍተኛው የማህደረ ትውስታ መጠን
memory_limit = 8M
የPOST ዘዴን በመጠቀም ወደ ስክሪፕቱ የተላከ ከፍተኛው የውሂብ መጠን
post_max_size = 8ሚ
# ከፍተኛው የተሰቀሉ ፋይሎች መጠን
upload_max_filesize = 2ሚ
# የPHP ስክሪፕት ስህተቶችን ለተጠቃሚዎች አታሳይ
display_errors = ጠፍቷል
# ደህንነቱ የተጠበቀ ሁነታን አንቃ
safe_mode = በርቷል
# SQL ደህንነቱ የተጠበቀ ሁነታን አንቃ
sql.safe_mode = በርቷል
# ውጫዊ ትዕዛዞች በዚህ ማውጫ ውስጥ ብቻ እንዲፈጸሙ ፍቀድ
safe_mode_exec_dir = /መንገድ/ወደ/የተጠበቀ/ዳይሬክቶሪ
# ስለ ፒኤችፒ የመረጃ ፍሰትን ይጠብቁ
expose_php = ጠፍቷል
# መዝገቦችን እንይዛለን።
log_errors = በርቷል
# የርቀት ፋይሎችን መክፈት ይከለክላል
allow_url_fopen = ጠፍቷል

መደምደሚያዎች

በዚህ ጽሑፍ ውስጥ የተገለጹትን ምክሮች በመተግበር የበለጠ ደህንነቱ የተጠበቀ የድር አገልጋይ ያገኛሉ። ነገር ግን ሁሉም ቴክኒኮች ከእርስዎ ውቅር ጋር እንደማይስማሙ ያስታውሱ. ለምሳሌ፣ የደንበኛ ጥያቄዎችን ለማስኬድ በ nginx የተመደበውን የመጠባበቂያ መጠን በመቀነስ ላይ የተመሰረተ የብሩት ሃይል ጥበቃ የአፈፃፀሙን መቀነስ እና በአንዳንድ አጋጣሚዎች ጥያቄዎችን ወደ ማሰናከል ሊያመራ ይችላል። የግንኙነቶችን ብዛት መገደብ መጠነኛ የተጫነውን ድረ-ገጽ አፈጻጸም ላይ በእጅጉ ይጎዳል፣ ነገር ግን ገጹ ዝቅተኛ ትራፊክ ካለው ይጠቅማል። ሁልጊዜ የሚያደርጓቸው ለውጦች የድረ-ገጹን አፈጻጸም እና አጠቃላይ ጤና እንዴት እንደሚነኩ ያረጋግጡ።

ስለ ዘመኑ ጀግና

Nginx በዓለም ላይ ካሉ በጣም ኃይለኛ እና ታዋቂ የድር አገልጋዮች አንዱ ነው። እንደ ኔትክራፍት ገለጻ እንደ ራምብለር፣ Yandex፣ Begun፣ WordPress.com፣ Wrike፣ vkontakte.ru፣ megashara.com፣ Librusec እና Taba.ru ያሉ ማስቶዶኖችን ጨምሮ በዓለም ዙሪያ ከ12 ሚሊዮን በላይ ድረ-ገጾችን ለመደገፍ ይጠቅማል። ምረጥ፣ epoll (Linux)፣ kqueue (FreeBSD) የስርዓት ጥሪዎችን እና በገንዳዎች ላይ የተመሰረተ የማህደረ ትውስታ አስተዳደር ዘዴ (ከ1 እስከ 16 ኪ.ቢ. ያሉት ትናንሽ ቋት) በመጠቀም ብቁ የሆነ አርክቴክቸር በከፍተኛ ጭነት ውስጥ እንኳን እንዳይዘገይ ያስችለዋል። ከ10,000 በላይ በአንድ ጊዜ የሚገናኙ ግንኙነቶች (የ C10K ችግር ተብሎ የሚጠራው)። በመጀመሪያ በ Igor Sysoev ለ Rambler የተፃፈ እና በ 2004 በቢኤስዲ መሰል ፍቃድ የተከፈተ።

ጋር ግንኙነት ውስጥ