Apache обратный прокси-сервер с https на http не передает основной c auth - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь настроить прокси-сервер, который будет ретранслировать запросы с https://toing.com на локальную службу, для которой требуется базовая c аутентификация, работающая на http://localhost: 9999, Обратный прокси-сервер прослушивает https://toing.com: 9000 .

Базовый c auth устанавливается из первоначального запроса на https://toing.com.

Вот мой файл conf:

<IfModule mod_ssl.c>
<VirtualHost *:9000>
                ServerName api.toing.com:9000
                ServerAdmin toing@toing.com
                SSLEngine on
                SSLCertificateFile /etc/not/telling/you.crt
                SSLCertificateKeyFile /etc/not/telling/you.key

                ProxyRequests On
                ProxyVia Block
                <Proxy *>
                Order deny,allow
                Allow from all
                SetEnv proxy-chain-auth
                SetEnv proxy-sendcl
                </Proxy>

                ProxyPass / http://localhost:9999/ retry=0
                ProxyPassReverse / http://localhost:9999/

                ### following three lines are for CORS support
                Header add Access-Control-Allow-Origin "*"
                Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
                Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

                ErrorLog ${APACHE_LOG_DIR}/toing-error.log
                LogLevel error
                CustomLog ${APACHE_LOG_DIR}/toing-access.log combined
</VirtualHost>

С этим conf я могу получать свои запросы, но получаю ошибку 401, которая указывает, что аутентификация не проходит После прочтения apache документы , я добавил следующую строку чуть выше строки ProxyPass:

<Location />
    AuthType basic
    SetEnv proxy-chain-auth
</Location>

Теперь я получаю следующую ошибку с CORS:

Доступ к XMLHttpRequest в 'https://api.toing.com: 9000 / bla / bla / flix ' из источника 'https://toing.com' был заблокирован политикой CORS: Ответ на предпечатный запрос не пропускает доступ контрольная проверка: в запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

Как передать мой базовый c auth в конечный пункт назначения, что я делаю неправильно Вот? Заранее спасибо.

Примечание: Я проверил, что локальная служба работает, как и ожидалось, http://localhost: 9999

Обновление

Я решил свои проблемы с CORS благодаря этой хорошо объясненной статье и ответу . Очевидно, на предварительные запросы не отвечали с 200 OK, и, следовательно, вышеупомянутая проблема проверки контроля .

Теперь я непосредственно получаю ошибку 401 от моей службы, что означает, что обратный прокси-сервер все еще не проходит аутентификацию с моим текущим файлом conf:

<IfModule mod_ssl.c>
<VirtualHost *:9000>
        ServerName api.toing.com:9000
        ServerAdmin toing@toing.com
        SSLEngine on
        SSLCertificateFile /etc/not/telling/you.crt
        SSLCertificateKeyFile /etc/not/telling/you.key

    ### following three lines are for CORS support
    Header always set Access-Control-Allow-Origin "https://toing.com"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
    Header always set Access-Control-Max-Age "1000"
    Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"


    # Added a rewrite to respond with a 200 SUCCESS on every OPTIONS request
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]

    ProxyPass / http://localhost:9999/ retry=0
    ProxyPassReverse / http://localhost:9999/

    ErrorLog ${APACHE_LOG_DIR}/toing-error.log
    LogLevel error
    CustomLog ${APACHE_LOG_DIR}/toing-access.log combined
</VirtualHost>

Снова я попытался установить:

<Location />
    AuthType basic
    SetEnv proxy-chain-auth
</Location>

Для вышеупомянутого conf, но это не сработало. Все еще довольно озадачен!

...