Expressões regulares são relativamente ineficientes e geralmente desencorajadas em configurações Nginx quando outros métodos seriam suficientes. Existem alguns casos aqui que não exigem regexes:
location /clip-art/ {
# ...
}
location /Clip-Art/ {
# ...
}
location /images/ {
# ...
}
location /cgi-bin/ {
# ...
}
Se você está apenas exibindo imagens estáticas de pelo menos três delas, podemos simplificar ainda mais. O prefixo ^~
significa que essas regras terão precedência sobre as regras baseadas em regex, que, de outra forma, teriam precedência. Embora isso tenha muitos usos, ele pode atuar como um recurso de segurança ao lidar com diretórios contendo apenas recursos estáticos. Se alguém conseguir carregar um arquivo PHP ou algum outro código executável que normalmente seria manipulado por um local regex, o local pré-regex (com ^~
) ganhará e o arquivo não será executado. Também omiti o típico $uri/
porque não é realmente aplicável a diretórios de recursos estáticos.
location ^~ /clip-art/ { try_files $uri =404; }
location ^~ /Clip-Art/ { try_files $uri =404; }
location ^~ /images/ { try_files $uri =404; }
location /cgi-bin/ {
# ...
}
Quanto às demais condições, o Nginx é projetado para combinar desde o início de cada URI. Idealmente, você pode manipular esses tipos de cenários no aplicativo, em vez de no Nginx. No entanto, neste caso específico, uma regex relativamente eficiente pode ser escrita:
rewrite "^((?:/(?!designer|invitation)[^/]+){4})/?$" /clip-art$1 permanent;