Pertanyaan Bidang yang berbeda untuk proxy_set_header dalam konfigurasi nginx


Saya sangat baru dalam konfigurasi nginx. Saya ingin menggunakannya untuk mengatur virtual host sehingga saya dapat menjalankan aplikasi Node JS yang berbeda pada port yang berbeda pada server yang sama, tetapi mereka melayani di subdomain yang berbeda. Setelah beberapa pencarian, saya menemukan posting di stackoverflow dan berfungsi dengan baik untuk apa yang ingin saya lakukan. Di antara hal-hal lain, kode tersebut melibatkan blok lokasi berikut

location / {                                                              │
    proxy_set_header X-Real-IP $remote_addr;                              │
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;          │
    proxy_set_header Host $http_host;                                     │
    proxy_set_header X-NginX-Proxy true;                                  │
                                                                          │
    proxy_pass http://otherapp/;                                          │
    proxy_redirect off;                                                   │
}

Sekarang saya ingin memahami apa yang dilakukan skrip. Saya melihat dokumen dan catatan nginx diposting oleh berbagai orang, dan memahami beberapa hal. Tampaknya bagi saya bahwa apa yang saya inginkan mungkin akan bekerja bahkan jika saya menghapus semua proxy_set_header baris dalam kode di atas KECUALI proxy_pass. Saya ingin mempelajari bidang apa saja yang berbeda dalam kode di atas. Mungkin mereka berguna untuk beberapa hal yang saya tidak sadari saat ini. Apakah ada tempat yang mencantumkan semua bidang untuk proxy_set_header modul dan menjelaskannya?

Terima kasih.


7
2017-09-22 21:51






Jawaban:


Pada dasarnya, apa yang dilakukannya adalah memberikan informasi ke server yang diwakilinya. Dalam urutan:

  1. X-Real-IP - server yang Anda proksi akan melihat sistem proxy nginx sebagai "client IP" dalam logika aplikasi atau pencatatan yang dilakukan, karena layanan nginx adalah sumber koneksi TCP. Ini biasanya sangat tidak berharga, terutama di log. Server backend dapat menggunakan tajuk ini sebagai ganti dari IP klien normal untuk penebangan atau penggunaan lain di mana ia membutuhkan IP klien.
  2. X-Forwarded-For - Ini adalah header standar-ish, yang mirip dengan X-Real-IP, tetapi memberikan entri sumber koneksi tambahan untuk seluruh rantai proksi yang dilewatkan oleh koneksi. Dapat sedikit lebih sakit kepala untuk mengurai dan bekerja dengan dari server backend karena ada kemungkinan beberapa entri.
  3. Host - Ini adalah hal yang paling penting untuk aplikasi Anda. Biasanya, permintaan yang nginx buat ke server backend akan berisi di dalamnya Host tajuk alamat yang telah Anda konfigurasikan (dalam hal ini http://otherapp/). Ini mungkin tidak diinginkan jika proxy ke sesuatu yang melakukan virtual hosting berbasis nama, atau sesuatu yang menghasilkan tautan berdasarkan header host yang diterima. Konfigurasi ini membuatnya sehingga Host header yang dikirim klien nginx dikirim ke backend (setara dengan Apache ProxyPreserveHost).
  4. X-NginX-Proxy - Semua ini berfungsi sebagai penanda bahwa proxy digunakan. Mungkin tidak berguna dalam banyak kasus.

8
2017-09-22 22:11



Terima kasih. Apakah ada situs yang memiliki informasi tentang yang lain fields? Dokumentasi di situs nginx tidak memiliki informasi itu. - user191017
@ user191017 Setiap tajuk HTTP (termasuk yang Anda buat yang Anda tangani) adalah permainan yang adil - lihat sini. - Shane Madden♦
@ user191017 Situs web Nginx tidak memiliki informasi tentang alfabet inggris juga. Apa yang Anda tanyakan sebenarnya penting protokol HTTP. Lihat: tools.ietf.org/html/rfc2616 - VBart