рдПрдирдЬреАрдЖрдпрдПрдирдПрдХреНрд╕ рдпреБрдирд┐рдЯ рдЖрдгрд┐ рдЙрдмрдВрдЯреВрд╕рд╣ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди

рдПрдирдЬреАрдЖрдпрдПрдирдПрдХреНрд╕ рдпреБрдирд┐рдЯ рдЖрдгрд┐ рдЙрдмрдВрдЯреВрд╕рд╣ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди

рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдХрд╕реЗ рдкреНрд░рддрд┐рд╖реНрдард╛рдкреАрдд рдХрд░рд╛рдпрдЪреЗ рдпрд╛рдмрджреНрджрд▓ рдЕрдиреЗрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЖрд╣реЗрдд, "рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕реНрдерд╛рдкрд┐рдд" рд╕рд╛рдареА Google рд╢реЛрдз рд╕реБрдорд╛рд░реЗ рдЕрд░реНрдзрд╛ рджрд╢рд▓рдХреНрд╖ рдкрд░рд┐рдгрд╛рдо рджреЗрдИрд▓. рддрдерд╛рдкрд┐, рдЦрд░рдВ рддрд░, рддреНрдпрд╛рдВрдЪреНрдпрд╛рдордзреНрдпреЗ рдЦреВрдк рдХрдореА рдЪрд╛рдВрдЧрд▓реЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдЖрд╣реЗрдд, рдЬреНрдпрд╛рдиреБрд╕рд╛рд░ рдЖрдкрдг рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдЖрдгрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд╛рдкрд┐рдд рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рд╢рдХрддрд╛ рдЬреЗрдгреЗрдХрд░реВрди рддреЗ рджреАрд░реНрдШ рдХрд╛рд▓рд╛рд╡рдзреАрд╕рд╛рдареА рд╕рдорд░реНрдерди рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕рддреАрд▓. рдХрджрд╛рдЪрд┐рдд рдпреЛрдЧреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧрд░рдЬрд╛рдВрд╡рд░ рдЦреВрдк рдЕрд╡рд▓рдВрдмреВрди рдЖрд╣реЗрдд рдХрд┐рдВрд╡рд╛ рд╣реЗ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгрд╛рдореБрд│реЗ рд▓реЗрдЦ рд╡рд╛рдЪрдгреЗ рдХрдареАрдг рд╣реЛрддреЗ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдореБрд│реЗ рдЖрд╣реЗ.

рдпрд╛ рд▓реЗрдЦрд╛рдд, рдЖрдореНрд╣реА рдЙрдмрдВрдЯреВрд╡рд░ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмреЕрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рджрд╛рди рдХрд░реВрди, рддрд╕реЗрдЪ рдкреНрд░рддреНрдпреЗрдХ рддреБрдХрдбрд╛ рдХрд╛рдп рдХрд░рддреЛ, рддрд╕реЗрдЪ рддреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛рдирд╛ рдЖрдореНрд╣реА рдХреЗрд▓реЗрд▓реНрдпрд╛ рддрдбрдЬреЛрдбреАрдЪреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрдКрди, рджреЛрдиреНрд╣реА рдЬрдЧрд╛рддреАрд▓ рд╕рд░реНрд╡реЛрддреНрддрдо рдПрдХрддреНрд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ. . рдЖрдкрдг рдкреНрд░рдЧрдд рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдкрдг рд▓реЗрдЦрд╛рдЪрд╛ рдордЬрдХреВрд░ рд╡рдЧрд│реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдлрдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдШреНрдпрд╛ рдЖрдкрд▓реНрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдмрджрд▓ рдЖрдгрд┐ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА. рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реЗ рд▓реЗрдЯреНрд╕ рдПрдирдХреНрд░рд┐рдкреНрдЯ рд╕рдкреЛрд░реНрдЯрд╕рд╣ рд╕рд╛рдиреБрдХреВрд▓ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЖрд╣реЗ, рдЬреЗ NGINX рдпреБрдирд┐рдЯрд╡рд░ рдЪрд╛рд▓рддреЗ рдЖрдгрд┐ рдЙрддреНрдкрд╛рджрди рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдЖрд╣реЗ.

NGINX рдпреБрдирд┐рдЯ рд╡рд╛рдкрд░реВрди рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рдХрд╕рд┐рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ рдЬреБрдирд╛ рд▓реЗрдЦ, рдЖрддрд╛ рдЖрдореНрд╣реА рддреНрдпрд╛ рдЧреЛрд╖реНрдЯреА рджреЗрдЦреАрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рдЬреНрдпрд╛ рддреЗрдереЗ рдХрд╡реНрд╣рд░ рдХреЗрд▓реНрдпрд╛ рдирд╡реНрд╣рддреНрдпрд╛ (рдЗрддрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкреНрд░рдорд╛рдгреЗ):

  • рд╡рд░реНрдбрдкреНрд░реЗрд╕ CLI
  • рдЪрд▓рд╛ рдХреВрдЯрдмрджреНрдз рдХрд░реВ рдЖрдгрд┐ TLSSSL рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ
  • рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдЪреЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдиреВрддрдиреАрдХрд░рдг
  • NGINX рдХреЕрд╢рд┐рдВрдЧ
  • рдПрдирдЬреАрдЖрдпрдПрдирдПрдХреНрд╕ рдХреЙрдореНрдкреНрд░реЗрд╢рди
  • HTTPS рдЖрдгрд┐ HTTP/2 рд╕рдорд░реНрдерди
  • рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдСрдЯреЛрдореЗрд╢рди

рд▓реЗрдЦ рдПрдХрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЗрдиреНрд╕реНрдЯреЙрд▓реЗрд╢рдирдЪреЗ рд╡рд░реНрдгрди рдХрд░реЗрд▓, рдЬреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рд╕реНрдЯреЕрдЯрд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рд░реНрд╡реНрд╣рд░, PHP рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рд░реНрд╡реНрд╣рд░ рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реЛрд╕реНрдЯ рдХрд░реЗрд▓. рдПрдХрд╛рдзрд┐рдХ рдЖрднрд╛рд╕реА рд╣реЛрд╕реНрдЯ рдЖрдгрд┐ рд╕реЗрд╡рд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрдгрд╛рд░реА рд╕реНрдерд╛рдкрдирд╛ рднрд╡рд┐рд╖реНрдпрд╛рд╕рд╛рдареА рд╕рдВрднрд╛рд╡реНрдп рд╡рд┐рд╖рдп рдЖрд╣реЗ. рдпрд╛ рд▓реЗрдЦрд╛рдВрдордзреНрдпреЗ рдирд╕рд▓реЗрд▓реНрдпрд╛ рдПрдЦрд╛рджреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдмрджреНрджрд▓ рдЖрдкрдг рд▓рд┐рд╣реВ рдЗрдЪреНрдЫрд┐рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд╛.

рдЖрд╡рд╢реНрдпрдХрддрд╛

  • рдХрдВрдЯреЗрдирд░ рд╕рд░реНрд╡реНрд╣рд░ (рдПрд▓рдПрдХреНрд╕рд╕реА рдХрд┐рдВрд╡рд╛ рдПрд▓рдПрдХреНрд╕рдбреА), рд╡рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди, рдХрд┐рдВрд╡рд╛ рдХрд┐рдорд╛рди 512MB RAM рдЖрдгрд┐ Ubuntu 18.04 рдХрд┐рдВрд╡рд╛ рдирд╡реАрди рд╕реНрдерд╛рдкрд┐рдд рдЕрд╕рд▓реЗрд▓реЗ рдирд┐рдпрдорд┐рдд рд▓реЛрд╣ рд╕рд░реНрд╡реНрд╣рд░.
  • рдЗрдВрдЯрд░рдиреЗрдЯ рдкреНрд░рд╡реЗрд╢рдпреЛрдЧреНрдп рдкреЛрд░реНрдЯ 80 рдЖрдгрд┐ 443
  • рдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдпрдкреА рдкрддреНрддреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдбреЛрдореЗрди рдирд╛рд╡
  • рд░реВрдЯ рдкреНрд░рд╡реЗрд╢ (sudo).

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди

рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╡рд░реНрдгрди рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗрдЪ рдЖрд╣реЗ рдкреВрд░реНрд╡реА, рддреАрди-рд╕реНрддрд░реАрдп рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ. рдпрд╛рдд PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдЕрд╕рддрд╛рдд рдЬреНрдпрд╛ PHP рдЗрдВрдЬрд┐рдирд╡рд░ рдЪрд╛рд▓рддрд╛рдд рдЖрдгрд┐ рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░рджреНрд╡рд╛рд░реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд┐рд░ рдлрд╛рдпрд▓реА рдЕрд╕рддрд╛рдд.

рдПрдирдЬреАрдЖрдпрдПрдирдПрдХреНрд╕ рдпреБрдирд┐рдЯ рдЖрдгрд┐ рдЙрдмрдВрдЯреВрд╕рд╣ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди

рд╕рд╛рдорд╛рдиреНрдп рддрддреНрддреНрд╡реЗ

  • рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреАрд▓ рдЕрдиреЗрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрдорд╛рдВрдбреНрд╕ рдЗрдбрдореНрдкреЛрдЯреЗрдиреНрд╕реАрдЪреНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдордзреНрдпреЗ рдЧреБрдВрдбрд╛рд│рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд: рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдзреАрдкрд╛рд╕реВрди рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдмрджрд▓рдгреНрдпрд╛рдЪреНрдпрд╛ рдЬреЛрдЦрдореАрд╢рд┐рд╡рд╛рдп рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рдЪрд╛рд▓рд╡рд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд.
  • рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬрдордзреВрди рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЗрдиреНрд╕реНрдЯреЙрд▓ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА рдПрдХрд╛ рдХрдорд╛рдВрдбрдордзреНрдпреЗ рд╕рд┐рд╕реНрдЯрдо рдЕрдкрдбреЗрдЯреНрд╕ рд▓рд╛рдЧреВ рдХрд░реВ рд╢рдХрддрд╛ (apt upgrade рдЙрдмрдВрдЯреВ рд╕рд╛рдареА).
  • рдХрдорд╛рдВрдбреНрд╕ рддреЗ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдЪрд╛рд▓рдд рдЖрд╣реЗрдд рд╣реЗ рд╢реЛрдзрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛рдд рдЬреЗрдгреЗрдХрд░реВрди рддреЗ рддреНрдпрд╛рдиреБрд╕рд╛рд░ рддреНрдпрд╛рдВрдЪреА рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдмрджрд▓реВ рд╢рдХрддреАрд▓.
  • рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рд╕реБрд░реВ рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рдереНрд░реЗрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдЯреЗрдирд░, рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдЖрдгрд┐ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░ рд╕рд░реНрд╡реНрд╣рд░рдордзреНрдпреЗ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдЪрд╛ рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЗ.
  • рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддрд╛рдирд╛, рдЖрдореНрд╣реА рдиреЗрд╣рдореА рдСрдЯреЛрдореЗрд╢рдирдмрджреНрджрд▓ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЛ, рдЬреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА, рдХреЛрдб рдореНрд╣рдгреВрди рддреБрдордЪреА рд╕реНрд╡рддрдГрдЪреА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдзрд╛рд░ рдмрдиреЗрд▓.
  • рд╕рд░реНрд╡ рдЖрджреЗрд╢ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдореНрд╣рдгреВрди рдЪрд╛рд▓рд╡рд▓реЗ рдЬрд╛рддрд╛рдд рдореВрд│, рдХрд╛рд░рдг рддреЗ рдореВрд▓рднреВрдд рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдмрджрд▓рддрд╛рдд, рдкрд░рдВрддреБ рдереЗрдЯ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдирд┐рдпрдорд┐рдд рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдореНрд╣рдгреВрди рдЪрд╛рд▓рддреЗ.

рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдХрд░рдгреЗ

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдЦрд╛рд▓реАрд▓ рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЪрд▓ рд╕реЗрдЯ рдХрд░рд╛:

  • WORDPRESS_DB_PASSWORD - рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд╛рд╕рд╡рд░реНрдб
  • WORDPRESS_ADMIN_USER - рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдкреНрд░рд╢рд╛рд╕рдХ рдирд╛рд╡
  • WORDPRESS_ADMIN_PASSWORD - рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдкреНрд░рд╢рд╛рд╕рдХ рдкрд╛рд╕рд╡рд░реНрдб
  • WORDPRESS_ADMIN_EMAIL - рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдкреНрд░рд╢рд╛рд╕рдХ рдИрдореЗрд▓
  • WORDPRESS_URL рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕рд╛рдЗрдЯрдЪреА рдкреВрд░реНрдг URL рдЖрд╣реЗ, рдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрддреЗ https://.
  • LETS_ENCRYPT_STAGING - рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд░рд┐рдХреНрдд, рдкрд░рдВрддреБ рдореВрд▓реНрдп 1 рд╡рд░ рд╕реЗрдЯ рдХрд░реВрди, рддреБрдореНрд╣реА рд▓реЗрдЯреНрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдкрд░рд╛рд▓, рдЬреЗ рддреБрдордЪреНрдпрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдд рдЕрд╕рддрд╛рдирд╛ рд╡рд╛рд░рдВрд╡рд╛рд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд, рдЕрдиреНрдпрдерд╛ рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдЪреНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдореБрд│реЗ рд▓реЗрдЯреНрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рддреБрдордЪрд╛ рдЖрдпрдкреА рдкрддреНрддрд╛ рддрд╛рддреНрдкреБрд░рддреЗ рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░реВ рд╢рдХрддреЗ. .

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдкрд╛рд╕рддреЗ рдХреА рд╣реЗ рд╡рд░реНрдбрдкреНрд░реЗрд╕-рд╕рдВрдмрдВрдзрд┐рдд рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдЖрд╣реЗрдд рдЖрдгрд┐ рдирд╕рд▓реНрдпрд╛рд╕ рдмрд╛рд╣реЗрд░ рдкрдбрддрд╛рдд.
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдУрд│реА 572-576 рдореВрд▓реНрдп рддрдкрд╛рд╕рд╛ LETS_ENCRYPT_STAGING.

рд╡реНрдпреБрддреНрдкрдиреНрди рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдХрд░рдгреЗ

рдУрд│реА 55-61 рд╡рд░реАрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦрд╛рд▓реАрд▓ рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЪрд▓ рд╕реЗрдЯ рдХрд░рддреЗ, рдПрдХрддрд░ рдХрд╛рд╣реА рд╣рд╛рд░реНрдб-рдХреЛрдбреЗрдб рдореВрд▓реНрдпрд╛рд╡рд░ рдХрд┐рдВрд╡рд╛ рдорд╛рдЧреАрд▓ рд╡рд┐рднрд╛рдЧрд╛рдд рд╕реЗрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдордзреВрди рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓реЗ рдореВрд▓реНрдп рд╡рд╛рдкрд░реВрди:

  • DEBIAN_FRONTEND="noninteractive" - рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдирд╛ рд╕рд╛рдВрдЧрддреЗ рдХреА рддреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рдЪрд╛рд▓рдд рдЖрд╣реЗрдд рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдЪреА рдХреЛрдгрддреАрд╣реА рд╢рдХреНрдпрддрд╛ рдирд╛рд╣реА.
  • WORDPRESS_CLI_VERSION="2.4.0" рд╡рд░реНрдбрдкреНрд░реЗрд╕ CLI рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреА рдЖрд╡реГрддреНрддреА рдЖрд╣реЗ.
  • WORDPRESS_CLI_MD5= "dedd5a662b80cda66e9e25d44c23b25c" тАФ рд╡рд░реНрдбрдкреНрд░реЗрд╕ CLI 2.4.0 рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓рдЪрд╛ рдЪреЗрдХрд╕рдо (рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рдЖрд╡реГрддреНрддреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реА рдЖрд╣реЗ WORDPRESS_CLI_VERSION). рдУрд│ 162 рд╡рд░реАрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпреЛрдЧреНрдп рд╡рд░реНрдбрдкреНрд░реЗрд╕ CLI рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ рд╣реЗ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдореВрд▓реНрдп рд╡рд╛рдкрд░рддреЗ.
  • UPLOAD_MAX_FILESIZE="16M" - рд╡рд░реНрдбрдкреНрд░реЗрд╕рдордзреНрдпреЗ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рдпреЗрдгрд╛рд░реА рдХрдорд╛рд▓ рдлрд╛рдЗрд▓ рдЖрдХрд╛рд░. рд╣реЗ рд╕реЗрдЯрд┐рдВрдЧ рдЕрдиреЗрдХ рдард┐рдХрд╛рдгреА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рддреЗ рдПрдХрд╛рдЪ рдард┐рдХрд╛рдгреА рд╕реЗрдЯ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ.
  • TLS_HOSTNAME= "$(echo ${WORDPRESS_URL} | cut -d'/' -f3)" - рд╕рд┐рд╕реНрдЯрдордЪреЗ рд╣реЛрд╕реНрдЯрдирд╛рд╡, WORDPRESS_URL рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреВрди рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗ рдЖрд╣реЗ. Let's Encrypt рддрд╕реЗрдЪ рдЕрдВрддрд░реНрдЧрдд WordPress рдкрдбрддрд╛рд│рдгреАрд╡рд░реВрди рдпреЛрдЧреНрдп TLS/SSL рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ.
  • NGINX_CONF_DIR="/etc/nginx" - рдореБрдЦреНрдп рдлрд╛рдЗрд▓рд╕рд╣ NGINX рд╕реЗрдЯрд┐рдВрдЧреНрдЬрд╕рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдЪрд╛ рдорд╛рд░реНрдЧ nginx.conf.
  • CERT_DIR="/etc/letsencrypt/live/${TLS_HOSTNAME}" тАФ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕рд╛рдЗрдЯрд╕рд╛рдареА рд▓реЗрдЯреНрд╕ рдПрдирдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдЪрд╛ рдорд╛рд░реНрдЧ, рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреВрди рдкреНрд░рд╛рдкреНрдд TLS_HOSTNAME.

рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рд╣реЛрд╕реНрдЯрдирд╛рд╡ рдирд┐рдпреБрдХреНрдд рдХрд░рдгреЗ

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╛рдЗрдЯрдЪреНрдпрд╛ рдбреЛрдореЗрди рдирд╛рд╡рд╛рд╢реА рдЬреБрд│рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡реНрд╣рд░рдЪреЗ рд╣реЛрд╕реНрдЯрдирд╛рд╡ рд╕реЗрдЯ рдХрд░рддреЗ. рд╣реЗ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА, рдкрд░рдВрддреБ рд╕реНрдХреНрд░рд┐рдкреНрдЯрджреНрд╡рд╛рд░реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдПрдХрд▓ рд╕рд░реНрд╡реНрд╣рд░ рд╕реЗрдЯ рдХрд░рддрд╛рдирд╛ SMTP рджреНрд╡рд╛рд░реЗ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдореЗрд▓ рдкрд╛рдард╡рдгреЗ рдЕрдзрд┐рдХ рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

# Change the hostname to be the same as the WordPress hostname
if [ ! "$(hostname)" == "${TLS_HOSTNAME}" ]; then
  echo " Changing hostname to ${TLS_HOSTNAME}"
  hostnamectl set-hostname "${TLS_HOSTNAME}"
fi

рд╣реЛрд╕реНрдЯрдирд╛рд╡ /etc/hosts рдордзреНрдпреЗ рдЬреЛрдбрдд рдЖрд╣реЗ

рдЬреЛрдб WP-Cron рдирд┐рдпрддрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЗ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ, рд╡рд░реНрдбрдкреНрд░реЗрд╕рд▓рд╛ HTTP рджреНрд╡рд╛рд░реЗ рд╕реНрд╡рддрдГрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. WP-Cron рд╕рд░реНрд╡ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдПрдХ рдУрд│ рдЬреЛрдбрддреЗ / Etc / рд╕рд░реНрд╡рд╢рдХреНрддрд┐рдорд╛рдирдЬреЗрдгреЗрдХрд░реВрди рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд▓реВрдкрдмреЕрдХ рдЗрдВрдЯрд░рдлреЗрд╕рджреНрд╡рд╛рд░реЗ рд╕реНрд╡рддрдГрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХреЗрд▓:

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

# Add the hostname to /etc/hosts
if [ "$(grep -m1 "${TLS_HOSTNAME}" /etc/hosts)" = "" ]; then
  echo " Adding hostname ${TLS_HOSTNAME} to /etc/hosts so that WordPress can ping itself"
  printf "::1 %sn127.0.0.1 %sn" "${TLS_HOSTNAME}" "${TLS_HOSTNAME}" >> /etc/hosts
fi

рдкреБрдвреАрд▓ рдЪрд░рдгрд╛рдВрд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдзрдиреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ

рдЙрд░реНрд╡рд░рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓рд╛ рдХрд╛рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдЬ рдЕрджреНрдпрдпрд╛рд╡рдд рдЖрд╣реЗрдд рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рддреЗ. рдЖрдореНрд╣реА рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬрдЪреА рд╕реВрдЪреА рдЕрджреНрдпрддрдирд┐рдд рдХрд░рддреЛ, рддреНрдпрд╛рдирдВрддрд░ рдЖрдореНрд╣реА рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдзрдиреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЛ:

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

# Make sure tools needed for install are present
echo " Installing prerequisite tools"
apt-get -qq update
apt-get -qq install -y 
  bc 
  ca-certificates 
  coreutils 
  curl 
  gnupg2 
  lsb-release

NGINX рдпреБрдирд┐рдЯ рдЖрдгрд┐ NGINX рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рдЬреЛрдбрдд рдЖрд╣реЗ

рдирд╡реАрдирддрдо рд╕рд┐рдХреНрдпреБрд░рд┐рдЯреА рдкреЕрдЪ рдЖрдгрд┐ рдмрдЧ рдлрд┐рдХреНрд╕реЗрд╕ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдзрд┐рдХреГрдд NGINX рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдЬрдордзреВрди NGINX рдпреБрдирд┐рдЯ рдЖрдгрд┐ рдУрдкрди рд╕реЛрд░реНрд╕ NGINX рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ NGINX рдпреБрдирд┐рдЯ рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдЖрдгрд┐ рдирдВрддрд░ NGINX рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдЬреЛрдбрддреЗ, рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдЬ рдХреА рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕ рдЬреЛрдбрддреЗ apt, рдЗрдВрдЯрд░рдиреЗрдЯрджреНрд╡рд╛рд░реЗ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ.

NGINX рдпреБрдирд┐рдЯ рдЖрдгрд┐ NGINX рдЪреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд╛рдкрдирд╛ рдкреБрдвреАрд▓ рд╡рд┐рднрд╛рдЧрд╛рдд рд╣реЛрддреЗ. рдЖрдореНрд╣реА рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рдкреВрд░реНрд╡-рдЬреЛрдбрддреЛ рддреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рдЕрдкрдбреЗрдЯ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрдгрд╛рд░ рдирд╛рд╣реА, рдЬреНрдпрд╛рдореБрд│реЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЬрд▓рдж рд╣реЛрддреЗ.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

# Install the NGINX Unit repository
if [ ! -f /etc/apt/sources.list.d/unit.list ]; then
  echo " Installing NGINX Unit repository"
  curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
  echo "deb https://packages.nginx.org/unit/ubuntu/ $(lsb_release -cs) unit" > /etc/apt/sources.list.d/unit.list
fi

# Install the NGINX repository
if [ ! -f /etc/apt/sources.list.d/nginx.list ]; then
  echo " Installing NGINX repository"
  curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
  echo "deb https://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" > /etc/apt/sources.list.d/nginx.list
fi

рдПрдирдЬреАрдЖрдпрдПрдирдПрдХреНрд╕, рдПрдирдЬреАрдЖрдпрдПрдирдПрдХреНрд╕ рдпреБрдирд┐рдЯ, рдкреАрдПрдЪрдкреА рдорд╛рд░рд┐рдпрд╛рдбреАрдмреА, рд╕рд░реНрдЯрдмреЙрдЯ (рдЪрд▓рд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реВ) рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ

рдПрдХрджрд╛ рд╕рд░реНрд╡ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рдЬреЛрдбрд▓реНрдпрд╛рдирдВрддрд░, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рд╛ рдЖрдгрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛. рд╕реНрдХреНрд░рд┐рдкреНрдЯрджреНрд╡рд╛рд░реЗ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреЕрдХреЗрдЬрдордзреНрдпреЗ WordPress.org рдЪрд╛рд▓рд╡рддрд╛рдирд╛ рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓реЗ PHP рд╡рд┐рд╕реНрддрд╛рд░ рджреЗрдЦреАрд▓ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

echo " Updating repository metadata"
apt-get -qq update

# Install PHP with dependencies and NGINX Unit
echo " Installing PHP, NGINX Unit, NGINX, Certbot, and MariaDB"
apt-get -qq install -y --no-install-recommends 
  certbot 
  python3-certbot-nginx 
  php-cli 
  php-common 
  php-bcmath 
  php-curl 
  php-gd 
  php-imagick 
  php-mbstring 
  php-mysql 
  php-opcache 
  php-xml 
  php-zip 
  ghostscript 
  nginx 
  unit 
  unit-php 
  mariadb-server

NGINX рдпреБрдирд┐рдЯ рдЖрдгрд┐ WordPress рд╕рд╣ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА PHP рд╕реЗрдЯ рдХрд░рдгреЗ

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рддреЗ conf.d. рд╣реЗ PHP рдЕрдкрд▓реЛрдбрд╕рд╛рдареА рдХрдорд╛рд▓ рдЖрдХрд╛рд░ рд╕реЗрдЯ рдХрд░рддреЗ, PHP рддреНрд░реБрдЯреА рдЖрдЙрдЯрдкреБрдЯ STDERR рд╡рд░ рдЪрд╛рд▓реВ рдХрд░рддреЗ рдЬреЗрдгреЗрдХрд░реВрди рддреЗ NGINX рдпреБрдирд┐рдЯ рд▓реЙрдЧрдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗ рдЬрд╛рддреАрд▓ рдЖрдгрд┐ NGINX рдпреБрдирд┐рдЯ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рд╣реЛрдИрд▓.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

# Find the major and minor PHP version so that we can write to its conf.d directory
PHP_MAJOR_MINOR_VERSION="$(php -v | head -n1 | cut -d' ' -f2 | cut -d'.' -f1,2)"

if [ ! -f "/etc/php/${PHP_MAJOR_MINOR_VERSION}/embed/conf.d/30-wordpress-overrides.ini" ]; then
  echo " Configuring PHP for use with NGINX Unit and WordPress"
  # Add PHP configuration overrides
  cat > "/etc/php/${PHP_MAJOR_MINOR_VERSION}/embed/conf.d/30-wordpress-overrides.ini" << EOM
; Set a larger maximum upload size so that WordPress can handle
; bigger media files.
upload_max_filesize=${UPLOAD_MAX_FILESIZE}
post_max_size=${UPLOAD_MAX_FILESIZE}
; Write error log to STDERR so that error messages show up in the NGINX Unit log
error_log=/dev/stderr
EOM
fi

# Restart NGINX Unit because we have reconfigured PHP
echo " Restarting NGINX Unit"
service unit restart

рд╡рд░реНрдбрдкреНрд░реЗрд╕рд╕рд╛рдареА рдорд╛рд░рд┐рдпрд╛рдбреАрдмреА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ

рдЖрдореНрд╣реА рдорд╛рдпрдПрд╕рдХреНрдпреВрдПрд▓рд╡рд░ рдорд╛рд░рд┐рдпрд╛рдбреАрдмреА рдирд┐рд╡рдбрд▓реЗ рдЖрд╣реЗ рдХрд╛рд░рдг рддреНрдпрд╛рдд рдЕрдзрд┐рдХ рд╕рдореБрджрд╛рдп рдХреНрд░рд┐рдпрд╛рдХрд▓рд╛рдк рдЖрд╣реЗ рдЖрдгрд┐ рд╣реЛрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЖрд╣реЗ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдЪрд╛рдВрдЧрд▓реЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ (рдХрджрд╛рдЪрд┐рдд, рдпреЗрдереЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рд╕реЛрдкреЗ рдЖрд╣реЗ: MySQL рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рджреБрд╕рд░реЗ рднрд╛рдВрдбрд╛рд░ рдЬреЛрдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЕрдВрджрд╛рдЬреЗ рдЕрдиреБрд╡рд╛рджрдХ).

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдирд╡реАрди рдбреЗрдЯрд╛рдмреЗрд╕ рддрдпрд╛рд░ рдХрд░рддреЗ рдЖрдгрд┐ рд▓реВрдкрдмреЕрдХ рдЗрдВрдЯрд░рдлреЗрд╕рджреНрд╡рд╛рд░реЗ рд╡рд░реНрдбрдкреНрд░реЗрд╕рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреНрд░реЗрдбреЗрдиреНрд╢рд┐рдпрд▓ рддрдпрд╛рд░ рдХрд░рддреЗ:

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

# Set up the WordPress database
echo " Configuring MariaDB for WordPress"
mysqladmin create wordpress || echo "Ignoring above error because database may already exist"
mysql -e "GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"localhost" IDENTIFIED BY "$WORDPRESS_DB_PASSWORD"; FLUSH PRIVILEGES;"

рд╡рд░реНрдбрдкреНрд░реЗрд╕ CLI рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдд рдЖрд╣реЗ

рдпрд╛ рдЪрд░рдгрд╛рд╡рд░, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ WP CLI. рддреНрдпрд╛рд╕рд╣, рддреБрдореНрд╣реА рдлрд╛рдЗрд▓реНрд╕ рдореЕрдиреНрдпреБрдЕрд▓реА рд╕рдВрдкрд╛рджрд┐рдд рди рдХрд░рддрд╛, рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдкрдбреЗрдЯ рди рдХрд░рддрд╛ рдХрд┐рдВрд╡рд╛ рдХрдВрдЯреНрд░реЛрд▓ рдкреЕрдирд▓рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рди рдХрд░рддрд╛ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рд╕реНрдерд╛рдкрд┐рдд рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ рд╢рдХрддрд╛. рд╣реЗ рдереАрдо рдЖрдгрд┐ рдЕреЕрдб-рдСрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдЕрдкрдбреЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

if [ ! -f /usr/local/bin/wp ]; then
  # Install the WordPress CLI
  echo " Installing the WordPress CLI tool"
  curl --retry 6 -Ls "https://github.com/wp-cli/wp-cli/releases/download/v${WORDPRESS_CLI_VERSION}/wp-cli-${WORDPRESS_CLI_VERSION}.phar" > /usr/local/bin/wp
  echo "$WORDPRESS_CLI_MD5 /usr/local/bin/wp" | md5sum -c -
  chmod +x /usr/local/bin/wp
fi

рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд░реНрдбрдкреНрд░реЗрд╕рдЪреА рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреА рдПрдХрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ /var/www/wordpressрдЖрдгрд┐ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рджреЗрдЦреАрд▓ рдмрджрд▓рддреЗ:

  • TCP рд░рд╣рджрд╛рд░реА рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд▓реВрдкрдмреЕрдХрд╡рд░ TCP рдРрд╡рдЬреА рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдпреБрдирд┐рдХреНрд╕ рдбреЛрдореЗрди рд╕реЙрдХреЗрдЯрд╡рд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ.
  • рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрддреЛ https:// рдЬрд░ рдХреНрд▓рд╛рдпрдВрдЯ HTTPS рд╡рд░реВрди NGINX рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдд рдЕрд╕рддреАрд▓ рдЖрдгрд┐ PHP рд▓рд╛ рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯрдирд╛рд╡ (NGINX рджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ) рдкрд╛рдард╡рд▓реНрдпрд╛рд╕ URL рд▓рд╛. рд╣реЗ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдХреЛрдбрдЪрд╛ рдПрдХ рднрд╛рдЧ рд╡рд╛рдкрд░рддреЛ.
  • рд▓реЙрдЧрд┐рдирд╕рд╛рдареА рд╡рд░реНрдбрдкреНрд░реЗрд╕рд▓рд╛ HTTPS рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
  • рдбреАрдлреЙрд▓реНрдЯ URL рд░рдЪрдирд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ
  • рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрд╕рд╛рдареА рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рдпреЛрдЧреНрдп рдкрд░рд╡рд╛рдирдЧреНрдпрд╛ рд╕реЗрдЯ рдХрд░рддреЗ.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

if [ ! -d /var/www/wordpress ]; then
  # Create WordPress directories
  mkdir -p /var/www/wordpress
  chown -R www-data:www-data /var/www

  # Download WordPress using the WordPress CLI
  echo " Installing WordPress"
  su -s /bin/sh -c 'wp --path=/var/www/wordpress core download' www-data

  WP_CONFIG_CREATE_CMD="wp --path=/var/www/wordpress config create --extra-php --dbname=wordpress --dbuser=wordpress --dbhost="localhost:/var/run/mysqld/mysqld.sock" --dbpass="${WORDPRESS_DB_PASSWORD}""

  # This snippet is injected into the wp-config.php file when it is created;
  # it informs WordPress that we are behind a reverse proxy and as such
  # allows it to generate links using HTTPS
  cat > /tmp/wp_forwarded_for.php << 'EOM'
/* Turn HTTPS 'on' if HTTP_X_FORWARDED_PROTO matches 'https' */
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
EOM

  # Create WordPress configuration
  su -s /bin/sh -p -c "cat /tmp/wp_forwarded_for.php | ${WP_CONFIG_CREATE_CMD}" www-data
  rm /tmp/wp_forwarded_for.php
  su -s /bin/sh -p -c "wp --path=/var/www/wordpress config set 'FORCE_SSL_ADMIN' 'true'" www-data

  # Install WordPress
  WP_SITE_INSTALL_CMD="wp --path=/var/www/wordpress core install --url="${WORDPRESS_URL}" --title="${WORDPRESS_SITE_TITLE}" --admin_user="${WORDPRESS_ADMIN_USER}" --admin_password="${WORDPRESS_ADMIN_PASSWORD}" --admin_email="${WORDPRESS_ADMIN_EMAIL}" --skip-email"
  su -s /bin/sh -p -c "${WP_SITE_INSTALL_CMD}" www-data

  # Set permalink structure to a sensible default that isn't in the UI
  su -s /bin/sh -p -c "wp --path=/var/www/wordpress option update permalink_structure '/%year%/%monthnum%/%postname%/'" www-data

  # Remove sample file because it is cruft and could be a security problem
  rm /var/www/wordpress/wp-config-sample.php

  # Ensure that WordPress permissions are correct
  find /var/www/wordpress -type d -exec chmod g+s {} ;
  chmod g+w /var/www/wordpress/wp-content
  chmod -R g+w /var/www/wordpress/wp-content/themes
  chmod -R g+w /var/www/wordpress/wp-content/plugins
fi

NGINX рдпреБрдирд┐рдЯ рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ

рд╕реНрдХреНрд░рд┐рдкреНрдЯ PHP рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдкрдерд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА NGINX рдпреБрдирд┐рдЯ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЗ, PHP рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕ рд╡реЗрдЧрд│реЗ рдХрд░рддреЗ рдЖрдгрд┐ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рддреЗ. рдпреЗрдереЗ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рддреАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдЖрд╣реЗрдд:

  • рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдЪрд╛рд▓рдд рдЖрд╣реЗ рд╣реЗ рддрдкрд╛рд╕рдгреНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд, рдиреЗрдорд╕реНрдкреЗрд╕рд╕рд╛рдареА рд╕рдорд░реНрдерди рд╕реНрдерд┐рддреАрдиреБрд╕рд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рд╣реЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХрд╛рд░рдг рдмрд╣реБрддреЗрдХ рдХрдВрдЯреЗрдирд░ рд╕реЗрдЯрдЕрдк рдХрдВрдЯреЗрдирд░рдЪреНрдпрд╛ рдиреЗрд╕реНрдЯреЗрдб рд▓реЙрдиреНрдЪрд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реАрдд.
  • рдиреЗрдорд╕реНрдкреЗрд╕рд╕рд╛рдареА рд╕рдорд░реНрдерди рдЕрд╕рд▓реНрдпрд╛рд╕, рдиреЗрдорд╕реНрдкреЗрд╕ рдЕрдХреНрд╖рдо рдХрд░рд╛ рдиреЗрдЯрд╡рд░реНрдХ. рд╣реЗ рд╡рд░реНрдбрдкреНрд░реЗрд╕рд▓рд╛ рджреЛрдиреНрд╣реА рдПрдВрдбрдкреЙрдЗрдВрдЯрд╢реА рдХрдиреЗрдХреНрдЯ рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдПрдХрд╛рдЪ рд╡реЗрд│реА рд╡реЗрдмрд╡рд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдорддреА рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╣реЗ.
  • рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреА рдХрдорд╛рд▓ рд╕рдВрдЦреНрдпрд╛ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реА рдЖрд╣реЗ: (MariaDB рдЖрдгрд┐ NGINX Uniy рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдореЗрдорд░реА)/(PHP + 5 рдордзреНрдпреЗ RAM рдорд░реНрдпрд╛рджрд╛)
    рд╣реЗ рдореВрд▓реНрдп NGINX рдпреБрдирд┐рдЯ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ.

рд╣реЗ рдореВрд▓реНрдп рд╣реЗ рджреЗрдЦреАрд▓ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рдХреА рдиреЗрд╣рдореА рдХрд┐рдорд╛рди рджреЛрди PHP рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд▓реВ рдЕрд╕рддрд╛рдд, рдЬреЗ рдорд╣рддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ рдХрд╛рд░рдг WordPress рд╕реНрд╡рддрдГрд▓рд╛ рдмрд░реНрдпрд╛рдЪ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдирдВрддреНрдпрд╛ рдХрд░рддреЗ рдЖрдгрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрд╢рд┐рд╡рд╛рдп, рдЪрд╛рд▓рдгреЗ рдЙрджрд╛. WP-Cron рдЦрдВрдбрд┐рдд рд╣реЛрдИрд▓. рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рд╕реНрдерд╛рдирд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ рдпрд╛ рдорд░реНрдпрд╛рджрд╛ рд╡рд╛рдврд╡реВ рдХрд┐рдВрд╡рд╛ рдХрдореА рдХрд░реВ рд╢рдХрддрд╛, рдХрд╛рд░рдг рдпреЗрдереЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдкреБрд░рд╛рдгрдорддрд╡рд╛рджреА рдЖрд╣реЗрдд. рдмрд░реНтАНрдпрд╛рдЪ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдгрд╛рд▓реАрдВрд╡рд░, рд╕реЗрдЯрд┐рдВрдЧреНрдЬ 10 рдЖрдгрд┐ 100 рдЪреНрдпрд╛ рджрд░рдореНрдпрд╛рди рдЕрд╕рддрд╛рдд.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

if [ "${container:-unknown}" != "lxc" ] && [ "$(grep -m1 -a container=lxc /proc/1/environ | tr -d '')" == "" ]; then
  NAMESPACES='"namespaces": {
        "cgroup": true,
        "credential": true,
        "mount": true,
        "network": false,
        "pid": true,
        "uname": true
    }'
else
  NAMESPACES='"namespaces": {}'
fi

PHP_MEM_LIMIT="$(grep 'memory_limit' /etc/php/7.4/embed/php.ini | tr -d ' ' | cut -f2 -d= | numfmt --from=iec)"
AVAIL_MEM="$(grep MemAvailable /proc/meminfo | tr -d ' kB' | cut -f2 -d: | numfmt --from-unit=K)"
MAX_PHP_PROCESSES="$(echo "${AVAIL_MEM}/${PHP_MEM_LIMIT}+5" | bc)"
echo " Calculated the maximum number of PHP processes as ${MAX_PHP_PROCESSES}. You may want to tune this value due to variations in your configuration. It is not unusual to see values between 10-100 in production configurations."

echo " Configuring NGINX Unit to use PHP and WordPress"
cat > /tmp/wordpress.json << EOM
{
  "settings": {
    "http": {
      "header_read_timeout": 30,
      "body_read_timeout": 30,
      "send_timeout": 30,
      "idle_timeout": 180,
      "max_body_size": $(numfmt --from=iec ${UPLOAD_MAX_FILESIZE})
    }
  },
  "listeners": {
    "127.0.0.1:8080": {
      "pass": "routes/wordpress"
    }
  },
  "routes": {
    "wordpress": [
      {
        "match": {
          "uri": [
            "*.php",
            "*.php/*",
            "/wp-admin/"
          ]
        },
        "action": {
          "pass": "applications/wordpress/direct"
        }
      },
      {
        "action": {
          "share": "/var/www/wordpress",
          "fallback": {
            "pass": "applications/wordpress/index"
          }
        }
      }
    ]
  },
  "applications": {
    "wordpress": {
      "type": "php",
      "user": "www-data",
      "group": "www-data",
      "processes": {
        "max": ${MAX_PHP_PROCESSES},
        "spare": 1
      },
      "isolation": {
        ${NAMESPACES}
      },
      "targets": {
        "direct": {
          "root": "/var/www/wordpress/"
        },
        "index": {
          "root": "/var/www/wordpress/",
          "script": "index.php"
        }
      }
    }
  }
}
EOM

curl -X PUT --data-binary @/tmp/wordpress.json --unix-socket /run/control.unit.sock http://localhost/config

NGINX рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ

рдореВрд▓рднреВрдд NGINX рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдд рдЖрд╣реЗ

рд╕реНрдХреНрд░рд┐рдкреНрдЯ NGINX рдХреЕрд╢реЗрд╕рд╛рдареА рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░рддреЗ рдЖрдгрд┐ рдирдВрддрд░ рдореБрдЦреНрдп рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рддреЗ nginx.conf. рд╣рдБрдбрд▓рд░ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреА рд╕рдВрдЦреНрдпрд╛ рдЖрдгрд┐ рдЕрдкрд▓реЛрдбрд╕рд╛рдареА рдХрдорд╛рд▓ рдлрд╛рдЗрд▓ рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ рд╕реЗрдЯрд┐рдВрдЧрдХрдбреЗ рд▓рдХреНрд╖ рджреНрдпрд╛. рдкреБрдвреАрд▓ рд╡рд┐рднрд╛рдЧрд╛рдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреЙрдореНрдкреНрд░реЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдлрд╛рдЗрд▓рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕рд▓реЗрд▓реА рдПрдХ рдУрд│ рджреЗрдЦреАрд▓ рдЖрд╣реЗ, рддреНрдпрд╛рдирдВрддрд░ рдХреЕрд╢рд┐рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

# Make directory for NGINX cache
mkdir -p /var/cache/nginx/proxy

echo " Configuring NGINX"
cat > ${NGINX_CONF_DIR}/nginx.conf << EOM
user nginx;
worker_processes auto;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       ${NGINX_CONF_DIR}/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    client_max_body_size ${UPLOAD_MAX_FILESIZE};
    keepalive_timeout  65;
    # gzip settings
    include ${NGINX_CONF_DIR}/gzip_compression.conf;
    # Cache settings
    proxy_cache_path /var/cache/nginx/proxy
        levels=1:2
        keys_zone=wp_cache:10m
        max_size=10g
        inactive=60m
        use_temp_path=off;
    include ${NGINX_CONF_DIR}/conf.d/*.conf;
}
EOM

NGINX рдХреЙрдореНрдкреНрд░реЗрд╢рди рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ

рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рдкрд╛рдард╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА рд╕рд╛рдордЧреНрд░реА рд╕рдВрдХреБрдЪрд┐рдд рдХрд░рдгреЗ рд╣рд╛ рд╕рд╛рдЗрдЯ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рдорд╛рд░реНрдЧ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдХреЗрд╡рд│ рдХреЙрдореНрдкреНрд░реЗрд╢рди рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рд╕. рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪрд╛ рд╣рд╛ рд╡рд┐рднрд╛рдЧ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ рдпреЗрдереВрди.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

cat > ${NGINX_CONF_DIR}/gzip_compression.conf << 'EOM'
# Credit: https://github.com/h5bp/server-configs-nginx/
# ----------------------------------------------------------------------
# | Compression                                                        |
# ----------------------------------------------------------------------
# https://nginx.org/en/docs/http/ngx_http_gzip_module.html
# Enable gzip compression.
# Default: off
gzip on;
# Compression level (1-9).
# 5 is a perfect compromise between size and CPU usage, offering about 75%
# reduction for most ASCII files (almost identical to level 9).
# Default: 1
gzip_comp_level 6;
# Don't compress anything that's already small and unlikely to shrink much if at
# all (the default is 20 bytes, which is bad as that usually leads to larger
# files after gzipping).
# Default: 20
gzip_min_length 256;
# Compress data even for clients that are connecting to us via proxies,
# identified by the "Via" header (required for CloudFront).
# Default: off
gzip_proxied any;
# Tell proxies to cache both the gzipped and regular version of a resource
# whenever the client's Accept-Encoding capabilities header varies;
# Avoids the issue where a non-gzip capable client (which is extremely rare
# today) would display gibberish if their proxy gave them the gzipped version.
# Default: off
gzip_vary on;
# Compress all output labeled with one of the following MIME-types.
# `text/html` is always compressed by gzip module.
# Default: text/html
gzip_types
  application/atom+xml
  application/geo+json
  application/javascript
  application/x-javascript
  application/json
  application/ld+json
  application/manifest+json
  application/rdf+xml
  application/rss+xml
  application/vnd.ms-fontobject
  application/wasm
  application/x-web-app-manifest+json
  application/xhtml+xml
  application/xml
  font/eot
  font/otf
  font/ttf
  image/bmp
  image/svg+xml
  text/cache-manifest
  text/calendar
  text/css
  text/javascript
  text/markdown
  text/plain
  text/xml
  text/vcard
  text/vnd.rim.location.xloc
  text/vtt
  text/x-component
  text/x-cross-domain-policy;
EOM

WordPress рд╕рд╛рдареА NGINX рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ

рдкреБрдвреЗ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд░реНрдбрдкреНрд░реЗрд╕рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рддреЗ default.conf рдХреЕрдЯрд▓реЙрдЧрдордзреНрдпреЗ conf.d. рд╣реЗ рдпреЗрдереЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЖрд╣реЗ:

  • Let's Encrypt рджреНрд╡рд╛рд░реЗ Certbot рдХрдбреВрди рдкреНрд░рд╛рдкреНрдд TLS рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рд╕рдХреНрд░рд┐рдп рдХрд░рдгреЗ (рддреЗ рд╕реЗрдЯ рдХрд░рдгреЗ рдкреБрдвреАрд▓ рд╡рд┐рднрд╛рдЧрд╛рдд рдЕрд╕реЗрд▓)
  • Let's Encrypt рдЪреНрдпрд╛ рд╢рд┐рдлрд╛рд░рд╢реАрдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд TLS рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдд рдЖрд╣реЗ
  • рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ 1 рддрд╛рд╕рд╛рд╕рд╛рдареА рдХреЕрд╢рд┐рдВрдЧ рд╡рдЧрд│рд╛ рд╡рд┐рдирдВрддреНрдпрд╛ рд╕рдХреНрд╖рдо рдХрд░рд╛
  • рджреЛрди рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдирдВрддреА рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕рд╕рд╛рдареА рдкреНрд░рд╡реЗрд╢ рд▓реЙрдЧрд┐рдВрдЧ, рддрд╕реЗрдЪ рдлрд╛рдЗрд▓ рди рдорд┐рд│рд╛рд▓реНрдпрд╛рд╕ рддреНрд░реБрдЯреА рд▓реЙрдЧрд┐рдВрдЧ рдЕрдХреНрд╖рдо рдХрд░рд╛: favicon.ico рдЖрдгрд┐ robots.txt
  • рд▓рдкрд╡рд┐рд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕ рдЖрдгрд┐ рдХрд╛рд╣реА рдлрд╛рдЗрд▓реНрд╕рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рд╛ .PHPрдмреЗрдХрд╛рдпрджреЗрд╢реАрд░ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдВрд╡рд╛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рд╛рд░рдВрдн рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА
  • рд╕реНрдерд┐рд░ рдЖрдгрд┐ рдлреЙрдиреНрдЯ рдлрд╛рдпрд▓реАрдВрд╕рд╛рдареА рдкреНрд░рд╡реЗрд╢ рд▓реЙрдЧрд┐рдВрдЧ рдЕрдХреНрд╖рдо рдХрд░рд╛
  • рд╢реАрд░реНрд╖рд▓реЗрдЦ рд╕реЗрдЯрд┐рдВрдЧ рдкреНрд░рд╡реЗрд╢-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддреА-рдореВрд│ рдлреЙрдиреНрдЯ рдлрд╛рдЗрд▓реНрд╕рд╕рд╛рдареА
  • index.php рдЖрдгрд┐ рдЗрддрд░ рд╕реНрдЯреЕрдЯрд┐рдХреНрд╕рд╕рд╛рдареА рд░рд╛рдЙрдЯрд┐рдВрдЧ рдЬреЛрдбрдгреЗ.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

cat > ${NGINX_CONF_DIR}/conf.d/default.conf << EOM
upstream unit_php_upstream {
    server 127.0.0.1:8080;
    keepalive 32;
}
server {
    listen 80;
    listen [::]:80;
    # ACME-challenge used by Certbot for Let's Encrypt
    location ^~ /.well-known/acme-challenge/ {
      root /var/www/certbot;
    }
    location / {
      return 301 https://${TLS_HOSTNAME}$request_uri;
    }
}
server {
    listen      443 ssl http2;
    listen [::]:443 ssl http2;
    server_name ${TLS_HOSTNAME};
    root        /var/www/wordpress/;
    # Let's Encrypt configuration
    ssl_certificate         ${CERT_DIR}/fullchain.pem;
    ssl_certificate_key     ${CERT_DIR}/privkey.pem;
    ssl_trusted_certificate ${CERT_DIR}/chain.pem;
    include ${NGINX_CONF_DIR}/options-ssl-nginx.conf;
    ssl_dhparam ${NGINX_CONF_DIR}/ssl-dhparams.pem;
    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    # Proxy caching
    proxy_cache wp_cache;
    proxy_cache_valid 200 302 1h;
    proxy_cache_valid 404 1m;
    proxy_cache_revalidate on;
    proxy_cache_background_update on;
    proxy_cache_lock on;
    proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Deny all attempts to access hidden files such as .htaccess, .htpasswd,
    # .DS_Store (Mac)
    # Keep logging the requests to parse later (or to pass to firewall utilities
    # such as fail2ban)
    location ~ /. {
        deny all;
    }
    # Deny access to any files with a .php extension in the uploads directory;
    # works in subdirectory installs and also in multi-site network.
    # Keep logging the requests to parse later (or to pass to firewall utilities
    # such as fail2ban).
    location ~* /(?:uploads|files)/.*.php$ {
        deny all;
    }
    # WordPress: deny access to wp-content, wp-includes PHP files
    location ~* ^/(?:wp-content|wp-includes)/.*.php$ {
        deny all;
    }
    # Deny public access to wp-config.php
    location ~* wp-config.php {
        deny all;
    }
    # Do not log access for static assets, media
    location ~* .(?:css(.map)?|js(.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
        access_log off;
    }
    location ~* .(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
        add_header Access-Control-Allow-Origin "*";
        access_log off;
    }
    location / {
        try_files $uri @index_php;
    }
    location @index_php {
        proxy_socket_keepalive on;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass       http://unit_php_upstream;
    }
    location ~* .php$ {
        proxy_socket_keepalive on;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        try_files        $uri =404;
        proxy_pass       http://unit_php_upstream;
    }
}
EOM

Let's Encrypt рдХрдбреАрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрд╕рд╛рдареА Certbot рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рд╕реНрд╡рдпрдВ-рдиреВрддрдиреАрдХрд░рдг рдХрд░рдгреЗ

рд╕рд░реНрдЯрдмреЙрдЯ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдлреНрд░рдВрдЯрд┐рдпрд░ рдлрд╛рдЙрдВрдбреЗрд╢рди (EFF) рдЪреЗ рдПрдХ рд╡рд┐рдирд╛рдореВрд▓реНрдп рд╕рд╛рдзрди рдЖрд╣реЗ рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ Let's Encrypt рдХрдбреВрди TLS рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рдорд┐рд│рд╡рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдиреВрддрдиреАрдХрд░рдг рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. NGINX рдордзреНрдпреЗ Let's Encrypt рдордзреАрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Certbot рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦрд╛рд▓реАрд▓ рдЧреЛрд╖реНрдЯреА рдХрд░рддреЗ:

  • NGINX рдерд╛рдВрдмрд╡рддреЗ
  • рдбрд╛рдЙрдирд▓реЛрдб рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ TLS рд╕реЗрдЯрд┐рдВрдЧреНрдЬ
  • рд╕рд╛рдЗрдЯрд╕рд╛рдареА рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА Certbot рдЪрд╛рд▓рд╡рддреЗ
  • рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА NGINX рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рддреЗ
  • рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрдЪреЗ рдиреВрддрдиреАрдХрд░рдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рдирд╡реАрди рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛ рдЖрдгрд┐ NGINX рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рд╛.

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб

echo " Stopping NGINX in order to set up Let's Encrypt"
service nginx stop

mkdir -p /var/www/certbot
chown www-data:www-data /var/www/certbot
chmod g+s /var/www/certbot

if [ ! -f ${NGINX_CONF_DIR}/options-ssl-nginx.conf ]; then
  echo " Downloading recommended TLS parameters"
  curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:36:07 GMT" 
    -o "${NGINX_CONF_DIR}/options-ssl-nginx.conf" 
    "https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf" 
    || echo "Couldn't download latest options-ssl-nginx.conf"
fi

if [ ! -f ${NGINX_CONF_DIR}/ssl-dhparams.pem ]; then
  echo " Downloading recommended TLS DH parameters"
  curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:49:18 GMT" 
    -o "${NGINX_CONF_DIR}/ssl-dhparams.pem" 
    "https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem" 
    || echo "Couldn't download latest ssl-dhparams.pem"
fi

# If tls_certs_init.sh hasn't been run before, remove the self-signed certs
if [ ! -d "/etc/letsencrypt/accounts" ]; then
  echo " Removing self-signed certificates"
  rm -rf "${CERT_DIR}"
fi

if [ "" = "${LETS_ENCRYPT_STAGING:-}" ] || [ "0" = "${LETS_ENCRYPT_STAGING}" ]; then
  CERTBOT_STAGING_FLAG=""
else
  CERTBOT_STAGING_FLAG="--staging"
fi

if [ ! -f "${CERT_DIR}/fullchain.pem" ]; then
  echo " Generating certificates with Let's Encrypt"
  certbot certonly --standalone 
         -m "${WORDPRESS_ADMIN_EMAIL}" 
         ${CERTBOT_STAGING_FLAG} 
         --agree-tos --force-renewal --non-interactive 
         -d "${TLS_HOSTNAME}"
fi

echo " Starting NGINX in order to use new configuration"
service nginx start

# Write crontab for periodic Let's Encrypt cert renewal
if [ "$(crontab -l | grep -m1 'certbot renew')" == "" ]; then
  echo " Adding certbot to crontab for automatic Let's Encrypt renewal"
  (crontab -l 2>/dev/null; echo "24 3 * * * certbot renew --nginx --post-hook 'service nginx reload'") | crontab -
fi

рддреБрдордЪреНрдпрд╛ рд╕рд╛рдЗрдЯрдЪреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдиреБрдХреВрд▓рди

рдЖрдордЪреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ NGINX рдЖрдгрд┐ NGINX рдпреБрдирд┐рдЯрд▓рд╛ TLSSSL рд╕рдХреНрд╖рдо рдЕрд╕рд▓реЗрд▓реА рдкреНрд░реЛрдбрдХреНрд╢рди-рд░реЗрдбреА рд╕рд╛рдЗрдЯ рд╕рд░реНрд╡реНрд╣ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╢реА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЗ рдпрд╛рдмрджреНрджрд▓ рдЖрдореНрд╣реА рд╡рд░ рдмреЛрд▓рд▓реЛ. рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рдЧрд░рдЬреЗрдиреБрд╕рд╛рд░, рднрд╡рд┐рд╖реНрдпрд╛рдд рджреЗрдЦреАрд▓ рдЬреЛрдбреВ рд╢рдХрддрд╛:

  • рд╕рдорд░реНрдерди рдмреНрд░реЛрдЯрд▓реА, HTTPS рд╡рд░ рдСрди-рдж-рдлреНрд▓рд╛рдп рдХреЙрдореНрдкреНрд░реЗрд╢рди рд╕реБрдзрд╛рд░рд▓реЗ
  • рдореЛрдб рд╕реБрд░рдХреНрд╖рд╛ ╤Б рд╡рд░реНрдбрдкреНрд░реЗрд╕рд╕рд╛рдареА рдирд┐рдпрдорддреБрдордЪреНрдпрд╛ рд╕рд╛рдЗрдЯрд╡рд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд╣рд▓реНрд▓реЗ рд░реЛрдЦрдгреНрдпрд╛рд╕рд╛рдареА
  • рдмреЕрдХрдЕрдк рд╡рд░реНрдбрдкреНрд░реЗрд╕рд╕рд╛рдареА рдЬреЗ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ
  • рд╕рдВрд░рдХреНрд╖рдг рдорджрддреАрдиреЗ AppArmor (рдЙрдмрдВрдЯреВ рд╡рд░)
  • рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдХрд┐рдВрд╡рд╛ рдПрдордПрд╕рдПрдордЯреАрдкреА рдЬреЗрдгреЗрдХрд░реВрди рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдореЗрд▓ рдкрд╛рдард╡реВ рд╢рдХреЗрд▓
  • рддреБрдордЪреА рд╕рд╛рдЗрдЯ рддрдкрд╛рд╕рдд рдЖрд╣реЗ рдЬреЗрдгреЗрдХрд░реВрди рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдордЬреЗрд▓ рдХреА рддреА рдХрд┐рддреА рд░рд╣рджрд╛рд░реА рд╣рд╛рддрд╛рд│реВ рд╢рдХрддреЗ

рдЖрдгрдЦреА рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рд╕рд╛рдЗрдЯ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рдирд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рд╡рд░ рд╢реНрд░реЗрдгреАрд╕реБрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ рдПрдирдЬреАрдЖрдпрдПрдирдПрдХреНрд╕ рдкреНрд▓рд╕, рдореБрдХреНрдд рд╕реНрд░реЛрдд NGINX рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрдордЪреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ, рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ-рдЧреНрд░реЗрдб рдЙрддреНрдкрд╛рджрди. рддреНрдпрд╛рдЪреЗ рд╕рджрд╕реНрдп рдбрд╛рдпрдиреЕрдорд┐рдХрд▓реА рд▓реЛрдб рдХреЗрд▓реЗрд▓реЗ рдмреНрд░реЙрдЯрд▓реА рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреАрд▓, рддрд╕реЗрдЪ (рдЕрддрд┐рд░рд┐рдХреНрдд рд╢реБрд▓реНрдХрд╛рд╕рд╛рдареА) NGINX ModSecurity WAF. рдЖрдореНрд╣реА рджреЗрдЦреАрд▓ рдСрдлрд░ рдХрд░рддреЛ NGINX рдЕреЕрдк рд╕рдВрд░рдХреНрд╖рдг, NGINX Plus рд╕рд╛рдареА F5 рдордзреАрд▓ рдЙрджреНрдпреЛрдЧ-рдЕрдЧреНрд░рдгреА рд╕реБрд░рдХреНрд╖рд╛ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд WAF рдореЙрдбреНрдпреВрд▓.

рдиреЛ рдмреЙрд▓ рдЕрддреНрдпрдВрдд рд▓реЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рд╛рдЗрдЯрдЪреНрдпрд╛ рд╕рдорд░реНрдердирд╛рд╕рд╛рдареА, рдЖрдкрдг рддрдЬреНрдЮрд╛рдВрд╢реА рд╕рдВрдкрд░реНрдХ рд╕рд╛рдзреВ рд╢рдХрддрд╛ рд╕рд╛рдЙрдердмреНрд░рд┐рдЬ. рдЖрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛рд╣реА рд▓реЛрдб рдЕрдВрддрд░реНрдЧрдд рдЖрдкрд▓реНрдпрд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд┐рдВрд╡рд╛ рд╕реЗрд╡рд╛ рдЬрд▓рдж рдЖрдгрд┐ рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣ рдСрдкрд░реЗрд╢рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВ.

рд╕реНрддреНрд░реЛрдд: www.habr.com