diff --git a/cdn/Dockerfile b/cdn/Dockerfile new file mode 100644 index 0000000..055ca85 --- /dev/null +++ b/cdn/Dockerfile @@ -0,0 +1,20 @@ +FROM httpd:2.4.60 + +RUN apt-get update \ + && apt-get install -y curl libcgi-pm-perl \ + && rm -rf /var/lib/apt/lists/* + +RUN echo "ServerName localhost\n" \ + "Include conf/extra/httpd-vhosts.conf\n" \ + "LoadModule rewrite_module modules/mod_rewrite.so\n" \ + "LoadModule cgid_module modules/mod_cgid.so\n" \ + "LoadModule proxy_module modules/mod_proxy.so\n" \ + "LoadModule proxy_http_module modules/mod_proxy_http.so" \ + >> "/usr/local/apache2/conf/httpd.conf" + +COPY apache2.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf + +COPY rwmap.pl /usr/local/apache2/htdocs/ +RUN chmod +x /usr/local/apache2/htdocs/rwmap.pl + +CMD ["httpd-foreground"] diff --git a/cdn/apache2.conf b/cdn/apache2.conf new file mode 100644 index 0000000..c685548 --- /dev/null +++ b/cdn/apache2.conf @@ -0,0 +1,18 @@ + + DocumentRoot /usr/local/apache2/htdocs + + RewriteEngine On + RewriteMap rwmap prg:/usr/local/apache2/htdocs/rwmap.pl + RewriteRule ^/image/catalog/(.+)$ ${rwmap:$1} [PT,QSA] + + + Require all granted + + + + Options Indexes FollowSymLinks ExecCGI + AllowOverride All + Require all granted + AddHandler cgi-script .pl + + \ No newline at end of file diff --git a/cdn/docker-compose.yml b/cdn/docker-compose.yml new file mode 100644 index 0000000..ac8896a --- /dev/null +++ b/cdn/docker-compose.yml @@ -0,0 +1,8 @@ +version: '3' +services: + apache: + build: + context: . + dockerfile: Dockerfile + ports: + - "80:80" diff --git a/cdn/rwmap.pl b/cdn/rwmap.pl new file mode 100755 index 0000000..c150734 --- /dev/null +++ b/cdn/rwmap.pl @@ -0,0 +1,35 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Digest::SHA qw(sha1_hex); +# Desactiva el buffering de salida para que Apache pueda obtener la respuesta inmediatamente +$| = 1; +my $serverName = $ENV{'SERVER_NAME'} || 'localhost'; +my $serverPort = $ENV{'SERVER_PORT'} || '80'; +my $scheme = ($serverPort == 443) ? 'https' : 'http'; +my $baseUrl = "$scheme://$serverName"; +$baseUrl .= ":$serverPort" if ($serverPort != 80 && $serverPort != 443); + +while () { + chomp; + my $input = $_; + my ($path, $filename) = split('/', $input); + + if (defined $filename && $filename =~ /^(.+)\.(\w+)$/) { + my $name = $1; + my $extension = $2; + + my $sha1 = sha1_hex($name); + my $first = substr($sha1, 0, 2); + my $last = substr($sha1, 1, 2); + + if (-e "images/catalog/$path/$first/$last/$name.$extension") { + print "$baseUrl/images/catalog/$path/$first/$last/$name.$extension\n"; + } + else { + print "$baseUrl/images/catalog/$path/$name.$extension\n"; + } + } else { + print "Status: 400 Bad Request\n"; + } +}