Pertanyaan bagus!
Ada banyak situs web dan aplikasi web gratis yang diimplementasikan dalam PHP yang berjalan di Apache, banyak orang menggunakannya sehingga Anda dapat menumbuhkan sesuatu yang cukup mudah dan selain itu, ini adalah cara yang tidak perlu untuk menyajikan konten statis. Node cepat, kuat, elegan, dan alat yang seksi dengan kekuatan mentah V8 dan tumpukan datar tanpa ketergantungan bawaan.
Saya juga menginginkan kemudahan / fleksibilitas dari Apache dan juga kegeraman dan keanggunan Node.JS, mengapa saya tidak memiliki keduanya ?
Untungnya dengan arahan ProxyPass di Apache httpd.conf
tidak terlalu sulit untuk mengirim semua permintaan pada URL tertentu ke aplikasi Node.JS Anda.
ProxyPass /node http://localhost:8000
Juga, pastikan baris berikut TIDAK dikomentari sehingga Anda mendapatkan proxy dan submodule yang tepat untuk mengubah rute permintaan http:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Kemudian jalankan aplikasi Node Anda di port 8000!
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Apache!\n');
}).listen(8000, '127.0.0.1');
Kemudian Anda dapat mengakses semua logika Node.JS menggunakan /node/
jalur di url Anda, sisa situs web dapat diserahkan ke Apache untuk meng-host halaman PHP Anda yang ada:
Sekarang satu-satunya yang tersisa adalah meyakinkan perusahaan hosting Anda untuk menjalankannya dengan konfigurasi ini !!!
mod_proxy_wstunnel
. Saya melihat Anda sekarang telah menemukan jawaban Anda, untuk orang lain dengan masalah yang sama silakan merujuk ke: serverfault.com/questions/616370/…Pertanyaan ini lebih pada Server Fault tetapi FWIW saya katakan menjalankan Apache di depan Node.js bukan pendekatan yang baik dalam banyak kasus.
ProxyPass dari Apache sangat luar biasa untuk banyak hal (seperti mengekspos layanan berbasis Tomcat sebagai bagian dari sebuah situs) dan jika aplikasi Node.js Anda hanya melakukan peran tertentu, kecil, atau merupakan alat internal yang cenderung memiliki jumlah pengguna yang terbatas maka mungkin lebih mudah hanya menggunakannya sehingga Anda bisa membuatnya bekerja dan melanjutkan, tetapi itu tidak terdengar seperti kasus di sini.
Jika Anda ingin memanfaatkan kinerja dan skala yang akan Anda dapatkan dari menggunakan Node.js - dan terutama jika Anda ingin menggunakan sesuatu yang melibatkan mempertahankan koneksi yang terus-menerus seperti soket web - Anda lebih baik menjalankan Apache dan Node Anda. js pada port lain (mis. Apache pada localhost: 8080, Node.js pada localhost: 3000) dan kemudian menjalankan sesuatu seperti nginx, Varnish atau proksi HA di depan - dan merutekan lalu lintas dengan cara itu.
Dengan sesuatu seperti pernis atau nginx Anda dapat merutekan lalu lintas berdasarkan path dan / atau host. Mereka berdua menggunakan sumber daya sistem yang jauh lebih sedikit dan jauh lebih scalable menggunakan Apache untuk melakukan hal yang sama.
sumber
Instruksi untuk menjalankan
node server
bersamaapache2(v2.4.xx) server
:Dalam rangka untuk pipa semua permintaan pada URL tertentu untuk aplikasi Node.js Anda membuat
CUSTOM.conf
file di/etc/apache2/conf-available
direktori, dan tambahkan baris berikut ke file yang dibuat:Ubah 8000 ke nomor port yang diinginkan untuk
node server
.Aktifkan konfigurasi khusus dengan perintah berikut:
CUSTOM adalah nama file Anda yang baru dibuat tanpa ekstensi, kemudian aktifkan
proxy_http
dengan perintah:harus mengaktifkan modul
proxy
dan keduanyaproxy_http
. Anda dapat memeriksa apakah modul diaktifkan atau tidak dengan:Setelah konfigurasi dan modul diaktifkan, Anda harus memulai ulang server apache:
Sekarang Anda dapat menjalankan server simpul. Semua permintaan ke
URL/node
akan ditangani oleh server simpul.sumber
Menjalankan Node dan Apache pada satu server sepele karena mereka tidak konflik. NodeJS hanyalah cara untuk mengeksekusi sisi server JavaScript. Dilema sesungguhnya datang dari mengakses Node dan Apache dari luar. Seperti yang saya lihat, Anda memiliki dua pilihan:
Siapkan Apache untuk mem-proksi semua permintaan yang cocok ke NodeJS, yang akan melakukan pengunggahan file dan apa pun lainnya dalam node.
Memiliki Apache dan Node pada kombinasi IP: port yang berbeda (jika server Anda memiliki dua IP, maka satu dapat terikat ke pendengar simpul Anda, yang lain ke Apache).
Saya juga mulai curiga bahwa ini mungkin bukan yang sebenarnya Anda cari. Jika tujuan akhir Anda adalah untuk menulis logika aplikasi Anda di Nodejs dan beberapa bagian "penanganan file" yang Anda lepas ke kontraktor, maka itu benar-benar pilihan bahasa, bukan server web.
sumber
Anda dapat menggunakan pendekatan yang berbeda seperti menulis server proxy terbalik dengan nodejs untuk mem-proksi apache dan semua aplikasi nodejs lainnya.
Pertama, Anda perlu menjalankan apache di port lain selain port 80. mis: port 8080
Kemudian Anda dapat menulis skrip proxy terbalik dengan nodejs sebagai:
Artikel berikut menjelaskan keseluruhan proses pembuatan ini.
LARI APACHE DENGAN NODE JS REVERSE PROXY - MENGGUNAKAN REDBIRD
sumber
sumber
Saya menggabungkan jawaban di atas dengan certbot SSL cert dan CORS access-control-allow-header dan membuatnya berfungsi sehingga saya pikir saya akan membagikan hasilnya.
Apache httpd.conf ditambahkan ke bagian bawah file:
Pengaturan VirtualHost Apache (root doc untuk PHP berada di bawah Apache dan SSL dengan Certbot, sementara situs node.js / socket.io berjalan pada port 3000 - dan menggunakan sertifikat SSL dari Apache) Juga perhatikan situs node.js menggunakan proxy untuk folder / nodejs, socket.io, dan ws (websockets):
Maka aplikasi node.js saya (app.js):
Saya memaksa pendengar ip4, tapi itu opsional - Anda bisa mengganti:
kode app node.js (app.js) berlanjut dengan:
akhirnya, di sisi klien (dibuat sebagai nodejs.js):
Dalam contoh ini ketika JS dimuat, ia akan memancarkan "peristiwa-bernama" ke soket mengirim data dalam JSON ke server node.js / socket.io.
Menggunakan io dan soket pada server di bawah jalur / nodejs (terhubung oleh klien), menerima data dan kemudian mengirimkannya kembali sebagai siaran. Setiap pengguna lain dalam soket akan menerima data dengan pendengar mereka "bernama-acara-siaran". Perhatikan bahwa pengirim tidak menerima siarannya sendiri.
sumber
Saya baru-baru ini mengalami masalah ini, di mana saya perlu berkomunikasi antara klien dan server menggunakan websocket dalam proyek codeigniter berbasis PHP.
Saya menyelesaikan masalah ini dengan menambahkan port saya (aplikasi node aktif) ke
Allow incoming TCP ports
&Allow outgoing TCP ports
daftar.Anda dapat menemukan konfigurasi ini di
Firewall Configurations
panel WHM server Anda.sumber
Saya mencari informasi yang sama. Akhirnya ditemukan jawaban dari tautan pada jawaban di atas oleh @ Straseus
http://arguments.callee.info/2010/04/20/running-apache-and-node-js-together/
Berikut adalah solusi terakhir untuk menjalankan situs web apache pada port 80, layanan simpul js pada port 8080 dan menggunakan .htaccess RewriteRule
Di DocumentRoot situs web apache, tambahkan berikut ini:
Untuk pengalihan tingkat direktori, tautan di atas menyarankan (. +) Aturan, yang memerlukan satu atau lebih karakter setelah 'simpul /'. Saya harus mengonversikannya ke (. *) Yang nol atau lebih agar barang saya berfungsi.
Terima kasih banyak untuk tautannya @ Straseus
sumber
mod_proxy
diaktifkan.ProxyPass
?Saya berasumsi bahwa Anda membuat aplikasi web karena Anda merujuk ke Apache dan Node. Jawaban cepat - Apakah mungkin - YA. Apakah disarankan - TIDAK. Node bundel itu adalah server web sendiri dan sebagian besar situs web berjalan pada port 80. Saya juga berasumsi bahwa saat ini tidak ada plugin Apache yang didukung oleh Nodejs dan saya tidak yakin apakah membuat virtual host adalah cara terbaik untuk mengimplementasikannya. Ini adalah pertanyaan yang harus dijawab oleh pengembang yang memelihara Nodejs seperti orang-orang baik di Joyent.
Daripada port, akan lebih baik untuk mengevaluasi tumpukan teknologi Node yang benar-benar berbeda dari kebanyakan orang lain dan itulah sebabnya saya menyukainya tetapi itu juga melibatkan beberapa kompromi yang harus Anda ketahui sebelumnya.
Contoh Anda terlihat mirip dengan CMS atau aplikasi web berbagi dan ada ratusan aplikasi di luar kotak yang tersedia yang akan berjalan dengan baik di Apache. Bahkan jika Anda tidak menyukai solusi readymade, Anda bisa menulis webapp dalam PHP / Java / Python atau mencampur dan mencocokkannya dengan beberapa aplikasi siap pakai dan semuanya dirancang dan didukung untuk berjalan di belakang satu instance Apache.
Sudah waktunya untuk berhenti dan memikirkan apa yang baru saja saya katakan.
Sekarang Anda siap untuk memutuskan techstack mana yang akan Anda gunakan. Jika situs web Anda tidak akan pernah menggunakan salah satu dari ribuan aplikasi siap pakai yang memerlukan Apache, maka pilih Node jika tidak, Anda harus terlebih dahulu menghilangkan asumsi yang telah saya sebutkan sebelumnya.
Pada akhirnya, pilihan techstack Anda jauh lebih penting daripada komponen individu mana pun.
Saya sepenuhnya setuju dengan @ Straseus bahwa itu relatif sepele untuk menggunakan api sistem file node.js untuk menangani unggahan dan unduhan tetapi berpikir lebih banyak tentang apa yang Anda inginkan dari situs web Anda dalam jangka panjang dan kemudian memilih techstack Anda.
Mempelajari kerangka kerja Node lebih mudah daripada mempelajari kerangka kerja lain tetapi itu bukan obat mujarab. Dengan upaya yang sedikit lebih (yang mungkin merupakan upaya yang berharga dalam dirinya sendiri), Anda dapat mempelajari kerangka kerja lainnya juga. Kita semua belajar dari satu sama lain dan Anda akan lebih produktif jika Anda bekerja sebagai tim kecil daripada jika Anda bekerja sendiri dan keterampilan teknis backend Anda juga akan berkembang lebih cepat. Karena itu, jangan mengabaikan keahlian anggota tim Anda dengan harga murah.
Posting ini berumur sekitar satu tahun dan kemungkinan Anda sudah memutuskan, tetapi saya harap kata-kata kasar saya akan membantu orang berikutnya yang sedang mengalami keputusan serupa.
Terima kasih sudah membaca.
sumber