Как настроить Squid для работы в качестве виртуального хоста для образов Docker

Как настроить Squid для работы в качестве виртуального хоста для образов Docker

У меня есть сервер, на котором запущено несколько образов Docker (которые по сути просто размещают несколько веб-сайтов).

у всех них разные доменные имена, все указывают на IP сервера

(допустим, IP-адрес сервера — 111.222.333.444)

(и мои домены www.one.com, www.two.com, www.three.com)

На данный момент все образы Docker экспортируют порт 80 на сервер на другом порту:

  • www.one.com — это порт 5080
  • www.two.com — это порт 5180
  • www.three.com — это порт 5280

Итак, если я посещу URL:port, то откроется веб-сайт.

Но я хочу использовать виртуальный хост, чтобы я мог посещать порт 80 по каждому URL-адресу, и он просто перенаправлял бы меня на соответствующий порт.

Я знаю, как это сделать с помощью Apache, и, вероятно, смогу разобраться с этим и с помощью nginx.

Но я слышал, что именно для этого и предназначен Squid (плюс Apache в качестве виртуального хоста кажется очень тяжелым).

Я установил squid3 на свой сервер ubuntu12.04

и это мой squid.conf на данный момент

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

Из прочтения руководства, которое «должно» перенаправить www.one.com на порт 5080 на локальном хосте (но это не так)

Я на самом деле ничего не смыслю в Squid, и, несмотря на все мои поиски в Google, я не могу найти простого руководства, чтобы сделать то, что мне нужно.

Может ли кто-нибудь указать мне на хороший учебник или, что еще лучше, предоставить мне squid.conf, который будет делать то, что мне нужно?

Спасибо

решение1

Я сам ответил на этот вопрос.

Мое решение:

Я решил это с помощью лака.

apt-get install varnish

Затем я установил свой

/etc/default/varnish

к

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"

Затем установите мой

/etc/varnish/default.vcl

к

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;
}

Надеюсь, это поможет кому-то еще, кто столкнулся с этой проблемой!

Связанный контент