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?

carlo.polisini
sumber

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.

Flup
sumber
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