Назад | Перейти на главную страницу

Pound: перенаправить http на https для поддоменов с подстановочными знаками

У меня есть сервер (debian jessie), управляющий несколькими доменами с помощью varnish и apache, и я хочу использовать pound для перенаправления HTTP-трафика на https.

Поскольку директива HeadRequire разрешает регулярное выражение, я также пытаюсь использовать регулярное выражение в Redirect:

ListenHTTP
    Address 1.2.3.4
    Port    80
    ## allow PUT and DELETE also (by default only GET, POST and HEAD)
    xHTTP 0
    RewriteLocation 0

    Service "myHost"
        HeadRequire   "^Host: (.+)\.myserver\.net"
        Redirect      301 "http://\1.myserver.net"
    End
End

но, к сожалению, я получаю ERR_INVALID_REDIRECT

Есть ли способ разрешить фунту выполнять перенаправление с подстановочными знаками?

Выход Curl:

$ curl -v http://prova.myserver.net:80/
* Hostname was NOT found in DNS cache
*   Trying 1.2.3.4...
* Connected to prova.myserver.net (1.2.3.4) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.38.0
> Host: prova.myserver.net:80
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 301 Moved Permanently
< Location: http://%5c1.myserver.net/
< Content-Type: text/html
< Content-Length: 148
<
* Closing connection 0
<html><head><title>Redirect</title></head><body><h1>Redirect</h1><p>You should go to <a href="http://%5c1.myserver.net/">here</a></p></body></html>

Вкратце: невозможно.

На основе фунт документация директива Redirect не допускает никаких шаблонов (или регулярных выражений). И это также логически следует из того факта, что может быть много директив HeadRequire для каждой службы (все они должны быть удовлетворены для работы Redirect), поэтому, если вы использовали две директивы HeadRequire с разными регулярными выражениями, Redirect не сможет угадать, какой из них имеет нужную обратную ссылку.

Вы также спрашивали о перенаправлении на https, но ваш пример перенаправляет на http. Вероятно, вы пропустили "s", например:

ListenHTTP
  Address 1.2.3.4
  Port 80

  Service
      HeadRequire "Host:.*some1.myserver.net.*"
      Redirect "https://some1.myserver.net"
  End

  Service
      HeadRequire "Host:.*some2.myserver.net.*"
      Redirect "https://some2.myserver.net"
  End
End

ListenHTTPS
  Address 1.2.3.4
  Port    443

  # first domain
  Cert "/etc/pki/tls/letsencrypt_pound/pound_some1.pem"
  # second domain
  Cert "/etc/pki/tls/letsencrypt_pound/pound_some2.pem"

  Disable SSLv3
End