پراکسی معکوس در Express.js


در این مقاله می خواهیم به بررسی یکی از راهکارهای امنیتی در پلتفرم nodejs بپردازیم. پراکسی معکوس یک سرور پراکسی است که منابع برنامه را از یک یا چند سرور دریافت می کند درحالی که کاربر هیچ دسترسی به سرورها ندارد.کاربر یک درخواست را به پراکسی سرور ارسال می کند و این تنها پراکسی سرور است که می داند آن درخواست را باید در کدام سرور جستجو کرده response را برای کاربر ارسال کند.در این مقاله قراره یاده بگیریم که چطور یک پراکسی سرور را در فریمورک Express.js ایجاد کنیم و مورد استفاده قرار دهیم و ویژگی هایی که این پراکسی سرور خواهد داشت :
- 3 سرور مختلف که بر روی 3 پورت مجزا اجرا خواهند شد
- دریافت request و ارسال response
Http-proxy :
ماژولی که می توانیم به راحتی از طریق NPM آن را به پروژه اضافه کنیم و در نهایت یک reverse proxy (پراکسی معکوس) را به راحتی کانفیگ کنیم.
پروژه :
در ابتدا پروژه nodejs خود را داخل یک دایرکتوری خاص به همراه فایل package.json ایجاد کنید
همانطور که می دانید می توانید با دستور npm init این فایل را ایجاد کنید.و در نهایت با استفاده از دستورات زیر ماژول فریمورک Express و http-proxy را بر روی پروژه نصب کنید.
1 |
npm install --save express http-proxy |
کدها :
ایجاد فایل server.js و قرار دادن کدهای زیر در این فایل.
1 2 3 4 5 6 7 8 |
var express = require("express"); var app = express(); app.get('/app1',function(req,res) { res.send("Hello world From Server 1"); }); app.listen(3001); |
ایجاد فایل app.js و کانفیگ proxy server .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
var express = require('express'); var app = express(); var httpProxy = require('http-proxy'); var apiProxy = httpProxy.createProxyServer(); var serverOne = 'http://localhost:3001', ServerTwo = 'http://localhost:3002', ServerThree = 'http://localhost:3002'; app.all("/app1/*", function(req, res) { console.log('redirecting to Server1'); apiProxy.web(req, res, {target: serverOne}); }); app.all("/app2/*", function(req, res) { console.log('redirecting to Server2'); apiProxy.web(req, res, {target: ServerTwo}); }); app.all("/app2/*", function(req, res) { console.log('redirecting to Server3'); apiProxy.web(req, res, {target: ServerThree}); }); app.listen(3000); |
در این قسمت از کد می توانید targetهای مختلفی را برای اعمال proxy در قسمت های مختلف ایجاد کنید.
اجرای برنامه :
وقتی برنامه را اجرای می کنید پراکسی سرور بر روی پورت 3000 اجرا می شود ولی اگر دقت کنید هر یک از روت های تعریف شده برای یک target خاص که همان مفهوم پراکسی معکوس است بر روی پورت های مختلفی اجرا می شود در حالی که پورتی که شما request ها را ارسال می کنید 3000 است و این مفهوم را می رساند که شما فقط می دانید برنامه بر روی پورت 3000 اجرا شده است ولی از اینکه فرآیندها از چه پورتی برای اجرا استفاده می کنند اطلاعی ندارید. تصاویر زیر کاملا گویای این مسئله است
نتیجه گیری :
Reverse proxy (پراکسی معکوس) تنها یکی از رویکردهای افزایش امنیت برنامه های توسعه داده شده با nodejs است که در این مقاله توانستیم با استفاده از ماژول http-proxy یک پراکسی سرور را برای ایجاد پراکسی معکوس اجرا کنیم.خوشحال میشم اگر تجربه ای در ارتباط با reverse proxy دارید کامنت کنید.
دیدگاهتان را بنویسید