گذاشتن Authentication روی سرویسی که یکی دیگه نوشته!

چند وقت پیش می‌خواستم سرویس کیبانا(یک سرویس 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>

البته می‌تونید اسم فایل رو هرطور که می‌خواید عوض کنید :)

چیزی که من اینجا نوشتم تا حدی کمک می‌کنه ولی خب اگه نیاز به امنیت بیشتر دارین می‌تونید با کمی جست‌و‌جو تو وب بهترش کنید. خوشحال می‌شم اگر اینجا هم اطلاع بدید.