ساخت یک سرور باطن پروکسی معکوس
Summarize this content to 400 words in Persian Lang در معماری وب مدرن، پراکسیهای معکوس یک جزء اساسی هستند که لایهای از انتزاع و کنترل را بین دستگاههای مشتری و سرورهای پشتیبان ارائه میدهند. این وبلاگ شما را با مفهوم پروکسی معکوس، مزایای آن و نحوه اجرای یک سرور باطن پروکسی معکوس با استفاده از Node.js با Express آشنا می کند. همچنین موارد استفاده رایج و تنظیمات پیشرفته را بررسی خواهیم کرد.
فهرست مطالب
پروکسی معکوس چیست؟
چرا از پروکسی معکوس استفاده کنیم؟
موارد استفاده رایج
ساخت یک سرور پروکسی معکوس با Node.js
تنظیم محیط
ایجاد یک پروکسی معکوس اولیه
پیکربندی پیشرفته
تست و اشکال زدایی
نتیجه گیری
1. پروکسی معکوس چیست؟
پروکسی معکوس سروری است که بین درخواست های مشتری و یک یا چند سرور باطن قرار می گیرد. بر خلاف یک پروکسی فوروارد که از طرف مشتریان عمل می کند، یک پروکسی معکوس توسط سرورها برای هدایت درخواست های دریافتی به سرورهای باطن مناسب استفاده می شود. پروکسی معکوس تمام تعاملات مشتری را مدیریت می کند و معماری باطن را ایمن تر و مقیاس پذیرتر می کند.
عملکردهای کلیدی یک پروکسی معکوس:
تعادل بار: ترافیک ورودی را در چندین سرور توزیع می کند.
خاتمه SSL: رمزگذاری و رمزگشایی SSL را کنترل می کند.
ذخیره سازی: داده های درخواستی مکرر را برای کاهش بار روی سرورهای باطن ذخیره می کند.
امنیت: هویت و ویژگی های سرورهای باطن را پنهان می کند و یک لایه امنیتی اضافه می کند.
2. چرا از یک پروکسی معکوس استفاده کنیم؟
یک پروکسی معکوس چندین مزیت را ارائه می دهد:
امنیت: با قرار گرفتن بین کلاینت و سرور، یک پروکسی معکوس می تواند سرورهای باطن را از قرار گرفتن مستقیم در معرض اینترنت محافظت کند و به جلوگیری از حملات کمک کند.
تعادل بار: می تواند ترافیک ورودی را در چندین سرور توزیع کند و عملکرد و قابلیت اطمینان را بهبود بخشد.
خاتمه SSL: یک پروکسی معکوس میتواند گواهیهای SSL و رمزگذاری را مدیریت کند و بار پردازشی روی سرورهای باطن را کاهش دهد.
ذخیره سازی: این می تواند محتوا را ذخیره کند تا پاسخ ها را سریعتر بدون ضربه زدن به سرور پشتیبان هر بار ارائه دهد.
فشرده سازی: یک پروکسی معکوس می تواند پاسخ های خروجی را فشرده کند تا استفاده از پهنای باند را کاهش دهد.
3. موارد استفاده رایج
1. تعادل بار:
توزیع درخواست ها در چندین سرور برای متعادل کردن بار و جلوگیری از غرق شدن هر یک از سرورها.
2. افزایش امنیت:
محافظت از سرورهای باطن در برابر قرار گرفتن مستقیم در معرض اینترنت، فیلتر کردن درخواستها و کاهش حملات DDoS.
3. خاتمه SSL:
بارگذاری رمزگشایی SSL از سرورهای باطن به سرور پروکسی معکوس.
4. تعادل بار جهانی سرور:
هدایت ترافیک به سرورهای مختلف بر اساس موقعیت جغرافیایی مشتری.
5. معماری میکروسرویس ها:
مسیریابی درخواست ها به میکروسرویس های مختلف بر اساس الگوهای URL.
4. ساخت یک سرور پروکسی معکوس با Node.js
حالا بیایید یک سرور پروکسی معکوس ساده با استفاده از Node.js و Express پیاده سازی کنیم.
تنظیم محیط
ابتدا مطمئن شوید که Node.js و npm را روی دستگاه خود نصب کرده اید. اگر نه، می توانید آنها را از وب سایت رسمی Node.js دانلود و نصب کنید.
در مرحله بعد، یک دایرکتوری جدید برای پروژه خود ایجاد کنید و به آن بروید:
mkdir reverse-proxy-server
cd reverse-proxy-server
یک پروژه Node.js جدید را راه اندازی کنید:
npm init -y
وابستگی های لازم را نصب کنید:
npm install express http-proxy-middleware
ایجاد یک پروکسی معکوس اولیه
یک فایل به نام ایجاد کنید index.js در ریشه دایرکتوری پروژه شما:
// index.js
const express = require(‘express’);
const { createProxyMiddleware } = require(‘http-proxy-middleware’);
const app = express();
// Proxy configuration
const options = {
target: ‘http://localhost:5000’, // Target server URL
changeOrigin: true, // Needed for virtual hosted sites
pathRewrite: {
‘^/api’: ”, // Rewrite URL (remove /api prefix)
},
};
// Create a proxy middleware
const apiProxy = createProxyMiddleware(‘/api’, options);
// Use the proxy middleware
app.use(apiProxy);
// Start the Express server
app.listen(3000, () => {
console.log(‘Reverse proxy server running on http://localhost:3000’);
});
در این مثال:
ما استفاده می کنیم http-proxy-middleware بسته برای ایجاد یک پروکسی معکوس.
پروکسی به درخواست ها در مورد گوش می دهد /api مسیر و آنها را به سرور مورد نظر در حال اجرا در آن فوروارد می کند http://localhost:5000.
را pathRewrite گزینه را حذف می کند /api پیشوند قبل از ارسال درخواست به سرور مورد نظر.
پیکربندی پیشرفته
میتوانید پروکسی معکوس را برای رسیدگی به سناریوهای پیچیدهتر، مانند اهداف مختلف بر اساس مسیرهای درخواست، اضافه کردن هدرهای سفارشی، یا حتی تغییر درخواست یا پاسخ، سفارشی کنید.
مثال: سرورهای چندگانه هدف
const apiProxy1 = createProxyMiddleware(‘/service1’, {
target: ‘http://localhost:5001’,
changeOrigin: true,
pathRewrite: { ‘^/service1’: ” },
});
const apiProxy2 = createProxyMiddleware(‘/service2’, {
target: ‘http://localhost:5002’,
changeOrigin: true,
pathRewrite: { ‘^/service2’: ” },
});
app.use(apiProxy1);
app.use(apiProxy2);
در این تنظیمات، درخواست به /service1 هدایت می شوند http://localhost:5001، و درخواست به /service2 هدایت می شوند http://localhost:5002.
مثال: اضافه کردن هدرهای سفارشی
const apiProxy = createProxyMiddleware(‘/api’, {
target: ‘http://localhost:5000’,
changeOrigin: true,
onProxyReq: (proxyReq, req, res) => {
proxyReq.setHeader(‘X-Special-Proxy-Header’, ‘my-custom-value’);
},
});
5. تست و اشکال زدایی
برای آزمایش پروکسی معکوس خود، سرور باطن را در پورت 5000 راه اندازی کنید:
node backend-server.js
سپس، سرور پروکسی معکوس خود را راه اندازی کنید:
node index.js
اکنون می توانید درخواست ها را به http://localhost:3000/api و نحوه ارسال آنها را مشاهده کنید http://localhost:5000.
اگر با مشکلی مواجه شدید، میتوانید با تنظیم آن، اشکال زدایی را فعال کنید DEBUG متغیر محیطی:
DEBUG=http-proxy-middleware node index.js
این گزارش های دقیقی از رفتار پراکسی ارائه می دهد و به عیب یابی هر گونه مشکل کمک می کند.
6. نتیجه گیری
ساخت یک سرور پروکسی معکوس با Node.js یک راه قدرتمند برای مدیریت و مسیریابی ترافیک بین کلاینت ها و سرورهای باطن است. چه به دنبال بارگیری درخواستهای تعادل، افزایش امنیت یا سادهسازی معماری باطن خود باشید، یک پروکسی معکوس میتواند ابزار ارزشمندی در جعبه ابزار شما باشد.
در معماری وب مدرن، پراکسیهای معکوس یک جزء اساسی هستند که لایهای از انتزاع و کنترل را بین دستگاههای مشتری و سرورهای پشتیبان ارائه میدهند. این وبلاگ شما را با مفهوم پروکسی معکوس، مزایای آن و نحوه اجرای یک سرور باطن پروکسی معکوس با استفاده از Node.js با Express آشنا می کند. همچنین موارد استفاده رایج و تنظیمات پیشرفته را بررسی خواهیم کرد.
فهرست مطالب
- پروکسی معکوس چیست؟
- چرا از پروکسی معکوس استفاده کنیم؟
- موارد استفاده رایج
- ساخت یک سرور پروکسی معکوس با Node.js
- تنظیم محیط
- ایجاد یک پروکسی معکوس اولیه
- پیکربندی پیشرفته
- تست و اشکال زدایی
- نتیجه گیری
1. پروکسی معکوس چیست؟
پروکسی معکوس سروری است که بین درخواست های مشتری و یک یا چند سرور باطن قرار می گیرد. بر خلاف یک پروکسی فوروارد که از طرف مشتریان عمل می کند، یک پروکسی معکوس توسط سرورها برای هدایت درخواست های دریافتی به سرورهای باطن مناسب استفاده می شود. پروکسی معکوس تمام تعاملات مشتری را مدیریت می کند و معماری باطن را ایمن تر و مقیاس پذیرتر می کند.
عملکردهای کلیدی یک پروکسی معکوس:
- تعادل بار: ترافیک ورودی را در چندین سرور توزیع می کند.
- خاتمه SSL: رمزگذاری و رمزگشایی SSL را کنترل می کند.
- ذخیره سازی: داده های درخواستی مکرر را برای کاهش بار روی سرورهای باطن ذخیره می کند.
- امنیت: هویت و ویژگی های سرورهای باطن را پنهان می کند و یک لایه امنیتی اضافه می کند.
2. چرا از یک پروکسی معکوس استفاده کنیم؟
یک پروکسی معکوس چندین مزیت را ارائه می دهد:
- امنیت: با قرار گرفتن بین کلاینت و سرور، یک پروکسی معکوس می تواند سرورهای باطن را از قرار گرفتن مستقیم در معرض اینترنت محافظت کند و به جلوگیری از حملات کمک کند.
- تعادل بار: می تواند ترافیک ورودی را در چندین سرور توزیع کند و عملکرد و قابلیت اطمینان را بهبود بخشد.
- خاتمه SSL: یک پروکسی معکوس میتواند گواهیهای SSL و رمزگذاری را مدیریت کند و بار پردازشی روی سرورهای باطن را کاهش دهد.
- ذخیره سازی: این می تواند محتوا را ذخیره کند تا پاسخ ها را سریعتر بدون ضربه زدن به سرور پشتیبان هر بار ارائه دهد.
- فشرده سازی: یک پروکسی معکوس می تواند پاسخ های خروجی را فشرده کند تا استفاده از پهنای باند را کاهش دهد.
3. موارد استفاده رایج
1. تعادل بار:
- توزیع درخواست ها در چندین سرور برای متعادل کردن بار و جلوگیری از غرق شدن هر یک از سرورها.
2. افزایش امنیت:
- محافظت از سرورهای باطن در برابر قرار گرفتن مستقیم در معرض اینترنت، فیلتر کردن درخواستها و کاهش حملات DDoS.
3. خاتمه SSL:
- بارگذاری رمزگشایی SSL از سرورهای باطن به سرور پروکسی معکوس.
4. تعادل بار جهانی سرور:
- هدایت ترافیک به سرورهای مختلف بر اساس موقعیت جغرافیایی مشتری.
5. معماری میکروسرویس ها:
- مسیریابی درخواست ها به میکروسرویس های مختلف بر اساس الگوهای URL.
4. ساخت یک سرور پروکسی معکوس با Node.js
حالا بیایید یک سرور پروکسی معکوس ساده با استفاده از Node.js و Express پیاده سازی کنیم.
تنظیم محیط
ابتدا مطمئن شوید که Node.js و npm را روی دستگاه خود نصب کرده اید. اگر نه، می توانید آنها را از وب سایت رسمی Node.js دانلود و نصب کنید.
در مرحله بعد، یک دایرکتوری جدید برای پروژه خود ایجاد کنید و به آن بروید:
mkdir reverse-proxy-server
cd reverse-proxy-server
یک پروژه Node.js جدید را راه اندازی کنید:
npm init -y
وابستگی های لازم را نصب کنید:
npm install express http-proxy-middleware
ایجاد یک پروکسی معکوس اولیه
یک فایل به نام ایجاد کنید index.js
در ریشه دایرکتوری پروژه شما:
// index.js
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
// Proxy configuration
const options = {
target: 'http://localhost:5000', // Target server URL
changeOrigin: true, // Needed for virtual hosted sites
pathRewrite: {
'^/api': '', // Rewrite URL (remove /api prefix)
},
};
// Create a proxy middleware
const apiProxy = createProxyMiddleware('/api', options);
// Use the proxy middleware
app.use(apiProxy);
// Start the Express server
app.listen(3000, () => {
console.log('Reverse proxy server running on http://localhost:3000');
});
در این مثال:
- ما استفاده می کنیم
http-proxy-middleware
بسته برای ایجاد یک پروکسی معکوس. - پروکسی به درخواست ها در مورد گوش می دهد
/api
مسیر و آنها را به سرور مورد نظر در حال اجرا در آن فوروارد می کندhttp://localhost:5000
. - را
pathRewrite
گزینه را حذف می کند/api
پیشوند قبل از ارسال درخواست به سرور مورد نظر.
پیکربندی پیشرفته
میتوانید پروکسی معکوس را برای رسیدگی به سناریوهای پیچیدهتر، مانند اهداف مختلف بر اساس مسیرهای درخواست، اضافه کردن هدرهای سفارشی، یا حتی تغییر درخواست یا پاسخ، سفارشی کنید.
مثال: سرورهای چندگانه هدف
const apiProxy1 = createProxyMiddleware('/service1', {
target: 'http://localhost:5001',
changeOrigin: true,
pathRewrite: { '^/service1': '' },
});
const apiProxy2 = createProxyMiddleware('/service2', {
target: 'http://localhost:5002',
changeOrigin: true,
pathRewrite: { '^/service2': '' },
});
app.use(apiProxy1);
app.use(apiProxy2);
در این تنظیمات، درخواست به /service1
هدایت می شوند http://localhost:5001
، و درخواست به /service2
هدایت می شوند http://localhost:5002
.
مثال: اضافه کردن هدرهای سفارشی
const apiProxy = createProxyMiddleware('/api', {
target: 'http://localhost:5000',
changeOrigin: true,
onProxyReq: (proxyReq, req, res) => {
proxyReq.setHeader('X-Special-Proxy-Header', 'my-custom-value');
},
});
5. تست و اشکال زدایی
برای آزمایش پروکسی معکوس خود، سرور باطن را در پورت 5000 راه اندازی کنید:
node backend-server.js
سپس، سرور پروکسی معکوس خود را راه اندازی کنید:
node index.js
اکنون می توانید درخواست ها را به http://localhost:3000/api
و نحوه ارسال آنها را مشاهده کنید http://localhost:5000
.
اگر با مشکلی مواجه شدید، میتوانید با تنظیم آن، اشکال زدایی را فعال کنید DEBUG
متغیر محیطی:
DEBUG=http-proxy-middleware node index.js
این گزارش های دقیقی از رفتار پراکسی ارائه می دهد و به عیب یابی هر گونه مشکل کمک می کند.
6. نتیجه گیری
ساخت یک سرور پروکسی معکوس با Node.js یک راه قدرتمند برای مدیریت و مسیریابی ترافیک بین کلاینت ها و سرورهای باطن است. چه به دنبال بارگیری درخواستهای تعادل، افزایش امنیت یا سادهسازی معماری باطن خود باشید، یک پروکسی معکوس میتواند ابزار ارزشمندی در جعبه ابزار شما باشد.