У меня есть веб-приложение, доступ к которому осуществляется через 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
Как я могу этого добиться?
Попробуйте использовать серию внутренних перезаписей (не тестировалось, написано прямо в браузере):
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;
}