4

Мой внутренний сервер nginx должен принимать запросы только от моего внешнего интерфейса, 1.2.3.4. Однако я также хочу, чтобы nginx регистрировал правильный IP-адрес, поэтому я использую set_real_ip_from . Но при этом правило allow в конфигурации не совпадает, и nginx всегда будет возвращать 403. Вот соответствующий конфиг:

allow  1.2.3.4;
deny  all;

set_real_ip_from  1.2.3.4;
real_ip_heaader  X-Real-IP;

Как я могу преодолеть эту проблему?

1 ответ1

2

Я искал это сам, и, поскольку мне потребовалось время, чтобы найти решение, я поместил его здесь, чтобы облегчить его для других.

Конструкции allow/deny в этом случае не будут работать, поскольку они не работают с реальными переменными ip.

Вместо этого вы можете использовать переменную $ http_x_forwarded_for :

## this goes before server section
## it allows us to check if forwarded ip is allowed to make request or not
map $http_x_real_ip $allowed {
    default false;

    ## your ip goes here
    ~\s111.111.111.111 true;
    ## other ips you want to allow
}

server {
    ## ... other instructions...

    set_real_ip_from  1.2.3.4;
    real_ip_header  X-Forwarded-For;

    ## you may want to add this to get "truly" real ip
    real_ip_recursive  on;

    ## ... other instructions...

    ## or any other location you need
    location / {
        if ($allowed = false) {
            return 403;
        }
        ## ... other instructions...
    }
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .