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

Перепишите, а затем Basic Auth с Apache для Cloudfront

У меня есть веб-сайт, все страницы которого проходят через AWS Cloudfront (сейчас TTL равен 0).

Домен сайта - www.example.com, который является CNAME для облачного распространения. Затем Cloudfront запрашивает сайт с моего веб-сервера с origin.www.example.com, добавляя настраиваемый заголовок для аутентификации.

Однако теперь мне также нужно добавить на сайт базовую аутентификацию, пока он не будет запущен. Я пробовал это, используя LA-U: REMOTE_USER в RewriteCond

Эта конфигурация работает, но не имеет аутентификации:

<VirtualHost *:80>

    ServerName www.example.com
    ServerAlias www.example.com

    ServerAdmin admin@site.com

    DocumentRoot /var/www/www.example.com/trunk

    <IfModule mpm_itk_module>
        AssignUserId www_site www_site
    </IfModule>

    <LocationMatch "^(.*\.php)$">
        ProxyPass fcgi://127.0.0.1:9154/var/www/www.example.com/trunk
    </LocationMatch>

    Alias "/robots.txt" "/var/www/norobots.txt"

    <Directory /var/www/www.example.com>
        RewriteEngine on
        RewriteCond  %{HTTP:X-PSK-Auth}  !^mypassword$
        RewriteRule  .* - [F]
    </Directory>

    CustomLog /var/www/www.example.com/apachelogs/www.example.com-access.log combined
    ErrorLog /var/www/www.example.com/apachelogs/www.example.com-error.log

</VirtualHost>
curl http://cxcglobal.demonow.website/

возвращает HTML-код сайта. Также

curl --header "X-PSK-Auth:mypassword" "http://cxcglobal.demonow.website/

возвращает исходный код сайта.

Однако, когда я изменяю конфигурацию на

<VirtualHost *:80>

    ServerName www.example.com
    ServerAlias origin.www.example.com

    ServerAdmin jd@automatem.co.nz

    DocumentRoot /var/www/www.example.com/trunk

    <IfModule mpm_itk_module>
        AssignUserId www_site www_site
    </IfModule>

    <LocationMatch "^(.*\.php)$">
        ProxyPass fcgi://127.0.0.1:9154/var/www/www.example.com/trunk
    </LocationMatch>

    Alias "/robots.txt" "/var/www/norobots.txt"

    <Directory /var/www/www.example.com>
        RewriteEngine on
        RewriteCond  %{HTTP:X-PSK-Auth}  !^mypassword$
        RewriteRule  .* - [F]

        RewriteCond %{LA-U:WxLaRwvCQ2yAf5KJREMOTE_USER} !^$
        RewriteRule ^/(.*) http://origin.www.example.com/$1   [P,L]

        AuthUserFile /etc/apache2/staging.passwd
        AuthType Basic
        AuthName "Review security udpates"
        Require valid-user

        LogLevel alert rewrite:trace3

    </Directory>

    CustomLog /var/www/www.example.com/apachelogs/www.example.com-access.log combined
    ErrorLog /var/www/www.example.com/apachelogs/www.example.com-error.log

</VirtualHost>

Я получаю сообщение об ошибке:

curl http://www.example.com/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested.  Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
<hr>
<address>Apache/2.4.18 (Ubuntu) Server at origin.www.example.com Port 80</address>
</body></html>

для обоих запросов curl. У меня нет ошибок ни в журнале ошибок конкретного сайта, ни в глобальном журнале ошибок apache. Я также не могу найти никаких записей для журнала перезаписи.

Лучшим способом может быть использование лямбда для обработки аутентификации непосредственно в облаке ...

Сам не пробовал, но нашел этот ресурс ...

http://engineering.widen.com/blog/AWS-CloudFront-User-Authentication-using-Lambda@Edge/

Кажется, это относительно просто. Lambda @ Edge позволяет запускать код для проверки и изменения входящих запросов.