
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИ рд╣реИ: рддрдХрдиреАрдХреА рдХрд╛рд░реНрдп рдХреЗ рджреМрд░рд╛рди, рдмрд╛рд╣рд░ рд╕реЗ рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ред рдореБрдЭреЗ рдпрд╣ рдкреНрд░рддреАрдд рд╣реБрдЖ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХрдИ рд▓реЛрдЧ рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗред
рдПрдХ рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди рдиреАрдЪреЗ рд╣реИред
Dano
- рд╕рд░реНрд╡рд░: ubuntu 10.04 lts
- рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдиреЗрдЧреНрдиреЗрдХреНрд╕
рдХрд╛рд░реНрдп
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдкрд╡рд╛рдж (рдпрд╛ рдпрджрд┐ рдХреЛрдИ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛ) рдХреЗ
рд╕рд╛рде рд╕рднреА рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддреЗ рд╕реЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдмрдВрдж рдХрд░реЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдЕрддреНрдпрдзрд┐рдХ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИрдВ:
- "рд╕рдорд╛рдкрди" рдХрд╛ рд╕рдордп рдиреНрдпреВрдирддрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЖрджрд░реНрд╢ рдореЗрдВ - рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рдХрдо)
- рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди Nginx рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ - рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
- рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди Nginx рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рднреА рдЕрд╕рдВрднрд╡ рд╣реИ (рди рд╣реА рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ, рдФрд░ рди рд╣реА рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВ)
рдЗрд╕ рддрд░рд╣ рдХреА рдХрдареЛрд░ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреА рд╢рд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВред
рдирд┐рд░реНрдгрдп
1. рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, "рд╕рдорд╛рдкрди"
рдПрдХ рд╕реНрд╡рд┐рдЪ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
/etc/nginx/maintenance.file
)ред рдЬрдм рдпрд╣ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ Nginx рдХреЛ 503 рдХрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореМрдЬреВрджрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рдХрд╣реАрдВ
рд╕реЗрд╡ рдХрд░реЗрдВ :
cp /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/default.save
рдФрд░ рдлрд┐рд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ (рдмреЛрд▓реНрдб рдореЗрдВ):
server {
listen 80;
server_name example.com;
...
location / {
i f (-f /etc/nginx/maintenance.file) {
return 503;
}
#
...
...
}
...
...
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /etc/nginx/error; #
}
}
рдЕрдм, рдпрджрд┐ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдлрд╝рд╛рдЗрд▓
/etc/nginx/maintenance.file
рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рддреБрд░рдВрдд 503
/etc/nginx/maintenance.file
рдЕрдВрдХ рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛ рдФрд░ рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреНрд░рдорд╢рдГ "рдЯреНрд░рд┐рдЧрд░ / рдУрдкрдирд┐рдВрдЧ" рдПрдХ рдЯреНрд░рд┐рдЧрд░ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ / рд╣рдЯрд╛рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, 503 рд╡реЗрдВ рдХреЛ рдЕрдВрдзрд╛рдзреБрдВрдз рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдореВрд▓ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдЦрдВрдбрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ - рдЕрдЧрд▓рд╛ред
2. рдХрд┐рд╕рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╣реИ
рд╡рд┐рднрд┐рдиреНрди рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рджреМрд░рд╛рди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдкреГрд╖реНрда "рддрдХрдиреАрдХреА рдХрд╛рд░реНрдп рдЪрд▓ рд░рд╣рд╛ рд╣реИ" рд╣рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
ngx_http_geo_module рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╣рддрд╛ рд╣реИ: "... рдпрд╣ рдРрд╕реЗ рдЪрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдореВрд▓реНрдп рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред" рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред
рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ 503 рд╡рд╛рдВ рдХреЗрд╡рд▓ рддрднреА рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдП:
рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ , рдЖрдИрдкреА рдмрд╛рд╣рд░реА рдФрд░ рдЯреНрд░рд┐рдЧрд░ рдлрд╝рд╛рдЗрд▓ рджреЛрдиреЛрдВ рдореМрдЬреВрдж рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рджреЛрд╣рд░реА рд╕реНрдерд┐рддрд┐ рдпрд╛ рджреЛ рдиреЗрд╕реНрдЯреЗрдб рдЖрдИрдПрдлрдПрд╕ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рди рддреЛ рдкрд╣рд▓рд╛ рдФрд░ рди рд╣реА рджреВрд╕рд░рд╛ рдирдЧреНрдиреЗрдХреНрд╕ рд╕рдордЭрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ "рдЕрдкрдиреЗ рдХрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде feint" рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВред
geo $maintenance
{
default yes; # -
# IP, 503
127.0.0.1/32 no;
123.45.67.0/24 no;
...
}
server {
listen 80;
server_name example.com;
...
location / {
if (-f /etc/nginx/maintenance.file) {
set $tmp clo;
}
if ($maintenance = yes) {
set $action "${tmp}se";
}
if ($action = close) {
return 503;
}
#
...
...
}
...
...
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /etc/nginx/error; #
}
}
location /
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рддреАрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рджреЛрд╣рд░реА рд╕реНрдерд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкреНрд▓рд╕ рдПрдХ рдЯреНрд░рд┐рдЧрд░ рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ред рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рдордЭрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╣реИред
рдХрд┐рд╕реА рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрдХ рдмрд╛рд╣рд░реА рдмрд╛рд╣рд░реА IP рд╕реЗ рдПрдХ рдкреГрд╖реНрда рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рджреЗрдВред рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ:
/etc/nginx/maintenance.file
рдлрд╝рд╛рдЗрд▓ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред
- рдЪреВрдВрдХрд┐ рдЯреНрд░рд┐рдЧрд░ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЧрдИ рд╣реИ:
$tmp = "clo"
- рдЖрдИрдкреА тАЛтАЛрдЕрдкрд╡рд╛рджреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдирд╣реАрдВ:
$maintenance = "yes"
$maintenance = "yes"
рдХреЗ рдмрд╛рдж рд╕реЗ, рдлрд┐рд░: $action = $tmp + "se" = "close"
$action = "close"
, рдлрд┐рд░ return 503
рд╣реЛрддреА рд╣реИ
рд╕рднреА "рдПрд▓рд┐рдпрдВрд╕" рдкреГрд╖реНрда 503 рджреЗрдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рднреА рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ $ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЪрд░ рдЕрдзреВрд░рд╛ рд░рд╣рддрд╛ рд╣реИ (
$action = "lo"
)ред рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ рдФрд░ рд╣рдо рд╕рд╛рдЗрдЯ рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдВрдЧреЗред
рдкреНрд░рднрд╛рд╡реА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ
sudo /etc/init.d/nginx restart
Ngx_http_geo_module рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд "рдЙрдкрд╣рд╛рд░" рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрддреЗ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ Nginx config рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЕрдкрд╡рд╛рдж рд╕реВрдЪреА рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкреВрдЫрддрд╛ рд╣реВрдВред
рдпрд╣ рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
touch /etc/nginx/maintenance.file
рдкрд╣реБрдБрдЪ: touch /etc/nginx/maintenance.file
- рд╢реЗрдпрд░:
rm /etc/nginx/maintenance.file
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА рдФрд░ рд╕рдордп рдмрдЪрд╛рдПрдЧреАред