همراهان عزیز گیگ بوی در ادامه آموزش قبلی بعد از نصب Nginx در Ubuntu میریم سر وقت آموزش راه اندازی Reverse-proxy در Ngnix
برای دیدن اموزش قبلی : آموزش نصب وب سرور nginx در لینوکس ubuntu میتوانید از این لینک استفاده نمایید
بریم برای آموزش راه اندازی Reverse-proxy در Ngnix ابتدا لازم است توضیح بدهیم که reverse-proxy چیست؟
همانطور که در اموزش نصب Nginx در Ubuntu گفتیم مراحل بعدی از آموزش ها نصب و راه اندازی Reverse-proxy در Nginx می باشد. برای آشنایی با Reverse-proxy میتوانید به این لینک مراجعه نمایید.
همان طور که در لینک بالا نوشته شده است مزایای استفاده از Reverse-proxy عبارت است از:
Load Balancing
Protection from attacks
Caching
SSL encryption
و البته چندین مورد دیگه نیز می باشد که امروز فقط به راه اندازی Reverse-proxy بسنده میکنیم
برای استفاده از هرکدام از قابلیت های Reverse-proxy ابتدا باید اون رو روی یکی از وب سرور ها لود بالانسر های مورد نظر آن راه اندازی کنیم !
جالبه بدونید مکانیزم کار کردن 99% از راهکار های امنیتی تحت وب ( لایه 7 ) همین Reverse-proxy هست ( اکامای، کلادفیلر، اروان کلاد، و حتی دستگاه های امنیتی مانند Fortiweb و F5 و….)
خوب برای راه اندازی Reverse-proxy در Nginx ما ابتدا باید فایل کانفیگ مربوط به Vhost (جایی که تعریف میکنیم دامنه ما چی هست و چه پایلیسی میخوایم برای اون دامنه داشته باشیم) رو ویرایش کنیم
با دستور زیر فایل رو باز میکنیم:
nano /etc/nginx/sites-enabled/default
فایل ما به صورت دیفالت به شکل زیر هست :
ما تمام محتویات این فایل رو پاک میکنیم و از اول خودمون میسازیمش ! برای این مورد فقط کافی هست ctrl+k رو نگه دارید تا محتویات پاک شود
حالا که تمام محتویات فایل ما پاک شد عبارت زیر رو در درون فایل مورد نظر میریزیم ، برای این منظور ابتدا محتویات رو در Notepad روی سیستم خودتون کپی کنید و بسته به نیازتون اون رو ویرایش کنید ( در ادامه توضح داده میشه )
server {
listen 80;
server_name geekboy.pro www.geekboy.pro;
location / {
proxy_pass http://real-server-ip;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
همون طور که در این عکس و متن مشخص شده شما فقط نیاز دارید تا 2 مورد server_name و proxy_pass رو تغییر بدید
برای server_name باید تمامی دامنه هایی که میخواهید از reverse-proxy استفاده بشه رو تنها با یک فاصله وارید کنید (مانند شکل بالا geekboy.pro www.geekboy.pro)
و برای عبارت proxy_pass هم باید ای پی سرور اصلی که این دامنه یا ساب دامنه(ها) روی اون هستند رو وارد کنید برای مثال ای پی سرور سایت اینجا 10.20.30.40 هست که ما ای پی رو به همراه http اضافه کردیم
در این مورد Reverse-proxy ما فقط بر روی پروتکل http کار میکند
خوب فایل رو ذخیره میکنیم ctrl+x و سپس y و enter میزنیم تا فایل ذخیره شود
سپس با دستور زیر چک مینماییم که آیا فایل را درست ویرایش کردیم یا خیر
nginx -t
خروجی باید به این صورت باشد :
root@geekboy:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
بعد از اینکه خروجی بدستور بالا درست بود با دستور زیر وب سرور nginx رو restart میکنیم تا تغییرات اعمال شود
systemctl restart nginx
راه اندازی SSL بر روی Reverse-Proxy
خوب اگر سایت ما قبلا از SSL یا https استفاده کرده است ما باید HTTPS رو در Reverse-Proxy هم راه اندازی نماییم
همچنین اگر نرم افزار شما قدیمی می باشد یا امکان راه اندازی SSL رو ندارید میتوانید با راهکار زیر به راحتی سایتتون رو HTTPS نمایید بدون هیچ گونه تغییری در سرور اصلی !
خوب برای راه اندازی HTTPS یا SSL ما باید فایل Config vhost را که بالا توضیح دادیم ویرایش کنیم
با دستور زیر فایل را باز میکنیم :
nano /etc/nginx/sites-enabled/default
و تمام محتویات را با ctrl+k پاک میکنیم
سپس محتویات زیر را بسته به نیاز ویرایش مینماییم و داخل فایل config میریزیم :
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name geekboy.pro www.geekboy.pro;
ssl_certificate /etc/nginx/ssl/geekboy-public-key.crt;
ssl_certificate_key /etc/nginx/ssl/geekboy-private-key.key;
location / {
proxy_pass https://10.20.30.40;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
در اینجا هم همانند بالا فقط نیاز هست server_name و proxy_pass ویرایش شود
برای server_name باید تمامی دامنه هایی که میخواهید از reverse-proxy استفاده بشه رو تنها با یک فاصله وارید کنید (مانند شکل بالا geekboy.pro www.geekboy.pro)
و برای عبارت proxy_pass هم باید ای پی سرور اصلی که این دامنه یا ساب دامنه(ها) روی اون هستند رو وارد کنید برای مثال ای پی سرور سایت اینجا 10.20.30.40 می باشد که ما ای پی رو به همراه HTTP اضافه کردیم و یک نکته که اگر سرور اصلی قبلا هم در حال سرویس دهی رو روی HTTPS بوده باید اول عبارت HTTPS بزاریم و اگر قبلا بر روی HTTP در حال سرویس دهی بوده HTTP میزاریم
server {
listen 80;
return 301 https://$host$request_uri;
}
در این قسمت ما هر درخواستی که HTTP هست را به HTTPS ریدایرکت شود
ssl_certificate در این قسمت ادرس فایل public-key ssl را آپلود شده را میدهیم
ssl_certificate_key این قسمت آدرس فایل private-key ssl را آپلود شده را میدهیم
بقیه موارد نیز توضیح داده شد ، در اخر فایل کانفیگ ما به شکل زیر در میاد :
سپس فایل را با ctrl+x و سپس y و بعد از اون با زدن enter ذخیره مینماییم.
سپس با دستور زیر چک میکنیم که فایل را درست ادیت کردیم یا خیر
nginx -t
خروجی باید به صورت زیر باشد:
root@geekboy:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
بعد از اینکه خروجی بدستور بالا درست بود با دستور زیر وب سرور nginx رو restart میکنیم تا تغییرات اعمال بشه
systemctl restart nginx
حالا فقط لازم هست تا ما ترافیک ورودی وب سایت یا سامانه خودمون رو به سمت IP سرور Reverse-Proxy منتقل کنیم (با تغییر DNS) تا تمام ترافیک از سرور nginx ما رد بشه و پالیسی هایی که در قیمت های بعدی اموزش داده میشه اعمال بشه
با ادامه آموزش های ما در گیگ بوی همراه باشید : آموزش اینده: ( مسدود سازی شبکه تور )