Saya mencoba mengkonfigurasi server Nginx untuk terhubung ke server HTTP Node.js melalui soket domain UNIX.
File konfigurasi Nginx:
server {
listen 80;
location / {
proxy_pass http://unix:/tmp/app.socket:/;
}
}
(menurut http://wiki.nginx.org/HttpProxyModule#proxy_pass )
Skrip Node.js:
var http = require('http');
http.createServer(function(req, res) {
console.log('received request');
req.end('received request\n');
}).listen('/tmp/app.socket');
Sekarang, ketika saya mencoba menelepon
curl http://localhost/
Saya hanya mendapatkan halaman kesalahan Gateway 502 di curl dan tidak ada pada proses Node.js.
Apakah saya melakukan sesuatu yang salah?
edit:
Setelah mencoba solusi quanta, kesalahan harus ada hubungannya dengan konfigurasi Nginx, karena proses Node.js membuat koneksi ke soket dengan benar.
Saya juga mencoba mengkonfigurasi Nginx dengan cara ini:
upstream myapp {
server unix:/tmp/app.socket;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
}
}
Tapi ini juga tidak berhasil.
BTW Saya menggunakan Nginx v1.0.6.
Berikut ini sedang ditulis ke log kesalahan di Nginx, ketika saya menggunakan konfigurasi kedua
2011/09/28 13:33:47 [crit] 1849#0: *5 connect() to unix:/tmp/app.socket failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://unix:/tmp/app.socket:/", host: "localhost:80"
"502 Bad Gateway" berarti bahwa Nginx tidak dapat menerima respons dari server hulu. Pastikan Anda memiliki proses dengarkan
/tmp/app.socket
:sumber
/tmp/app.socket
. Ketika saya menjalankan perintah Anda itu memberi sayaunix 2 [ ACC ] STREAM HÖRT 29673 7029/node /tmp/app.socket
. Tapi terima kasih atas tipnya. Perintah ini cukup berguna.Saya menyelesaikannya. Pesan log kesalahan yang saya posting di atas menuntun saya ke jawabannya.
Saya selalu memulai proses Node.js sebagai pengguna normal, sementara Nginx dimulai oleh root. Ketika Node.js dimulai, ia menciptakan soket dengan
srwxr-xr-x
hak. Jadi Nginx tidak bisa menulis ke soket, hanya bisa membaca dari itu. Dengan cara ini semuanya bisa diatur dengan benar, ketika proses dimulai. Tetapi begitu saya menelepon halaman web, Nginx menyadari bahwa itu tidak memiliki hak untuk mem-proxy permintaan ke soket.Solusinya adalah berjalan
Sekarang semuanya baik-baik saja.
Bagaimanapun, terima kasih!
sumber
Saya tahu saya terlambat ke pesta, tetapi halaman ini muncul di pencarian Google untuk masalah yang tepat ini. Menjalankan perintah shell sebenarnya bukan solusi ideal bagi saya, dan inilah cara saya menyelesaikannya;
Alih-alih menjalankan chmod secara manual, Anda dapat membuat Node melakukannya dengan pustaka 'fs' setelah soket dibuat:
Tentunya jika Anda sudah memiliki hal-hal lain di acara onListening Anda, Anda harus menambahkan panggilan ke chmodSync ke dalam fungsi yang ada.
sumber