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.