Обратный прокси-сервер Apache с базовой аутентификацией - PullRequest
40 голосов
/ 16 февраля 2011

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

Пример здесь:

Пользователь (интернет) -> сервер обратного прокси / vhosts (необходимо добавить базовую аутентификацию здесь) -> внутренний сервер (не аутентифицирован))

Ответы [ 3 ]

67 голосов
/ 13 октября 2011

Вы можете следовать инструкциям здесь: Аутентификация, Авторизация и Контроль доступа .Основное отличие вашего обратного прокси-сервера заключается в том, что вы захотите поместить аутентификационные данные в блок Location, хотя в документах сказано, что они разрешены только в блоках Directory:

<Location />
    AuthType Basic
    ...
</Location>

за пределами LocationБлок вы можете поставить свои прокси-команды, такие как:

ProxyPass / http://localhost:8080/
17 голосов
/ 19 марта 2014

Вот конфигурация, которую я использовал для выполнения базовой аутентификации по базе данных через https.На моем внутреннем сервере запущен Tomcat, и я подключаюсь к нему с помощью AJP.Забавный номер порта (4443) объясняется тем, что стандартный порт (443) уже использовался, и я не хотел настраивать несколько служб https на одном порту.

<IfModule mod_ssl.c>
NameVirtualHost *:4443
<VirtualHost *:4443>
        ServerAdmin webmaster@localhost
        ServerName ws.myserver.se
        ServerAlias ws.myserveralias.se
        ErrorLog /var/log/apache2/ajpProxy.error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel info

        CustomLog /var/log/apache2/ajpProxy.log combined

        DBDriver mysql
        DBDParams "host=127.0.0.1 port=3306 user=proxyAuthUser pass=yourDbPasswordHere dbname=yourDbName"
        DBDMin  4
        DBDKeep 8
        DBDMax  20
        DBDExptime 300        

        <Proxy *>
              # core authentication and mod_auth_basic configuration
              # for mod_authn_dbd
              AuthType Basic
              AuthName "Backend auth name"
              AuthBasicProvider dbd

             # core authorization configuration
              Require valid-user

              # mod_authn_dbd SQL query to authenticate a user
              AuthDBDUserPWQuery \
                "SELECT password FROM user WHERE emailAddress = %s"

              AddDefaultCharset Off
              Order deny,allow
              Allow from all
        </Proxy>

        ProxyPass / ajp://localhost:8009/
        ProxyPassReverse / ajp://localhost:8009/

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        #   A self-signed (snakeoil) certificate can be created by installing
        #   the ssl-cert package. See
        #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.
        SSLCertificateFile    /etc/apache2/ssl/yourCertificateFile.crt
        SSLCertificateKeyFile /etc/apache2/ssl/yourPrivateKeyFile.key
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        # MSIE 7 and newer should be able to use keepalive
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
11 голосов
/ 09 февраля 2017

Сначала проверьте, есть ли на вашем apache2 пакет утилит

sudo apt-get install apache2-utils

Затем установите имя пользователя и пароль.

sudo htpasswd -c /etc/apache2/.htpasswd <username>

После этого отредактируйте свой обратный прокси-сервер для использования аутентификации

<VirtualHost *:80>
    ProxyPreserveHost On

    ProxyPass / http://someaddress:1234/
    ProxyPassReverse / http://someaddress:1234/

    Timeout 5400
    ProxyTimeout 5400

    ServerName dev.mydomain.com
    ServerAlias *.dev.mydomain.com

    <Proxy *>
        Order deny,allow
        Allow from all
        Authtype Basic
        Authname "Password Required"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Proxy>
</virtualhost>

Как минимум, обновите свой apache

sudo service apache2 reload
...