EDIT 2
De acordo com os comentários da VBart, alterei as entradas em try_files
para $uri @proxy_to_app
. Isso evita qualquer confusão sobre a ordem dos locais nomeados (eles sempre devem vir por último). Esteja ciente de que, se o diretório /admin/
existir localmente, isso será usado em vez do proxy.
EDITAR
Se você realmente quiser usar um local nomeado para evitar a duplicação de proxy_pass
para cada local, use o seguinte:
server {
listen 80;
server_name service.dev;
access_log /var/log/service.access.log;
error_log /var/log/service.error.log debug;
location / {
# Catch all
try_files $uri @proxy_to_app;
}
location /admin/ {
# /admin/ only
allow 192.168.5.0/24;
deny all;
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:9000;
}
}
É um pouco de hack, try_files
requer pelo menos dois parâmetros, na primeira instância ele procurará um caminho local com o mesmo $uri
(se você quiser substituir arquivos locais). Na segunda instância, eu especifiquei /dev/null
como o segundo caminho; isso nunca será usado.
ORIGINAL
Experimente esta configuração:
server {
listen 80;
server_name service.dev;
access_log /var/log/service.access.log;
error_log /var/log/service.error.log debug;
# Proxy settings
proxy_set_header Host $http_host;
proxy_redirect off;
location / {
# Catch all
proxy_pass http://127.0.0.1:9000/;
}
location /admin/ {
# /admin/ only
allow 192.168.5.0/24;
deny all;
proxy_pass http://127.0.0.1:9000/;
}
}
O bloco location /
deve capturar somente URIs que não são correspondidos posteriormente em outros blocos de localização.