NGINX – Прокси только для определенного URL

Вопрос или проблема

Сначала я должен признаться, что я полный новичок в NGINX. Я только делал очень базовые вещи с ним.

Теперь о ситуации. У нас есть реверс-прокси в DMZ, который принимает входящие подключения/запросы и “перенаправляет их” к их пунктам назначения. В данный момент один из них позволяет перенаправлять соединения только из определенной подсети к конкретному веб-серверу. Это нужно для того, чтобы пользователи VPN могли сбросить пароль для конкретного приложения. К сожалению, он перенаправляет любые запросы к URL этого веб-сервера.

Что я хочу: мне нужно это ограничить. Вместо того, чтобы передавать “https://webserver.com/whatever_they_type” на сервер, я хочу заблокировать все, кроме одного конкретного URL. Например: “https://webserver.com/this-url/only” Все остальное будет заблокировано.

У кого-то есть мысли о том, как изменить это местоположение в NGINX для достижения этой цели?


Интересно, сработает ли что-то подобное?

    location = /good_page/reset_password.html {
            proxy_pass https://1.2.3.4:443;
            #### Установить заголовки ####
            proxy_set_header Host webserver.com;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #### Разрешить только OpenVPN сети ###
            allow 5.6.7.8/24;
            deny all;
    }


    location ^~ /good_page {
            deny all;
    }

Nginx всегда сначала пытается сопоставить самое конкретное префиксное местоположение, поэтому вы можете установить два местоположения:

    server {
       listen       80;
       server_name example.com www.example.com;
       access_log  /<файл доступа>  main;
       error_log  /<файл ошибок>  error;

       # Это не обязательно (любое местоположение)
       location / {
         # Вы можете установить index.html с сообщением об ошибке
         root /path/folder;
       }
       # Конкретный префикс
       location /this-url/only/ {
          proxy_pass http://<IP вашего сервера>;
          <конфигурации прокси ...>;
       }
     }

Заметка: Когда вы обращаетесь к http://example.com/this-url/only/, nginx перенаправляет на ваш сервер http:///this-url/only/. Если вам нужно удалить /this-url/only/, вам потребуется правило переписывания.

Документация Nginx

Ответ или решение

Чтобы реализовать требуемую функциональность в NGINX и ограничить проксирование конкретного URL, вам необходимо использовать директиву location для строгого указания разрешенных и запрещенных путей.

Вот пример конфигурации, который должен помочь вам ограничить доступ только к одному конкретному URL и заблокировать все остальные запросы к вашему веб-серверу:

server {
    listen       80;  # Убедитесь, что это правильный порт, используемый вашим приложением
    server_name  example.com www.example.com;  # Замените на ваше доменное имя

    # Логирование (по желанию)
    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;

    # Разрешаем доступ только к определенному URL
    location = /this-url/only {
        proxy_pass https://1.2.3.4:443;  # Замените на IP вашего веб-сервера
        # Установка заголовков
        proxy_set_header Host webserver.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # Ограничение доступа
        allow 5.6.7.8/24;  # Замените на вашу подсеть VPN
        deny all;  # Запретить доступ всем остальным
    }

    # Запретить доступ ко всем остальным URL
    location / {
        deny all;  # Запретить доступ ко всем другим запросам
    }

    # (Опционально) Можно добавить индексный файл в корневую директорию или перенаправление на страницу ошибки
    location / {
        root /path/to/your/root;  # Замените на ваш путь
        index index.html;  # Укажите файл, который будет загружаться по умолчанию
        try_files $uri =404;  # Вернуть 404, если файл не найден
    }
}

Объяснение конфигурации:

  1. server: Основной блок серверной конфигурации. Убедитесь, что вы указали правильный порт и имя сервера для своего приложения.

  2. location = /this-url/only: Эта директива определяет точное совпадение с URL /this-url/only. Весь трафик, который поступает по этому адресу, будет проксироваться на указанный сервер.

  3. proxy_pass: Указывает, куда NGINX будет перенаправлять запросы, поступающие к /this-url/only.

  4. proxy_set_header: Эти директивы устанавливают определенные заголовки, которые могут потребоваться серверу, к которому вы проксируете запросы.

  5. allow / deny: Эти инструкции управляют доступом. В данном случае доступ разрешен только для IP-адресов из указанной подсети, и все остальные запросы будут отклонены.

  6. location /: Эта директива блокирует доступ ко всем другим URL. Основная цель — предотвратить доступ к любым другим ресурсам на сервере, кроме разрешенного пути.

После изменения конфигурации не забудьте перезагрузить NGINX, чтобы применить изменения:

sudo systemctl restart nginx

Эта конфигурация обеспечит безопасный доступ только к указанному URL и заблокирует все остальные запросы.

Оцените материал
Добавить комментарий

Капча загружается...