Baik regex dan file yang disertakan adalah metode yang baik, dan saya sering menggunakannya. Tetapi alternatif lain adalah dengan menggunakan "nama lokasi", yang merupakan pendekatan yang berguna dalam banyak situasi - terutama yang lebih rumit. Halaman resmi "If is Evil" pada dasarnya menunjukkan hal berikut sebagai cara yang baik untuk melakukan sesuatu:
error_page 418 = @common_location;
location /first/location/ {
return 418;
}
location /second/location/ {
return 418;
}
location @common_location {
# The common configuration...
}
Ada keuntungan dan kerugian dari berbagai pendekatan ini. Satu keuntungan besar bagi regex adalah Anda dapat menangkap bagian dari pertandingan dan menggunakannya untuk mengubah respons. Tentu saja, Anda biasanya dapat mencapai hasil yang serupa dengan pendekatan lain dengan mengatur variabel di blok asli atau menggunakan map
. Kelemahan dari pendekatan regex adalah bisa menjadi berat jika Anda ingin mencocokkan berbagai lokasi, ditambah rendahnya prioritas regex mungkin tidak cocok dengan bagaimana Anda ingin mencocokkan lokasi - belum lagi bahwa tampaknya ada dampak kinerja dari regex dalam beberapa kasus.
Keuntungan utama dari memasukkan file (sejauh yang saya tahu) adalah sedikit lebih fleksibel tentang apa yang dapat Anda sertakan - misalnya, tidak harus berupa blok lokasi penuh. Tapi itu juga hanya sedikit lebih klakson daripada lokasi yang disebutkan.
Perhatikan juga bahwa ada solusi terkait yang mungkin dapat Anda gunakan dalam situasi serupa: lokasi bersarang. Idenya adalah Anda akan mulai dengan lokasi yang sangat umum, menerapkan beberapa konfigurasi yang umum untuk beberapa kecocokan yang mungkin, dan kemudian memiliki lokasi bersarang terpisah untuk berbagai jenis jalur yang ingin Anda cocokkan. Misalnya, mungkin berguna untuk melakukan sesuatu seperti ini:
location /specialpages/ {
# some config
location /specialpages/static/ {
try_files $uri $uri/ =404;
}
location /specialpages/dynamic/ {
proxy_pass http://127.0.0.1;
}
}