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


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;

2
Bekerja dengan baik - Saya akhirnya melakukan location = / filename & menulis ulang ^ /filename.$client lalu;
Jon Rhoades
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.