Hem regex hem de dahil edilen dosyalar iyi yöntemlerdir ve bunları sık sık kullanıyorum. Ancak başka bir alternatif, birçok durumda - özellikle daha karmaşık olanlarda - yararlı bir yaklaşım olan “adlandırılmış konum” kullanmaktır. Resmi sayfası "Eğer Evil olduğunu" şeyler yapmak için iyi bir yol olarak aşağıdaki esasen gösterir:
error_page 418 = @common_location;
location /first/location/ {
return 418;
}
location /second/location/ {
return 418;
}
location @common_location {
# The common configuration...
}
Bu çeşitli yaklaşımların avantajları ve dezavantajları vardır. Normal ifadenin büyük bir avantajı, maçın bazı bölümlerini yakalayabilmeniz ve tepkiyi değiştirmek için kullanabilmenizdir. Tabii ki, orijinal blokta bir değişken ayarlayarak veya kullanarak diğer yaklaşımlarla benzer sonuçlar elde edebilirsiniz map
. Normal ifade yaklaşımının dezavantajı, çeşitli konumlarla eşleşmek istiyorsanız uygunsuz olabilmesidir, ayrıca normal ifadenin düşük önceliği, konumlarla nasıl eşleştirmek istediğinize uymayabilir - görünüşte performans etkileri olduğunu belirtmemek gerekir. bazı durumlarda regexes.
Dosyaları eklemenin ana avantajı (anlayabildiğim kadarıyla), tam olarak neleri ekleyebileceğiniz konusunda biraz daha esnek olmasıdır - örneğin, tam bir konum bloğu olmak zorunda değildir. Ama aynı zamanda öznel olarak adlandırılmış konumlardan biraz daha karmaşık.
Ayrıca, benzer durumlarda kullanabileceğiniz ilgili bir çözüm olduğunu unutmayın: iç içe konumlar. Fikir, çok genel bir konumla başlamanız, olası eşleşmelerin birçoğuna ortak bazı yapılandırmalar uygulamanız ve daha sonra eşleştirmek istediğiniz farklı yol türleri için ayrı iç içe konumlara sahip olmanızdır. Örneğin, böyle bir şey yapmak yararlı olabilir:
location /specialpages/ {
# some config
location /specialpages/static/ {
try_files $uri $uri/ =404;
}
location /specialpages/dynamic/ {
proxy_pass http://127.0.0.1;
}
}