Применять блок местоположения к запросам псевдонимов только для запросов 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 и проксировать метод DELETE к веб-приложению?

Ограничения if предотвращают запись чего-то вроде этого:

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

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

0
задан 17 January 2018 в 06:59
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;
}
2
ответ дан 4 December 2019 в 13:28

Теги

Похожие вопросы