我正在尝试对Nginx进行基本authentication。 我已经在Ubuntu 14.04上运行了1.9.3版本,并且使用简单的html文件工作正常。
这里是html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> "Some shoddy text" </body> </html>
这里是我的nginx.conf文件:
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; server { listen 80; server_name 192.168.1.30; location / { root /www; index index.html; auth_basic "Restricted"; auth_basic_user_file /etc/users; } } }
我使用htpasswd在/ etc(用户名“calvin”,密码“Calvin”,用户名“hobbes”,密码“Hobbes”)下的“users”文件中创build两个用户。 它是这样encryption的:
calvin:$apr1$Q8LGMfGw$RbO.cG4R1riIfERU/175q0 hobbes:$apr1$M9KoUUhh$ayGd8bqqlN989ghWdTP4r/
所有文件都属于root:root。 服务器IP地址是192.168.1.30,我直接在conf文件中引用它。
这一切工作正常,如果我注释掉两个身份validation行并重新启动nginx,但如果我取消注释他们,然后我确实得到用户名和密码提示,当我尝试加载该网站,但立即之后得到一个错误500内部服务器错误这似乎坚持,我不得不重新启动nginx。
任何人都可以看到我在这里做错了什么? 我在标准的Ubuntu 14.04 apt-get版本的Nginx(1.4.something)上有相同的行为,所以我不认为这是nginx版本。
当您使用MD5时,不是真正的答案。 然而,当这个线程在搜索错误时弹出,我将它附加到它。
使用bcrypt
为auth_basic
生成密码时会发生类似的错误:
htpasswd -B <file> <user> <pass>
由于auth_basic
ATM中不支持bcrypt
,所以在nginx error.log(通常位于/var/log/nginx/error.log
)中可以找到神秘的500错误,它们看起来像这样:
*1 crypt_r() failed (22: Invalid argument), ...
目前的解决方案是使用md5生成一个新的密码,这是默认的。
md5肯定有问题,有些上下文可以在下面的线程中找到
在这两个,速度问题可以通过使用fail2ban来缓解,通过禁止失败的基本身份验证,你会使网上暴力强制不切实际( 指导 )。 您也可以使用长密码来尝试和强化一点,如这里所建议的。
除此之外,看起来这个和nginx一样好…
最初创建用户时,我已经疯狂了。 结果,htpasswd文件如下所示:
user: user:$apr1$passwdhashpasswdhashpasswdhash...
删除空白用户后,一切正常。
我将自己将htpassword文件粘贴在“/ etc / nginx”下。 假设它被命名为htcontrol
,那么…
sudo htpasswd -c /etc/nginx/htcontrol calvin
按照提示输入密码,文件将在正确的位置。
location / { ... auth_basic "Restricted"; auth_basic_user_file htcontrol; }
或者auth_basic_user_file /etc/nginx/htcontrol;
但是第一个变体适合我
我只是遇到了同样的问题 – 在按照@Drazen Urch的建议检查日志之后,我发现这个文件具有root:root
权限root:root
权限 – 在更改为forge:forge
(我正在使用数字海洋伪造)之后,问题就消失了。