Я пытаюсь настроить прокси-сервер, который будет ретранслировать запросы с 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, но это не сработало. Все еще довольно озадачен!