Nginx выбирает один блок location
для обработки запроса (см. этот документ ). Ваш блок location = /mine.php
не только возвращает статус 403, если IP-адрес запрещен, но также возвращает статус 404, если IP-адрес разрешен. Требуется, чтобы служба обрабатывала запрос на порту 8080, если разрешен IP-адрес.
Одним из решений является дублирование операторов из блока location /
.
Например:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
location = /mine.php {
allow ...;
deny all;
proxy_pass http://127.0.0.1:8080;
}
location / {
proxy_pass http://127.0.0.1:8080;
}
Обратите внимание, что операторы proxy_set_header
могут быть перемещены во внешний блок, так что они наследуются обоими блоками. Подробнее см. в этом документе .