Gunakan Nginx ke server halaman yang berbeda tergantung pada alamat IP / subnet

8

Untuk alasan yang mengerikan untuk masuk ke ... Saya menggunakan Nginx sebagai server web dan ingin itu melayani satu halaman untuk pengguna internal (katakan pada 10.0.0.0/16) dan halaman lain untuk pengguna eksternal pada alamat IP lainnya.

Sebagai contoh:

  • PC "Internal" dengan IP 10.0.0.34 masuk ke company.com/page.html mendapatkan halaman internal.html

  • PC "Eksternal" dengan IP 8.8.8.8 pergi ke company.com/page.html mendapatkan halaman external.html

Jon Rhoades
sumber
2
Untuk memperjelas; Menggunakan Nginx tidak mengerikan, yang perlu saya lakukan adalah! Nginx hebat!
Jon Rhoades

Jawaban:

13

Manfaatkan modul geo Nginx . Ini memungkinkan Anda mengatur nilai variabel berdasarkan alamat IP klien. geoarahan harus dalam httpbagian:

http {
  geo $client {
    default extra;
    10.0.0.0/8 intra;
  }

Anda dapat menggunakannya nanti di lokasi untuk mencari file

location / {
  try_files $uri.$client $uri = 404;
}

Yang berarti, Nginx akan diatur $clientke salah satu extraatau intraberdasarkan IP klien. Mari kita asumsikan itu adalah klien Intranet. Jika klien meminta page.html, Nginx akan mencari file /your/root/page.html.intra. Jika tidak ada file seperti itu, itu akan mencari /your/root/page.html. Jika tidak dapat menemukan keduanya, Nginx mengembalikan 404 respons "Tidak Ditemukan". Lebih lanjut tentang "try_files" dalam dokumentasi

Omong-omong, indexdirektif mendukung variabel juga. Misalnya

index index.$client.html index.html;
Alexander Azarov
sumber
2
Bekerja dengan baik - Saya akhirnya melakukan location = / filename & menulis ulang ^ /filename.$client lalu;
Jon Rhoades