Могу ли я создать «частное» место в Nginx?

Могу ли я создать местоположение, к которому можно получить доступ из любого другого местоположения в конфигурации nginx, и к которому нельзя получить доступ напрямую извне?

Я могу использовать директиву deny, но она также запрещает доступ к местоположениям, определенным в конфигурации nginx.

Вот мой конфиг -

server {
  listen *:80;
  server_name 127.0.0.1;

  location = /auth {
      set $query '';
      if ($request_uri ~* "[^\?]+\?(.*)$") {
         set $query $1;
      }
      # add_header X-debug-message "Parameters being passed $is_args$args" always;
      proxy_pass http://127.0.0.1:8080/auth?$query;
  }

  location /kibana/ {
     rewrite ^/kibana/(.*) /$1 break;
     proxy_pass http://127.0.0.1:5601;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection 'upgrade';
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header  X-Real-IP  $remote_addr;
     proxy_cache_bypass $http_upgrade;
     auth_request /auth;
  }

  location ~ (/app/|/app/kibana|/bundles/|/kibana4|/status|/plugins|/ui/|/api/|/monitoring/|/elasticsearch/) {
     internal;
     proxy_pass http://127.0.0.1:5601;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_set_header Host $host;
     rewrite /kibana4/(.*)$ /$1 break;
  }

  error_page 404 /404.html;
    location = /40x.html {
  }

  error_page 500 502 503 504 /50x.html;
    location = /50x.html {
  }
}

Итак, мне нужно, чтобы последнее местоположение было доступно только из местоположения / kibana /, но с internal; он выдает ошибку 404, без него все работает нормально.

На самом деле мне нужно защитить кибану с помощью nginx, но я все равно буду раскрывать его без какой-либо аутентификации.

Как вы собираетесь получить доступ к местоположению из другого местоположения? Есть внутренняя директива или названное место, ни один из которых не может быть доступен напрямую.

Richard Smith 31.10.2018 10:24

Я обновил свой вопрос соответствующими данными

Mahesh H Viraktamath 31.10.2018 10:49

Проблема в том, что если я просто использую /kibana, nginx ищет веб-приложение под /usr/share/nginx/html, что странно! Затем я добавил эти дополнительные места и снова проксировал туда же 127.0.0.1:5601, тогда он работает без internal;, но тогда я всегда могу получить прямой доступ к /app/kibana без какой-либо аутентификации.

Mahesh H Viraktamath 31.10.2018 12:19
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
2
3
987
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

location @nginxonly {
    proxy_pass http://example.com/$uri$is_args$args;
}

После создания именованного местоположения вы можете ссылаться на него в других местах некоторые, например, в последнем элементе директивы try_files.

Другие вопросы по теме