چند وقت پیش میخواستم سرویس کیبانا(یک سرویس visualization برای الستیک سرچ) که توسط الستیک نوشته شده رو دیپلوی کنم که دیدم Authentication نداره و خب اگه روی وب بذارم همه میتونن بهش دسترسی داشته باشن. خود الستیک هم به صورت پولی براش با استفاده از یک بسته به اسم xpack این امکان رو گذاشته که خب ما نمیتونستم ازش استفاده کنم :؟
اینطوری شد گشتم دنبال یه راه حل و رسیدم به روش Reverse Proxy با Nginx. این روش اینجوری هست که شما قبل از اینکه بستههاتون به سمت سرویستون بره مشخص میکنید که اول از Reverse Proxyتون رد بشه و یک نام کاربری و رمز عبور بگیره و اگر درست بود بسته رو بفرسته سمت سرویس. در ادامه این روش رو توضیح میدم.
برای این کار باید یه سرویس nginx راه بندازین یا اگر دارین فایل تنظیماتش رو عوض کنید. توی فایل nginx.conf اینا رو بنویسید البته حواستون باشه <Server-IP> رو عوض کنید.
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { upstream my_service { server <Server-IP>; } server { listen 80; auth_basic "Reverse Proxy Authentication"; auth_basic_user_file /etc/nginx/.htpasswd; location / { proxy_pass http://my_service; } } include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
همونطور که میبینید این فایل نام کاربری و رمز عبور رو از یه فایل به اسم htpasswd. میخونه. برای ساختن این فایل از این دستور استفاده میکنیم:
htpasswd -c ./.htpasswd <username>
البته میتونید اسم فایل رو هرطور که میخواید عوض کنید :)
چیزی که من اینجا نوشتم تا حدی کمک میکنه ولی خب اگه نیاز به امنیت بیشتر دارین میتونید با کمی جستوجو تو وب بهترش کنید. خوشحال میشم اگر اینجا هم اطلاع بدید.