Nginx berfungsi sebagai server ujung depan, yang dalam hal ini proksi permintaan ke server node.js. Oleh karena itu Anda perlu mengatur file konfigurasi nginx untuk node.
Inilah yang telah saya lakukan di kotak Ubuntu saya:
Buat file yourdomain.com
di /etc/nginx/sites-available/
:
vim /etc/nginx/sites-available/yourdomain.com
Di dalamnya Anda harus memiliki sesuatu seperti:
# the IP(s) on which your node server is running. I chose port 3000.
upstream app_yourdomain {
server 127.0.0.1:3000;
keepalive 8;
}
# the nginx server instance
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
access_log /var/log/nginx/yourdomain.com.log;
# pass the request to the node.js server with the correct headers
# and much more can be added, see nginx config options
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://app_yourdomain/;
proxy_redirect off;
}
}
Jika Anda ingin nginx (> = 1.3.13) juga menangani permintaan websocket, tambahkan baris berikut di location /
bagian ini:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Setelah Anda memiliki pengaturan ini, Anda harus mengaktifkan situs yang ditentukan dalam file konfigurasi di atas:
cd /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/yourdomain.com yourdomain.com
Buat aplikasi server simpul Anda di /var/www/yourdomain/app.js
dan jalankan dilocalhost:3000
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
Tes untuk kesalahan sintaks:
nginx -t
Mulai ulang nginx:
sudo /etc/init.d/nginx restart
Terakhir mulai server simpul:
cd /var/www/yourdomain/ && node app.js
Sekarang Anda akan melihat "Hello World" di yourdomain.com
Satu catatan terakhir berkaitan dengan memulai server simpul: Anda harus menggunakan semacam sistem pemantauan untuk daemon simpul. Ada tutorial mengagumkan tentang simpul dengan pemula dan monit .
location / { proxy_pass http://127.0.0.1:3000; }
? Mengapa Anda membutuhkan seluruhupstream
bit konfigurasi?sites-enabled
dansites-available
direktori di dalamnya/etc/nginx
. Jika versi Anda datang tanpa dua direktori ini, kemungkinan direktori tersebut memiliki satuconf.d
direktori saja. Dalam hal ini, mengikuti petunjuk ini tidak akan berpengaruh, KECUALI Anda memodifikasiinclude
pernyataan di dalam filenginx.conf
untuk menunjuk kesites-enabled
bukan standarconf.d
. Harapan itu masuk akal. Itu harus menjadi cukup jelas setelah Anda melihatinclude
pernyataan di dalamnginx.conf
.Anda juga dapat mengatur beberapa domain dengan nginx, meneruskan ke banyak proses node.js.
Misalnya untuk mencapai ini:
Port-port ini (4000 dan 5000) harus digunakan untuk mendengarkan permintaan aplikasi dalam kode aplikasi Anda.
/ etc / nginx / situs-enabled / domain1
Di / etc / nginx / situs-enabled / domain2
sumber
http://example.com
otomatis saya akan302
melakukannyahttp://www.example.com
. Mengapa demikian?proxy_set_header Host $host
untuk menghindari pengalihan HTTP 302.Anda juga dapat memiliki url berbeda untuk aplikasi dalam satu konfigurasi server:
Di / etc / nginx / situs-enabled / yourdomain :
Mulai ulang nginx:
Memulai aplikasi.
simpul app1.js
simpul app2.js
sumber
Saya proksi aplikasi Node Express independen melalui Nginx.
Dengan demikian aplikasi baru dapat dengan mudah dipasang dan saya juga dapat menjalankan hal-hal lain di server yang sama di lokasi yang berbeda.
Berikut ini rincian lebih lanjut tentang pengaturan saya dengan contoh konfigurasi Nginx:
Dari: http://skovalyov.blogspot.dk/2012/07/deploy-multiple-node-applications-on.html
sumber
Node.js dengan konfigurasi Nginx.
tambahkan konfigurasi berikut sehingga Nginx bertindak sebagai proxy redirect ke port 3000 traffic dari server ketika kita berasal dari “subdomain.your_domain.com”
sumber
menjawab pertanyaan Anda 2:
Saya akan menggunakan opsi
b
hanya karena mengkonsumsi sumber daya yang jauh lebih sedikit. dengan opsi 'a', setiap klien akan menyebabkan server mengkonsumsi banyak memori, memuat semua file yang Anda butuhkan (walaupun saya suka php, ini adalah salah satu masalah dengan itu). Dengan opsi 'b' Anda dapat memuat perpustakaan Anda (kode yang dapat digunakan kembali) dan membaginya di antara semua permintaan klien.Tetapi perlu diketahui bahwa jika Anda memiliki banyak core, Anda harus men-tweak node.js untuk menggunakan semuanya.
sumber
Saya membuat repositori di Github yang bisa Anda tiru, vagrant-node-nginx-boilerplate
pada dasarnya aplikasi node.js di
/var/www/nodeapp
isdan konfigurasi nginx at
/etc/nginx/sites-available/
adalahsumber
Anda juga bisa menggunakan node.js untuk menghasilkan file statis ke direktori yang dilayani oleh nginx. Tentu saja, beberapa bagian dinamis situs Anda dapat dilayani oleh simpul, dan sebagian oleh nginx (statis).
Memiliki beberapa dari mereka dilayani oleh nginx meningkatkan kinerja Anda ..
sumber
Kita dapat dengan mudah mengatur aplikasi Nodejs dengan Nginx bertindak sebagai proxy terbalik.
Konfigurasi berikut menganggap aplikasi NodeJS berjalan pada 127.0.0.1:8080,
dalam pengaturan di atas aplikasi Nodejs Anda akan,
HTTP_HOST
tajuk tempat Anda dapat menerapkan logika khusus domain untuk melayani respons. 'Aplikasi Anda harus dikelola oleh manajer proses seperti pm2 atau penyelia untuk menangani situasi / penggunaan kembali soket atau sumber daya dll.
Siapkan layanan pelaporan kesalahan untuk mendapatkan kesalahan produksi seperti sentry atau rollbar
CATATAN: Anda dapat mengatur logika untuk menyerahkan rute permintaan khusus domain, membuat middleware untuk aplikasi expressjs
sumber
Nginx dapat bertindak sebagai server proxy terbalik yang berfungsi seperti manajer proyek. Ketika mendapat permintaan, itu menganalisis dan meneruskan permintaan ke hulu (anggota proyek) atau menangani sendiri. Nginx memiliki dua cara untuk menangani permintaan berdasarkan cara konfigurasi.
meneruskan permintaan ke server lain
}
Server permintaan
meneruskan permintaan ke server lain
Ketika Anda menjalankan server node.js pada port 8000 nginx akan meneruskan permintaan ke node.js. Tulis logika node.js dan tangani permintaan tersebut. Itu saja Anda memiliki server nodejs Anda berjalan di belakang server nginx.
Jika Anda ingin menjalankan layanan lain selain nodejs, jalankan saja layanan lain seperti Django, flask, php pada port yang berbeda dan konfigurasikan dalam nginx.
sumber
Anda dapat menjalankan nodejs menggunakan PM2 jika Anda ingin mengelola setiap sarana microservice dan menjalankannya. Node akan berjalan di port yang benar, cukup konfigurasikan port itu di nginx (/etc/nginx/sites-enabled/domain.com)
Periksa apakah localhost sedang berjalan atau tidak dengan menggunakan ping.
Dan
Ini yang terbaik dan seperti yang Anda katakan lebih mudah juga
sumber
Setup terbaik dan sederhana dengan Nginx dan Nodejs adalah menggunakan Nginx sebagai penyeimbang beban HTTP dan TCP dengan proxy_protocol diaktifkan. Dalam konteks ini, Nginx akan dapat mem-proxy permintaan masuk ke nodejs, dan juga mengakhiri koneksi SSL ke server Nginx backend, dan tidak ke server proxy itu sendiri. (SSL-Lewati)
Menurut pendapat saya, tidak ada gunanya memberikan contoh non-SSL, karena semua aplikasi web (atau seharusnya) menggunakan lingkungan yang aman.
Contoh konfigurasi untuk server proxy, di /etc/nginx/nginx.conf
Sekarang, mari kita menangani server web backend. /etc/nginx/nginx.conf :
Sekarang, mari konfigurasikan host virtual dengan konfigurasi yang diaktifkan SSL dan proxy_protocol ini di /etc/nginx/sites-available/example.com-https.conf :
Dan terakhir, sampel dari 2 nodejs webservers : Server pertama:
Server kedua:
Sekarang semuanya harus bekerja dengan sempurna dan seimbang.
Beberapa waktu lalu saya menulis tentang Cara mengatur Nginx sebagai penyeimbang beban TCP di Docker . Periksa apakah Anda menggunakan Docker.
sumber