Redirect subpath ke host eksternal dengan Nginx


13

Saya perlu membuat peta yang cukup sederhana di Nginx redirect subpath ke server lain yang terletak di subnet yang sama.

  • Server Nginx: 192.168.0.2
  • Server Tomcat: 192.168.0.3:8443

Saya mencoba meletakkan ini di bagian server

    location /tomcatapi/ {
        rewrite /tomcatapi/(.*) $1 break;
        proxy_pass http://192.168.0.3:8443;
    }

tetapi yang saya dapatkan hanyalah mengakses http://www.myservice.com/tomcatapi/ adalah halaman kesalahan 500 dan dalam file log nginx saya memiliki kesalahan ini:

    the rewritten URI has a zero length

Apa yang saya lewatkan dalam conf ini?

Jawaban:


12

Mari kita lihat baris penulisan ulang Anda:

rewrite /tomcatapi/(.*) $1 break;

Anda mengambil bit dalam tanda kurung (yaitu semuanya setelahnya /tomcatapi/), yang ditugaskan $1, dan menggunakannya sebagai satu-satunya konten URI yang ditulis ulang.

Dalam contoh Anda, tidak ada apa-apa setelahnya /tomcatapi/, jadi penulisan ulang berakhir kosong, dan inilah yang nginx mengeluh.

Jika Anda mengubah aturan penulisan ulang menjadi

rewrite /tomcatapi/(.*) /$1 break;

maka Anda akan selalu berakhir dengan setidaknya /dalam output penulisan ulang.


Terima kasih atas balasan Anda, toh saya menambahkan "/" tetapi sekarang mengakses url browser macet dalam keadaan memuat dan dalam file log sekarang saya melihat kesalahan yang berbeda: hulu tidak mengirim tajuk HTTP / 1.0 yang valid saat membaca tajuk tanggapan dari hulu
carlo.polisini

Apa yang dicatat oleh log di server kucing jantan Anda?
Flup

Saya menemukan kesalahan, kesalahannya adalah aplikasi hanya tersedia di https dan bukan http! Jadi sintaksnya tepat setelah koreksi Anda, cukup ganti http dengan https untuk membuatnya berfungsi.
carlo.polisini
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.