برای طرح سوال و دسترسی به آموزش ها  کانال ما در تلگرام بپویندید  

اجرای هم زمان nodejs در کنار apache2 در سرور php

به نام دانای بر حق

مقدمه

یکی از سوالاتی که ذهن کسانی که با node.js کار میکنند رو در گیر میکنه استفاده هم زمان در کنار سرور هایی که روی اونها apache نصب هستش و مشکل دقیقا زمانی شروع میشود که شما دوست دارید هر دو بر روی پورت ۸۰ اجرا بشوند و چرا که express.js  نیز همواره قصد داره یه پورت جدید رو شنود کنه و در کنار آدرس وبسایت مثلا :۸۰۸۰ نمایش داده میشه، برای رفع این مشکل باید چه کاری کنیم؟

 

راه حل ها

در اینجا ۲ راه حل اساسی برای نمایش هر دو سرور در پورت ۸۰ و یا ۴۴۳ وجود دارد که هر دو رو راه حل مبتنی بر proxy میباشد تا این مشکل برطرف شود:

فعال کردن پروکسی بر روی آپاچی که توضیح آن را در ادامه میدهیم

فعال کردن پروکسی در node.js که شما رو به این مقاله ارجاع میدهیم

توضیح روش آپاچی

در روش مذکور ما مبنا رو بر Ubuntu گذاشتیم که شما میتوانید از روی الگوی معرفی شده این عمل رو روی سیستم عامل دیگری اگر نصب دارید انجام دهید.

مرحله اول فعال کردن مود های آپاچی با دستورات زیر در ترمینال لیست مود های زیر رو فعال میکنیم:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests

مرحله دوم ریستارت کردن آپاچی و اطمینان از اجرای صحیح

 sudo systemctl restart apache2

مرحله سوم راهندازی برنامه nodejs خود روی سرور :

مثلا کد زیر رو نوشته ایم و اجرا میکنیم وارد جزئیات چگونه نوشتن و نصب پکیج های آن نمیشویم:

const express = require('express')
const app = express()

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
})

خب بعد از اجرا یعنی برنامه ی ما بر روی پورت ۳۰۰۰ اجرا شده است.

مرحله چهارم حال ما این برنامه رو در دو جای مختلف اجرا میکنیم برای نمایش چگونگی فعال سازی. برای این کار تنظیمات میزبان مجازی و یا همان VirtualHost  آپاچی خود را باید تغییر دهید که من با دستور زیر آماده تغییر کردم:

sudo gedit /etc/apache2/sites-enabled/000-default.conf

مرحله پنجم افزودن آنچه میخواهیم من فرض میگیرم که دامنه mydomain.com بر روی لوکال خودم ست شده است که با تغییر روی hosts میتوانید به صورت مجازی دامنه را ip بدهیم با فرض فوق و subdomain.mydomain.com هم که ساب دامین است نیز باید روی لوکال باشد من دستورات زیر را به انتهای فایل اضافه میکنم:

<VirtualHost subdomain.mydomain.com:80>
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

<VirtualHost mydomain.com:80>
    ProxyPass /node http://localhost:8080/
    ProxyPassReverse /node http://localhost:8080/
</VirtualHost>

اطلاعات رو ذخیره و فایل رو میبندیم

مرحله ششم ریستارت کردن مجدد آپاچی:

 sudo systemctl restart apache2

نکته: اگر به هر دلیل آپاچی شما دیگر بالا نیومد اطلاعاتی که اضافه کردید رو پاک کنید و دوباره آپاچی رو ریستارت کنید

خب حالا دست پخت شما آماده است و باید

Hello World!

را ببنید.

اگر پیام زیر را دیدید:

Service Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

یا برنامه node.js شما اجرا نیست یا آدرس برنامه nodejs شما اشتباه در کافنیگ وارد شده در مثال بالا این آدرس را http://localhost:8080/ باز کنید تا مطئن شوید

 

باشد که رستگار شوید


توسط

برچسب‌ها:

نظرات

3 پاسخ به “اجرای هم زمان nodejs در کنار apache2 در سرور php”
  1. B نیم‌رخ
    B

    تنظیمات virtualbox اشتباه نیست؟ چون داره فورارد میکنه به پورت ۸۰۸۰ در حالی که node روی ۳۰۰۰ کوش واستاده!

  2. مهدی نیم‌رخ
    مهدی

    سلام
    لینکی که برای فعال کردن پروکسی روی node.js گذاشتین، دامنه اش رفته برای فروش …

    1. ‌A1Gard نیم‌رخ
      ‌A1Gard

      یه سرچ کنین زیاد هستش

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *