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

اجرای هم زمان 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/ باز کنید تا مطئن شوید

 

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

اول از همه کوچک ترین عضو مجموعه 4xmen بنده حقیر هستم. در ثانی یک توسعه دهنده هستم زمینه های تخصصی کارم :‌ Delphi, PHP, C++ ,Python, JavaScript, Unity game engine, C#, asm و علاقه مند به لینوکس، RCE ، کریپتوگرافی هستم. تا الان حضرت حق اینا رو به ما داده و هر وقت که بخواد ازمون میگیره دست خودشه. یا حق، با حق، تا حق
نوشته ایجاد شد 96

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

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

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

نوشته های مرتبط

متنی که میخواهید برای جستجو وارد کرده و دکمه جستجو را فشار دهید. برای لغو دکمه ESC را فشار دهید.

بازگشت به بالا