Re: Переменная сертификата и Authorization header.

Maxim Dounin mdounin на mdounin.ru
Ср Фев 15 04:07:22 UTC 2012


Hello!

On Tue, Feb 14, 2012 at 09:29:39PM -0500, devox wrote:

> Спасибо! Прописал:
> 
> server {
>         listen 192.168.2.38:8080;
>         server_name  nginx;
> ....
> 
> location / {
>                 proxy_set_header   Host             $host;
>                 proxy_set_header   X-Real-IP        $remote_addr;
>                 proxy_set_header   X-Forwarded-For 
> $proxy_add_x_forwarded_for;
>                 proxy_pass         http://192.168.20.38:8081;
>                 proxy_set_header   Authorization "Basic $auth_base";
> }
> 
> server {
>         listen 192.168.2.38:8081;
>         server_name  nginx1;
> ....
>          location / {
>                 root   /usr/share/nginx/test;
>                 index  index.html;
>                 auth_basic "Closed Area";
>                 auth_basic_user_file /etc/nginx/htpasswd;
> }
> 
> base.conf
> 
> map $ssl_client_serial $auth_base {
> serial1   bmdpbng6Cg==;
> serial2   bmdpbng6bmdpbngK;
> }
> 
> 
> Но авторизацию не проходит,
> запрашивает авторизацию, но даже если
> вручную вводишь логин и пароль, она не
> проходит.

То, что при явно указанном proxy_set_header Authorization вручную 
авторизация не проходит - это нормально, вы же переопределяете 
заголовок запроса, и от клиента ничего до бекенда не доходит.

> Лог выкидывает это:
> 2012/02/15 06:10:16 [error] 28769#0: *7 no user/password was provided
> for basic authentication, client: 192.168.2.38, server: , request: "GET
> / HTTP/1.0", host: "192.168.2.38"
> 
> Убираю "proxy_set_header   Authorization "Basic $auth_base";",
> Проверка сертификата проходит
> корректно, на бек-энде запрашивает
> авторизацию, вводишь данные  - все в
> порядке. Такое впечатление, что он не
> видит, что отдается в заголовке, либо
> отдается некорректно.

Ну таки посмотрите, что отдаётся - и в nginx'е есть debug log, и 
tcpdump'ом посмотреть недолго.  Скорее всего вы неправильно 
написали serial'ы в map'е, нужно строковое совпадение с тем, что 
выдаёт переменная $ssl_client_serial.

Ну и в пиведённый base64 у вас лишние переводы строк затесались, 
но от них сообщение будет другое.

Maxim Dounin



Подробная информация о списке рассылки nginx-ru