рдмрд╣реБрднрд╛рд╖реА рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП NGINX рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╕рдВрдж рдХреА рдЧрдИ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рд╛рдЗрдЯ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд░реВрдк рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреБрдЫ рд╕рд░реНрд╡рд░ рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рднрд╛рд╖рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд▓реЗрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдЕрдХреНрд╕рд░ рдХреБрдХреАрдЬрд╝ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реА рдпрд╛рддреНрд░рд╛ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХрд╛ рдХреМрди рд╕рд╛ рддрд░реАрдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдПрдХ рдмрд┐рдВрджреБ рд╣реИред рднрд╛рд╖рд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА (рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ) рдХреА рдореЗрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реИрдВрдХ: рдХреБрдХреА, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдХреНрд╖реЗрддреНрд░ред

рдЦреЛрдЬ рдЗрдВрдЬрди, рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЕрдиреНрдп рд╕реВрдЪрдирд╛ рдПрдЧреНрд░реАрдЧреЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреЗрдЬ рдХреЛ рдХрд┐рд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдпрд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлреЗрд╕рдмреБрдХ рдХреНрд░реЙрдирд┐рдХрд▓ рдкрд░ рдПрдХ рдердВрдмрдиреЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рднрд╛рд╖рд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдВрд╕рд╛рдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднрд╛рд╖рд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИрдВ:

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

рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╕рдмрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рднрд╛рд╖рд╛ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдпреВрдЖрд░рдЖрдИ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЙрдкреА рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдХрдо рдкрд░рд┐рдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ, рдмрд╛рдХреА рдЬреАрдИрдЯреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд▓рд┐рдВрдХ рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред
рдЫрд╡рд┐
рдореИрдВ NGINX рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдк рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реЗрдЯрдЕрдк рдореЗрдВ рдХрдИ рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рднрд╛рд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдХреБрдХреАрдЬрд╝ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп $lang рдЪрд░ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ, рдЖрдкрдХреЛ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде GET рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдХ-рдПрдВрдб рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рд╣рдо рд╕реВрдЪреА рд╕реЗ рддреАрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдВрджрд░ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо GET рдкреИрд░рд╛рдореАрдЯрд░ locale=< > рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рджреЛ рдЕрдХреНрд╖рд░ рд╡рд╛рд▓реЗ рдХреЛрдб ISO 639-1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк http://<_back-end_>?locale=ru рдЬреИрд╕реЗ рд▓рд┐рдВрдХ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ http://<_back-end_>?locale=ru рддреЛ рд╣рдореЗрдВ рд░реВрд╕реА рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИред
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕ рдХреЛ рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рджреВрд╕рд░рд╛ рдЪрд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рднрд╛рд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдХреБрдХреА рд╕реЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдХреБрдХреА рдХреЛ $ рд▓реИрдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдо рд╕рд╛рдЗрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ

 map $http_accept_language $browser_lang { default en; ~ru ru; } map $cookie_lang $lang { default $browser_lang; ~en en; ~ru ru; } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд╛рди рдкрд░ рдЯрд╛рдЗрдк /NN/* рдЕрдиреБрд░реЛрдз рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдЪрд░ рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

 location ~ '^/(?<lang_code>[\D-]{2})/(?<rest_uri>.*)' 

рд╣рдо рдЪрд░ $lang_code рдореЗрдВ рджреЛ-рдЪрд░рд┐рддреНрд░ рдХреЛрдб $lang_code , рдЪрд░ $lang_code рдореЗрдВ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ

рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдПрдХ рдореМрдЬреВрджрд╛ рдПрдХ рдкрд░ рднреА рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдпреВрдХреНрд░реЗрдиреА рдпрд╛ рдмреЗрд▓рд╛рд░реВрд╕реА рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд░реВрд╕реА рдореЗрдВ рджрд┐рдЦрд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

 if ($lang_code ~* (uk|be)) { return 301 http://$host/ru/$rest_uri$is_args$args; } 

рдпрджрд┐ рдХреЛрдб рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рддреЛ рд╕рд╛рдЗрдЯ рдХреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 if ($lang_code !~* (en|ru)) { return 301 http://$host/en/$rest_uri$is_args$args; } 

рдЕрдЧрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдЖрджреЗрд╢ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрдХрд╛рдИ рдХреЛ рдПрдХ рдЕрдиреБрдкрд╛рд▓рди рдЬрд╛рдВрдЪ рдкрд░, рдФрд░ рдХреЗрд╡рд▓ рдЕрдВрдд рдореЗрдВ - рдПрдХ рдЧреИрд░-рдЕрдиреБрдкрд╛рд▓рди рдЬрд╛рдВрдЪ рдкрд░ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ GET рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдВрдХ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрджрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрд░реНрдХ рдЗрд╕реЗ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдмреИрдХ-рдПрдВрдб рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ ?locale=en&locale=ru ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдВрдХ example.com/en/?locale=ru рд╕рд╛рде рдЖрдпрд╛ рд╣реИ, рддреЛ locale=ru рдмреИрдХ-рдПрдВрдб рдореЗрдВ рдирд╣реАрдВ рднреЗрдЬрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

 if ($args ~ (.*)locale=[^&]*(.*)) { set $args $1$2; } 

рдЖрд╡рд░реНрддреА рдПрдореНрдкрд░рд╕реЗрдВрдб рдирд┐рдХрд╛рд▓реЗрдВ

  if ($args ~ (.*)&&+(.*)) { set $args $1&$2; } 

рд╣рдо рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдореНрдкрд░рд╕реЗрдВрдб рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ

 if ($args ~ ^&(.*)) { set $args $1; } 

рд╣рдо рдЕрдВрдд рдореЗрдВ рдПрдореНрдкрд░рд╕реЗрдВрдб рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ

 if ($args ~ (.*)&$) { set $args $1; } 

рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рд╡рд╣ рдмреИрдХ-рдПрдВрдб рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рдм рдХреБрдЫ upstream рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдмреИрдХ-рдПрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред

 proxy_pass http://back-end/$rest_uri?locale=$lang_code&$args; 

рдЕрдВрддрд┐рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ
 ## get locale map $http_accept_language $browser_lang { default en; ~ru ru; } map $cookie_lang $lang { default $browser_lang; ~en en; ~ru ru; } upstream back-end { ip_hash; server 172.21.71.15:8080; # vm-deb-osl-scala-1 server 172.21.71.16:8080; # vm-deb-osl-scala-2 server 172.21.71.17:8080; # vm-deb-osl-scala-3 server 172.21.71.18:8080; # vm-deb-osl-scala-4 keepalive 32; } server { listen 109.233.59.100:80; server_name ruvpn.net; location / { # Redirect to locale return 301 http://$host/$lang$uri$is_args$args; } # Handle URL with locale location ~ '^/(?<lang_code>[\w-]{2})/(?<rest_uri>.*)' { # Redirect to Russian for some CIS countries if ($lang_code ~* (uk|be|kk)) { return 301 http://$host/ru/$rest_uri$is_args$args; } # Redirect to English for unknown languages if ($lang_code !~* (en|ru)) { return 301 http://$host/en/$rest_uri$is_args$args; } if ($args ~ (.*)locale=[^&]*(.*)) { set $args $1$2; } # Cleanup any repeated & introduced if ($args ~ (.*)&&+(.*)) { set $args $1&$2; } # Cleanup leading & if ($args ~ ^&(.*)) { set $args $1; } # Cleanup ending & if ($args ~ (.*)&$) { set $args $1; } proxy_pass http://back-end/$rest_uri?locale=$lang_code&$args; include /etc/nginx/proxy.conf; } 

рдЖрдк рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдЗрдЯ рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦрд╛ рд╣реИ, рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд╕рд╛рдзрди http://ruvpn.net рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Ruvpn.net/en/product/details/4 рдЬреИрд╕реЗ рд╕рднреА рдЕрдиреБрд░реЛрдз рд░реВрд╕реА рдореЗрдВ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрдмрдХрд┐ рдЕрдиреБрд░реЛрдз ruvpn.net/sv/product/details/4 ruvpn.net/en/product/details/4 рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред , рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдЗрдЯ рдХрд╛ рд╕реНрд╡реАрдбрд┐рд╢ рд╕рдВрд╕реНрдХрд░рдг рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЬрдм рдЖрдк ruvpn.net рдХреА рд░реВрдЯ рд▓рд┐рдВрдХ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ , рддреЛ рдпрд╣ рдЖрдкрдХреА рднрд╛рд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ ruvpn.net/ru рдпрд╛ ruvpn.net/en рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдЧрд╛ред
рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рднрд╛рд╖рд╛ рдХреА рдкрд╕рдВрдж рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП URI рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджреЛ рд╡рд░реНрдгреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рдЗрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдФрд░ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рджреМрд░рд╛рди рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In183060/


All Articles