Перепишите, а затем простую аутентификацию с помощью Apache for Cloudfront

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

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

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

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

<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. Я также не могу найти никаких записей для журнала перезаписи.

0
задан 2 August 2018 в 11:49
1 ответ

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

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

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

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

0
ответ дан 5 December 2019 в 05:26

Теги

Похожие вопросы