Применить блокировку местоположения к запросам псевдонимов только для запросов HTTP GET

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

server {
    # ...

    location /myapp/files {
      alias /var/www/myapp/files;
      auth_basic "Restricted";
      auth_basic_user_file /etc/nginx/htpasswd;
    }

    location /myapp/ {
      proxy_pass http://127.0.0.1:3000/;
      auth_basic "Restricted";
      auth_basic_user_file /etc/nginx/htpasswd;
    }
}

Приведенная выше настройка создает псевдонимы для всех запросов /myapp/files независимо от способа запроса. Есть ли способ получить псевдоним только для GET запросов /myapp/files, а прокси метод УДАЛИТЬ к веб-приложению?

Ограничения, если помешают что-то подобное написано:

if ($request_method = "GET") {
    location /myapp/files {
      alias /var/www/myapp/files;
      auth_basic "Restricted";
      auth_basic_user_file /etc/nginx/htpasswd;
    }
}

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

location /myapp/files {
    auth_basic Restricted;
    auth_basic_user_file /etc/nginx/htpasswd;

    if ($request_method = "GET") {
      alias /var/www/myapp/files;
    }

    if ($request_method = "DELETE") {
      proxy_pass http://127.0.0.1:3000/;
    }
  }
}

результаты в:

nginx: [emerg] "alias" directive is not allowed here in /etc/nginx/sites-enabled/default:44

Как мне этого добиться?

1 ответ

Решение

Попробуйте использовать серию внутренних переписываний (не проверено, написано непосредственно в браузере):

location /myapp/files {
  auth_basic "Restricted";
  auth_basic_user_file /etc/nginx/htpasswd;
  rewrite ^(/myapp/files)(.*) $1.$request_method$2 break;
}

location /myapp/files.GET {
  alias /var/www/myapp/files;
  internal;
}

location /myapp/files.DELETE {
  rewrite ^/myapp(/files)(.*) $1$2 break;
  proxy_pass http://127.0.0.1:3000/;
  internal;
}
Другие вопросы по тегам