Anda harus hampir selalu menggunakan $host
, karena itu satu-satunya yang dijamin memiliki sesuatu yang masuk akal terlepas dari bagaimana agen-pengguna berperilaku, kecuali jika Anda secara khusus membutuhkan semantik dari salah satu variabel lain.
Perbedaannya dijelaskan dalam dokumentasi nginx :
$host
mengandung "dalam urutan prioritas ini: nama host dari baris permintaan, atau nama host dari bidang tajuk permintaan 'Host', atau nama server yang cocok dengan permintaan"
$http_host
berisi konten bidang header "Host" HTTP, jika ada dalam permintaan
$server_name
berisi server_name
host virtual yang memproses permintaan, seperti yang didefinisikan dalam konfigurasi nginx. Jika a server
berisi banyak server_name
s, hanya yang pertama yang akan hadir dalam variabel ini.
Karena agen pengguna sah untuk mengirim nama host di baris permintaan alih-alih di header Host: meskipun jarang dilakukan kecuali saat menghubungkan ke proxy, Anda harus bertanggung jawab untuk ini.
Anda juga harus memperhitungkan kasus di mana agen-pengguna tidak mengirim nama host sama sekali, misalnya permintaan HTTP / 1.0 kuno dan perangkat lunak modern yang ditulis dengan buruk. Anda dapat melakukannya dengan mengalihkan mereka ke host virtual catch-all yang tidak melayani apa pun, jika Anda melayani beberapa situs web, atau jika Anda hanya memiliki satu situs web di server Anda, Anda dapat memproses semuanya melalui satu host virtual . Dalam kasus yang terakhir Anda harus memperhitungkan ini juga.
Hanya $host
variabel yang bertanggung jawab atas semua hal yang mungkin dilakukan agen pengguna saat membentuk permintaan HTTP.
$scheme
dan$host
...return 301 /forum/index.php?posts/$arg_p/;
berfungsi dengan baik.