Фунт: перенаправить http на https для подстановочных доменов

У меня есть сервер (Debian Jessie), управляющий несколькими доменами с помощью лака и apache, и я хочу использовать фунт для перенаправления 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 -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>

1 ответ

Короче говоря: не возможно.

Основываясь на документации фунта, директива 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
Другие вопросы по тегам