আমি রুবিজেমসের জন্য একটি ক্যাশে সার্ভার সেটআপ করতে চাই, কারণ আমি বর্তমানে ভিয়েতনামে আছি এবং আন্তর্জাতিক ইন্টারনেট সংযোগগুলি বেশ ধীর। আমি বার্নিশের মাধ্যমে এটি করার চেষ্টা করছি, তবে কয়েক ঘন্টা ধরে গুগল করা এবং বিভিন্ন জিনিস চেষ্টা করার পরেও আমি আটকে আছি এবং এটি সঠিকভাবে কাজ করতে পারি না।
আমার লক্ষ্য
আমি একটি রত্ন ইনস্টল করার সময় এটি একটি নমুনা অনুরোধ গ্রুপ:
GET http://api.rubygems.org/latest_specs.4.8.gz
302 Moved Temporarily
GET http://s3.amazonaws.com/production.s3.rubygems.org/latest_specs.4.8.gz
200 OK
আমি একটি বিপরীত প্রক্সি ক্যাশে সার্ভার সেট আপ করতে চাই (উদাহরণস্বরূপ rubygems.mydomain.com) যেখানে আমি নিম্নলিখিত অনুরোধটি সম্পাদন করতে পারি এবং ক্যাশে সার্ভারটি অভ্যন্তরীণভাবে কোনও পুনঃনির্দেশগুলি অনুসরণ করতে পারে।
rubygems.mydomain.com/latest_specs.4.8.gz
পুনঃনির্দেশের অবস্থানটি বিভিন্ন ডোমেনের সাথে লিঙ্ক করবে (কিছু রুবিজেমস সাবডোমেনস, অ্যামাজন এস 3, রুবিজেমস মিরর)।
বর্তমান অবস্থা
এনজিনেক্সের সাথে ঘোরাফেরা করার পরে, আমি এই ব্লগ পোস্টটি পেয়েছি যা আমি অর্জন করতে চাই তার কাছাকাছি। তবে, ওয়ার্নিশ সঠিকভাবে কাজ করতে এটি কীভাবে কাজ করে সে সম্পর্কে আমার খুব কম জ্ঞান আছে।
এটি আমার বর্তমান কনফিগারেশন ফাইল
import std;
backend rubygems {
.host = "rubygems.org";
.port = "80";
}
sub vcl_recv {
std.syslog(180, "RECV: " + req.http.host + req.url);
if (!req.url ~ "^http") {
std.syslog(180, "FETCH");
set req.backend = rubygems;
return (lookup);
}
}
sub vcl_fetch {
if (beresp.status == 302) {
set beresp.http.X-Magic-Redirect = "1";
return(deliver);
}
}
sub vcl_hit {
if (obj.http.X-Magic-Redirect == "1") {
set req.url = obj.http.Location;
return (restart);
}
}
sub vcl_deliver {
if (resp.http.X-Magic-Redirect == "1") {
unset resp.http.X-Magic-Redirect;
return(restart);
}
return(deliver);
}
আমি একটি অনুরোধ সম্পাদন করতে পারি, তবে এটি একটি ত্রুটির সাথে সাড়া দেয়:
curl -is http://localhost:8080/latest_specs.4.8.gz
HTTP/1.1 302 Found
Server: Varnish
Content-Type: text/html; charset=utf-8
Retry-After: 5
Content-Length: 376
Accept-Ranges: bytes
Date: Sat, 01 Feb 2014 02:33:47 GMT
X-Varnish: 933109322
Age: 1
Via: 1.1 varnish
Connection: close
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>302 Found</title>
</head>
<body>
<h1>Error 302 Found</h1>
<p>Found</p>
<h3>Guru Meditation:</h3>
<p>XID: 933109322</p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
এবং এটি অনুরোধের জন্য সম্পর্কিত সিস্লগ আউটপুট:
Jan 31 18:33:46 precise64 varnishd[2387]: RECV: localhost:8080/latest_specs.4.8.gz
Jan 31 18:33:46 precise64 varnishd[2387]: FETCH
Jan 31 18:33:47 precise64 varnishd[2387]: RECV: localhost:8080/latest_specs.4.8.gz
Jan 31 18:33:47 precise64 varnishd[2387]: FETCH
Jan 31 18:33:47 precise64 varnishd[2387]: RECV: localhost:8080http://production.s3.rubygems.org/latest_specs.4.8.gz
সুতরাং, রুবিজেমসে অনুরোধটি ঠিকঠাকভাবে কাজ করছে, তবে পুনর্নির্দেশটি অনুসরণ করা প্রত্যাশার মতো কাজ করে না। যদি কেউ আমাকে সঠিক দিকে নির্দেশ করতে পারে তবে আমি খুশি হব।