محافظت از دایرکتوری با پسورد توسط Nginx

این راهکار برای زمانی هستش که بخواید یک دایرکتوری وب رو خیلی سریع و ساده با username/password محافظت کنید.

برای انجام این راهکار موارد زیر رو نیاز دارید:

  • nginx نصب شده روی سرور و آشنایی عمومی با کانفیگ
  • دسترسی روت سرور

 

مرحله ۱- ایجاد نام کاربری و پسورد

نام کاربری و رمز عبوری که میخواید برای محافظت از دایرکتوری استفاده بشه باید تو فایلی به نام با ۲ روش میتونید این کار رو انجام بدید:

۱- اگر آپاچی دارید روی سرور میتونید از یکی از ابزارهاش به نام htpasswd برای این کار استفاده کنید. دستور زیر رو توی ترمینال بنویسید:

htpasswd -c /path/to/file/.htpasswd username

بعد از اینتر کردن از شما پسورد رو میخواد.

۲- اگر ابزار فوق رو ندارید می تونید دستی این کار رو انجام بدید. یک فایل به نام .htpasswd در مسیر دلخواه (مثلا تو home میتونید بذارید) ایجاد کنید.

محتوای فایل به این صورت باید باشه:

username:encrypted-password

با استفاده از ابرزارهای آنلاین (پیشنهاد : http://aspirine.org/htpasswd_en.html ) می تونید یک پسور encrypt شده ایجاد کنید. در نهایت محتوای فایل شما به این شکل باید بشه:

hamed:$apr1$sOiSeo04$l8WffD3EX7shHf290HHPX/

 

مرحله ۲ : کانفیگ nginx

یکی از فایل های کانفیگ nginx رو باز کنید و انتهای بلاک دایرکتوری مورد نظرتون این دو خط رو اضافه کنید:

auth_basic "Limited access!";
auth_basic_user_file /path/to/file/.htpasswd;

اگر دقیقا متوجه نشدید میتونید در انتها فایل مثال رو ببنید. حتما متوجه خواهید شد.

چون فایل کانفیگ nginx رو تغییر دادیم لازمه یه بار nginx رو ریستارت کنیم:

service nginx restart

 

من یه مثال نوشتم که میتونید ازش استفاده کنید برای تست:

روی سروری که داشتم یه دایرکتوری تو مسیر /home/admin به نام files ایجاد کردم.

محتوای فایل .htpasswd که توی home گذاشتم:

client:$apr1$sOiSeo04$l8WffD3EX7shHf290HHPX/

محتوای فایل کانفیگ nginx :

server{
listen 138.1.1.1:80;
server_name mydomain.ir;

location /files {
autoindex on;
alias /home/admin/files;
auth_basic "Limited access";
auth_basic_user_file /home/.htpasswd;
}
}

با این کانفیگ آدرس mydomain.ir/files محدود به وارد کردن یوزرنیم/پسورد هستش.

موفق باشید.

کانفیگ سرویس گانیکارن برای یک پروژه django روی Centos

ایجاد سرویس در لینوکس با یک فایل کانفیگ با پسوند service امکان پذیره. الان میخوایم یه سرویس برای گانیکارن ایجاد کنیم.

۱- یه فایل به نام gunicorn.service در مسیر system به صورت زیر ایجاد می کنیم.

nano /etc/systemd/system/gunicorn.service

۲- فایل های سرویس شامل یک سری بلوک هستند که هر بلوک تنظیماتی رو برای سرویس ما نگه داری میکنه. اولین بلوک Unit هستش که بصورت زیر نوشته میشه:

[Unit]
Descripttion=gunicorn daemon
After=network.target

۳- بلوک دوم Service هستش که بصورت زیر نوشته میشه

[Service]
User=unixusername
Group=nginx
WorkingDirectory=/home/unixusername/django_application
ExecStart=/home/unixusername/django_application/venv/bin/gunicorn -b 127.0.0.1:9001 --access-logfile '-' -w 1 django_application.wsgi &

تو بلوک سرویس ابتدا کاربر و گروهی که قراره پروسس اپلیکیشن رو برای ما انجام بدن و دسترسی به دایرکتوری پروژه رو داشته باشه معرفی می کنیم.

بعد از اون برای پارامتر WorkingDirectory آدرس دایرکتوری پروژه رو به سرویس میدیم. این آدرس مسیری هستش که فایل mange.py توش قرار گرفته.

و در انتها برای پارامتر ExecStart کامند اجرای Gunicorn با پارامترهای مد نظر خودمون رو قرار میدیم. توضیحات پارامترهای Gunicorn رو می تونید از داکیومنتش بخونید.

۴- بلوک آخر Install هستش که به systemd لینوکس میگه که اگر سرویس enable شد چه زمانی باید اجرا بشه. که ما بهش میگم هر وقت multi-user بوت شد و در حال اجرا بود سرویس ما رو هم ران کن. دقیقا به صورت زیر بنویسید:

[Install]
WantedBy=multi-user.target

در نهایت فایل gunicorn.service بصورت زیر میشه:

[Unit]
Descripttion=gunicorn daemon
After=network.target

[Service]
User=unixusername
Group=nginx
WorkingDirectory=/home/unixusername/django_application
ExecStart=/home/unixusername/django_application/venv/bin/gunicorn -b 127.0.0.1:9001 --access-logfile '-' -w 1 django_application.wsgi &

[Install]
WantedBy=multi-user.target

۵- با دستو زیر می تونید سرویس رو استارت کنید

systemctl start gunicorn

۶- و با دستور زیر سرویس رو فعال کنید که بعد از ریبوت سیستم عامل بتونه مجدد اجرا بشه

systemctl enable gunicorn

۷- با استارت سرویس gunicron باید اپلیکیشن django روی پورت مورد نظر(تو این مثال ۹۰۰۱) در دسترس باشه. یکبار برای اطمینان از عملکرد صحیح سرویسی که ایجاد کردید سیستم عامل رو ریبوت کنید.