Авторизация в nginx без пароля, только по логину
Случилось так что с нескольких серверов необходимо обращаться к серверу nginx.
Например сервера - host1,host2,host3
Каждый сервер при обращение через курл подставлял бы свое имя -u host1: и при этом проходила бы авторизация, если такое имя есть в файле с пользователями. Но на данный момент если не заполнить пароль, то появляется ошибка:
crypt_r() failed (22: Invalid argument)
Искал в гугле что либо похожее, но везде одно и тоже пишут, как настоить логин-пароль связку.
Может быть кто-то сталкивался или сможет помочь?
Устроит вариант если будет один пароль для всех пользователей, но именно логины нужно брать из файла.
Ответы (2 шт):
Испольуйте базовую HTTP авторизацию на уровне вашего Nginx. В запросе через Curl будете передавать заголовок Authorization.
curl -H "Authorization: ....." url
$ curl -u test1: http://192.168.0.1:2480/
<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>
$ curl -u test2: http://192.168.0.1:2480/
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.10.3</center>
</body>
</html>
Конфиг Nginx:
server {
listen 2480;
listen [::]:2480;
server_name _;
location / {
proxy_pass http://1c83:80;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
resolver 127.0.0.1;
auth_basic "Unauthorized";
auth_basic_user_file /var/www/passto/.htpasswd;
}
}
Файл с паролем:
exampleuser:{PLAIN}examplepassword
test1:{PLAIN}