π Nginx ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ IP ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π΄Π°ΠΆΠ΅ Π·Π° ΡΠ΅ΠΏΠΎΡΠΊΠΎΠΉ ΠΏΡΠΎΠΊΡΠΈ
π Π ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ Π·Π°ΠΏΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΉΡΠΈ ΡΠ΅ΡΠ΅Π· Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊ, CDN ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΊΡΠΈ. ΠΡΠ»ΠΈ Π΄ΠΎΠ²Π΅ΡΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡ
X-Forwarded-For Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡΡ ΡΠ²ΠΎΠΉ IP ΠΈ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄ΠΎΡΡΡΠΏΠ°.π ΠΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ ΠΏΡΠΎΠΊΡΠΈ:
ΠΠΎΠ΄ΡΠ»Ρ Real IP ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Π½ΠΎ Π΄ΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΌΠΈ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΡΠ·Π»ΠΎΠ².
set_real_ip_from 10.20.0.0/16;
set_real_ip_from 192.0.2.10;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
π ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ IP Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ:
ΠΠΎΡΠ»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Real IP ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
$binary_remote_addr ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ°. ΠΡ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΡΡΠΎΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ
Π·Π°ΡΡΠ°Ρ Π½Π° Ρ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅ΠΉ.
http {
limit_req_zone $binary_remote_addr
zone=per_ip:10m rate=10r/s;
server {
location /api/ {
limit_req zone=per_ip burst=20 nodelay;
proxy_pass http://backend;
}
}
}
π ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Π°Π΄ΡΠ΅Ρ Nginx ΡΡΠΈΡΠ°Π΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΌ:
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΆΡΡΠ½Π°Π»Π°, ΡΡΠΎΠ±Ρ Π²ΠΈΠ΄Π΅ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Π΄ΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠΊΡΠΈ.
log_format client_ip
'peer=$realip_remote_addr '
'client=$remote_addr '
'xff="$http_x_forwarded_for" '
'request="$request" status=$status';
access_log /var/log/nginx/client_ip.log client_ip;
βοΈ ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ:
set_real_ip_from Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠ΅ ΡΠ·Π»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ. ΠΡΠ»ΠΈ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ Π΄ΠΎΠ²Π΅ΡΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ Π°Π΄ΡΠ΅ΡΠ°ΠΌ, ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅Π»Π°ΡΡ IP, Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΠΆΡΡΠ½Π°Π»Ρ ΠΏΠΎΡΠ΅ΡΡΡΡ Π΄ΠΎΡΡΠΎΠ²Π΅ΡΠ½ΠΎΡΡΡ.tags: #nginx #ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° #devops
π§ @recura_tech