So konfigurieren Sie Squid als virtuellen Host für Docker-Images

So konfigurieren Sie Squid als virtuellen Host für Docker-Images

Ich habe einen Server, auf dem eine Reihe von Docker-Images laufen (die im Grunde nur eine Reihe von Websites hosten).

Sie haben alle unterschiedliche Domänennamen, die alle auf die IP des Servers verweisen

(Nehmen wir an, die Server-IP ist 111.222.333.444)

(und meine Domänen sind www.one.com, www.two.com, www.three.com)

Momentan exportieren alle Docker-Images den Port 80 zum Server auf einem anderen Port:

  • www.one.com ist Port 5080
  • www.two.com ist Port 5180
  • www.three.com ist Port 5280

Wenn ich also die URL:Port besuche, wird die Website angezeigt.

Ich möchte jedoch einen virtuellen Host verwenden, sodass ich Port 80 bei jeder URL besuchen kann und einfach auf den entsprechenden Port umgeleitet wird.

Ich weiß, wie das mit Apache geht, und könnte es wahrscheinlich auch mit Nginx herausfinden.

Aber ich habe gehört, dass Squid genau dafür gedacht ist (außerdem scheint Apache als virtueller Host ein ziemliches Gewicht zu sein)

Ich habe Squid3 auf meinem Ubuntu12.04-Server installiert

und das ist meine squid.conf bisher

http_port 80 accel defaultsite=www.one.com no-vhost
cache_peer 127.0.0.1 parent 5080 0 no-query originserver name=YourAccelNameHere
acl your_site_acl dstdomain www.one.com
http_access allow your_site_acl
cache_peer_access YourAccelNameHere allow your_site_acl
cache_peer_access YourAccelNameHere deny all

Aus einem Tutorial, das besagt, dass www.one.com an Port 5080 auf dem lokalen Host weitergeleitet werden „sollte“ (wird es aber nicht)

Ich habe wirklich keine Ahnung von Squid und trotz all meinem Googeln kann ich kein einfaches Tutorial für das finden, was ich möchte.

Kann mir jemand ein gutes Tutorial zeigen oder mir noch besser eine squid.conf zur Verfügung stellen, die meinen Anforderungen entspricht?

Danke

Antwort1

Habs mir selbst beantwortet

Meine Lösung ist:

Ich habe es mit Lack gelöst

apt-get install varnish

Dann setze ich meine

/etc/default/varnish

Zu

START=yes
NFILES=131072
MEMLOCK=82000
DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

Dann setze meine

/etc/varnish/default.vcl

Zu

backend default {
    .host = "127.0.0.1";
    .port = "80";
}

backend one_website {
    .host = "127.0.0.1";
    .port = "5080";
}

backend two_website {
    .host = "127.0.0.1";
    .port = "5180";
}

## Multiple virtual host
sub vcl_recv {
 if (req.http.host ~ "^www.default.com(:[0-9]+)?$") {
    set req.backend = default;
 } else if (req.http.host ~ "^www.one.com(:[0-9]+)?$") {
    set req.backend = one_website;
 } else if (req.http.host ~ "^www.two.com(:[0-9]+)?$") {
    set req.backend = two_website;
 }
}

## Fetch
sub vcl_fetch {
        ## Remove the X-Forwarded-For header if it exists.
        remove req.http.X-Forwarded-For;

        ## insert the client IP address as X-Forwarded-For. This is the normal IP address of the user.
        set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;
        ## Added security, the "w00tw00t" attacks are pretty annoying so lets block it before it reaches our webserver
        if (req.url ~ "^/w00tw00t") {
                error 403 "Not permitted";
        }
                ## Deliver the content
        return(deliver);
}

## Deliver
sub vcl_deliver {
        ## We'll be hiding some headers added by Varnish. We want to make sure people are not seeing we're using Varnish.
        ## Since we're not caching (yet), why bother telling people we use it?
        remove resp.http.X-Varnish;
        remove resp.http.Via;
        remove resp.http.Age;

        ## We'd like to hide the X-Powered-By headers. Nobody has to know we can run PHP and have version xyz of it.
        remove resp.http.X-Powered-By;
}

Ich hoffe, dass es jemand anderem mit diesem Problem helfen kann!

verwandte Informationen