Andreas Bergman

Icon

Content Delivery Network i sverige

För de som följt min splittrade serie om hur man bygger ett CDN, så är det nu färdigbyggt och fullt fungerande! Nu måste vi bara fylla det med information och kunder.

Så behöver du ett CDN som är beläget i sverige,  snabbt och pålitligt så har du kommit rätt. Du laddar upp dina filer till CDN:et via FTP sedan är det bara att köra. Som standard sitter cachetiden på 7 dagar för bildfiler, html och css. Men har du andra krav så fixar vi det åt dig!

Du får testa CDN:et hur länge du vill gratis. Då får du 15mb lagring, endast möjlighet tt lagra css, html och bildfil och inga anpassningar på en domän som heter cdn.sngw.se/X.

Är du intresserad, gå in på www.ngweb.se och fyll i formuläret där, märk det med “CDN” så återkommer vi till dig med mer information.

DNS-svar baserad på din position

I mitt projekt för att bygga ett Content Delivery Network så har jag klurat en del på hur jag bäst ska lösa det med trafik som kommer från utlandet, om jag har en besökare från USA så vill jag ju inte att ha ska bli tvungen att hämta materialet från en server i sverige, utan att han ska hämta det från en servern i USA. Mitt första uppslag var att använda Anycast(http://en.wikipedia.org/wiki/Anycast) där man i korthet presenterar samma ip till olika maskiner på olika siter, det verkade dock sjukt overkill! Så jag funderade på hur jag skulle kunna lösa det i DNS-recordet, men det går inte heller riktigt. Dock så kan man göra det i DNS-servern så den anpassar svaret beroendepå vartifrån man kommer, artikeln nedan beskriver en del hur man ska göra: http://blog.fupps.com/2007/04/02/location-based-geo-dns-in-a-private-network/ dock väldigt specifikt för Stanford::DNS server.  Den här PDF:en beskriver lite kort hur man tänker rent tekniskt http://www.ietf.org/proceedings/74/slides/alto-9.pdf man tänker inte placering geografiskt, utan placering på internet. Inte superanvändbart kanske, men en lärdom.

Jag kommer garanterat att komma in på det här igen, men nu har jag åtminstone en början att jobba utifrån.

Vsftp med Virtuella användare i mysql

För att kunna ge mina användare tillgång till de webbmappar där de ska lagra sina statiska filer i mitt Content Delivery Network (http://www.abergman.se/bygg-ditt-eget-cdn-content-delivery-network/) projekt, behövde jag ett sätt för dem att enkelt ansluta till maskinen, det var tvunget att vara väldigt nedlåst och enkelt att använda.Valet föll på FTP, av den enkla anledningen att det är enkelt, många publiceringssystem har redan stöd för det och i princip alla webbadministratörer kan använda det.

Mitt första val av ftpserver var ProFtpd, då jag använt den i ett annat projekt där jag byggde en helautomatisk hostingplattform med One-Click installation, fakturering, DNS och Ftp-stöd. Dock så fick jag det inte att fungera den här gången, av någon knepig anledning. Hur som helst så hittade jag att vsftp kunde göra samma sak som ProFtpd, nämligen authensiera användare  mot en Mysqldatabas, Vsftp använder sig av tillägget till PAM som kör mot en mysqlserver(pam_sql).

Den här guiden förutsätter att du redan har en mysqlserver installerad.

Installera Vsftpd

apt-get install vsftp

Sedan är det bara att hacka i konfigurationen, som finns i /etc/vsftp.conf

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
pasv_min_port=63200
pasv_max_port=63204
nopriv_user=cdnuser
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
guest_enable=YES
guest_username=cdnuser
local_root=/var/cdn/$USER
user_sub_token=$USER
virtual_use_local_privs=YES

Jag valde att använda mig av användaren cdnuser för att köra FTP-servern, viktigt är också att notera raden: pam_service_name=vsftpd, det är det namn som pam kommer använda för att avgöra vilken konfigurationsfil den ska använda. Som synes på raden /var/cdn/$USER så finns alla användares hemkataloger under /var/cdn/$USER där $USER såklart är en variabel för användarnamnet, det gör att jag inte behöver ange vilken arbetsmapp användaren ska ha utan det sköts automatiskt. Av den enkla anledningen finns det bara två kolumner i tabellen som styr användarna.

Sätta upp databasen

Skapa en databas som heter “vsftpd” med en tabell som heter “accounts” med nedan kolumner:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| username | varchar(30) | NO   | UNI | NULL    |                |
| pass     | varchar(50) | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

En ny användare skapar du med: INSERT INTO accounts (username, pass) VALUES(‘USERNAME’, PASSWORD(‘PASSWORD’));

Konfigurera PAM

Sista saken som ska konfigureras innan vi är klara, PAM. Glöm inte att backup:a orginalfilen innan du skapar den här konfigurationsfilen /etc/pam.d/vsftpd

auth required pam_mysql.so user=DBUSER passwd=DBPASSWORD host=DBHOST db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
account required pam_mysql.so user=DBUSER passwd=DBPASSWORD host=DBHOST db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

Glöm inte att ändra databasanvändarnamn, lösenord och host samt skapa en mapp i /var/cdn som motsvara användarens lösenord och som ägs av samma användare som FTP-servern körs som!

Den här guiden är löst baserad på en annan bloggares post, men jag kan inte hitta URL:en just nu, säg till om du hittar den!


Optimering med CDN (Content Delivery Network)

När man optimerar sidor jobbar man i många fall med att separera statiskt innehåll som bilder, javscript och css från dynamiska filer som .php. Eftersom de olika filtyperna har olika sätt att hanteras och olika uppdaterings/åldrigstid så väljer man ofta att leverera de olika filtyperna med olika webbservrar med olika cacheinställningar.

I många fall är det helt värdelöst att ha en dubbel uppsättning webbservrar att hålla koll på utan man väljer att lägga sina statiskafiler hos någon som kan leverera dem åt dig, ett så kallt Content Delivery Network(CDN).  Exempel på sådana är Amazon S3 och även flickr.

Ibland vill man själv ha koll på sitt innehåll och då kan det vara en idé att bygga ett eget CDN, hur man uppnår det på bästa sätt kan diskuteras men det alldra enklaste är helt enkelt att lägga dina filer på en annan server och länka in dem i dina dynamiska sidor.  För att sedan få lite kräm och hastighet på filerna bör du välja en webbserver som ärbra på statiska filer, tex nginx. Vill spara ännu mer kraft kan man även lägga en cache framför, som Varnish.

De stora CMS:erna WordPress och Drupal stöjder båda distribution av filerna till ett CDN, med häjlp av W3 Total Cache-modulen till WordPress kan du även lägga alla dina nyuppladdade filer på CDN:et mha FTP, helt sömlöst utan att dina användare och besökare märker det.

Inomkort kommer det en praktisk guide här på www.abergman.se på hur man bygger ett eget CDN, eller ett PCDN, Private CDN.

Den här bloggen

skriver jag, Andreas Bergman, vilket i sig inte bör vara så förvånande. Jag driver en SMS tjänst och jobbar som tekniker/allt i allo på SEA där jag bland annat driftar en stor bloggportal och ett webbhotell. Vi håller även på att bygga ett datacenter.


Jag har några microsoft titlar, ett gäng DELL certifikat och jobbar dagligen med hårt belastade webbservrar. Utöver det jobbar jag också med virtualisering och server/storage. Någon gång ibland säljer jag även server och storagelösningar.

Maila mig gärna om något av ovan, eller annat, jag är ganska trevlig sägs det. andreas@abergman.se.