Jadi saya mengatur jalur virtual ketika menunjuk pada aplikasi node.js di nginx conf saya. bagian yang relevan seperti:
location /app {
rewrite /app/(.*) /$1 break;
proxy_pass http://localhost:3000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Berfungsi bagus, kecuali ketika aplikasi node.js saya (aplikasi ekspres) memanggil redirect.
Sebagai contoh, kotak dev menjalankan nginx pada port 8080, dan url ke root aplikasi node terlihat seperti:
http: // localhost: 8080 / app
Ketika saya memanggil redirect ke '/ app' dari node, redirect sebenarnya pergi ke:
Jawaban:
Masalahnya adalah bahwa aplikasi Node.js tidak mengeluarkan pengalihan dengan benar. Anda dapat menggunakan
proxy_redirect
untuk memperbaikinya di nginx:sumber
Saya hanya harus menyelesaikan masalah yang sama dengan Jenkins berjalan di belakang nginx. Apa yang saya lakukan adalah memasukkan port server ke
Host
header yang dikirim ke Jenkins:Semoga itu bisa membantu.
sumber
Saya mencoba solusi di atas, tetapi semuanya gagal setiap kali aplikasi node mengeluarkan URL yang sepenuhnya memenuhi syarat di header lokasi, seperti " http://nodeapp.com:8080/new/location "
Jadi saya akhirnya menggunakan $ http_host untuk melewati host dan port. Dan menggunakan kecocokan ~ ^ untuk menulis ulang url sepenuhnya.
Dalam kasus kami, server Node berjalan pada 8080, dan proxy nginx kami berjalan pada 8000. Ini berarti bahwa setiap URL yang sepenuhnya memenuhi syarat di header lokasi perlu ditulis ulang. Semoga ini bisa membantu seseorang !!
sumber
Per percakapan tentang pertanyaan ini , resolusi yang tepat adalah menyesuaikan proxy
Host
arahan header .Ubah ini:
Untuk ini:
$http_host
memegang nilai sebagaimana ditentukan dalam header HTTP HOST, yang mencakup porta. Pengalihan harus mengambil port khusus tanpa penyesuaian lebih lanjut untuk pengaturan OP.Jawaban ini (tiket yang sama) menjelaskan lebih lanjut:
sumber