Ceea ce vreau
Pentru a mea /admin
locație, lista albă mai multe adrese IP de încredere și blocați pe toți ceilalți.
Ceea ce am
http {
hartă $admin_la distanță $admin_block_path {
implicit „/admin”;
1.1.1.1 „/not-admin”;
8.8.8.8 „/not-admin”;
}
# â¦
Server {
add_header X-Test-Admin „$admin_block_path”;
locație $admin_block_path {
întoarce 403;
}
}
}
Ideea este să utilizare Hartă
determinați condiționat o cale de blocare de la adresa IP a unui vizitator. Stocați-l într-o variabilă și utilizați acea variabilă în Locație
. Dacă cererea provine de la un IP nede încredere, variabila va conține /admin
, și, prin urmare, locația se va bloca /admin
.
Care este problema
The Locație
nu blochează accesul la /admin
.
- pot confirma folosind
add_header
că variabila este setată corect pe baza adresei IP. Când vizitez de pe un IP care nu este de încredere, primesc /admin
, și respectiv /non-admin
când vizitați de pe un IP de încredere.
- Daca inlocuiesc
locație $admin_block_path
cu hardcoded locatie /admin
, cererea este blocată
- Am încercat să joc cu ghilimele duble, fără efect
- Am încercat să scot bara oblică în afara variabilei, fără efect
Notă
Din păcate, nu pot pur și simplu hardcode permite
/nega
în unele /admin
locație, deoarece asta ar suprascrie configurația PHP pass pe care o am în altă parte în config. Din această cauză, trebuie să am un dedicat /admin
locație numai dacă știu că voi respinge solicitarea oricum și nu va fi nevoie de PHP.
Versiunea Nginx: 1.20.1