اخیرا بر روی پروژه ی فرانت اندی کار میکردم که نیاز به ذخیره یک سری عکس در سرور داشت، به کارفرما پیشنهاد دادم که میتونیم از firebase استفاده کنیم و هزینه توسعه backend و خرید سرور رو صفر کنیم.
پس از ذخیره عکس ها در firebase storage، آدرس عکس ها بسیار طولانی میشدند، یه چیزی شبیه:
https://firebasestorage.googleapis.com/v0/b/test1234.appspot.com/o/filename1234.jpg?alt=media
کارفرما میخواست عکس ها تحت دامنه اختصاصی خودش بارگذاری بشن. یه چی مثل:
https://testsite.com/images/filename1234.jpg
اما متاسفانه برای firebase storage قابلیت ایجاد custom domain فراهم نیست و این این قابلیت فقط برای firebase hosting فعال میشه.
خب چاره چی بود؟
گزینه اول: سوییچ کردن کل پروژه به google cloud storage، چون اجازه استفاده از دامنه اختصاصی رو میده
گزینه دوم: استفاده از قابلیت Reverse proxy که در وب سرور های nginx یا Apache موجود هست
من ابتدا برای nginx کانفیگ نوشتم
کانفیگ nginx برای استفاده از دامنه اختصاصی در firebase storage
server { server_name testsite.com; client_max_body_size 10G; resolver 8.8.4.4 8.8.8.8 valid=300s; location ~* ^/image/(.*){ set $base_path 'https://firebasestorage.googleapis.com/v0/b/test1234.appspot.com/o/'; set $file_path $1; set $end_path '?alt=media'; proxy_pass $base_path$file_path$end_path; proxy_send_timeout 120; proxy_read_timeout 120; proxy_connect_timeout 120; } }
بنا به درخواست کارفرما، برای کاهش هزینه که نمیخواست سرور تهیه کنه، درخواست که از هاست اشتراکی ای که قبلا داشت استفاده کنم برای همین کانفیگ htaccess هم نوشتم:
کانفیگ Apache فایل htaccess. برای استفاده از دامنه اختصاصی در firebase storage
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^babyticker\.com$ RewriteRule ^image/(.*) https://firebasestorage.googleapis.com/v0/b/test1234.appspot.com/o/$1.jpg?alt=media [L,P] </IfModule>