我想在Nginx上做基本的auth.我在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>
Run Code Online (Sandbox Code Playgroud)
这是我的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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用htpasswd在/ etc下的"users"文件中创建了两个用户(用户名"calvin"密码"Calvin",用户名"hobbes"密码"Hobbes").它的加密方式如下:
calvin:$apr1$Q8LGMfGw$RbO.cG4R1riIfERU/175q0
hobbes:$apr1$M9KoUUhh$ayGd8bqqlN989ghWdTP4r/
Run Code Online (Sandbox Code Playgroud)
所有文件都属于root:root.服务器IP地址是192.168.1.30,我直接在conf文件中引用它.
如果我注释掉两个auth行并重新启动nginx,一切正常,但是如果我取消注释它们,那么当我尝试加载站点时,我的确会得到用户名和密码提示,但此后立即收到错误500内部服务器错误这似乎仍然存在,我必须重新启动nginx.
任何人都可以看到我在这里做错了什么?我在标准的Ubuntu 14.04 apt-get版本的Nginx(1.4.something)上有相同的行为,所以我不认为它是nginx版本.
Dra*_*rch 35
当您使用MD5时,不是您的问题的答案.但是,当搜索错误时弹出此线程,我将其附加到它.
bcrypt用于生成以下密码时会发生类似错误auth_basic:
htpasswd -B <file> <user> <pass>
Run Code Online (Sandbox Code Playgroud)
由于ATM中bcrypt不支持auth_basic,因此在nginx error.log中可以找到神秘的500错误(通常在以下位置找到/var/log/nginx/error.log),它们看起来像这样:
*1 crypt_r() failed (22: Invalid argument), ...
目前解决方案是使用md5生成一个新密码,无论如何这都是默认密码.
md5确实存在问题,可以在以下线程中找到一些上下文
在这两个中,速度问题可以通过使用fail2ban来缓解,通过禁止失败的基本身份验证,你将使在线暴力迫使不切实际(指南).您也可以使用长密码尝试强化一点,如此处所示.
除此之外,它似乎与nginx一样好......
小智 11
最初创建用户时我已经搞砸了.因此,htpasswd文件看起来像:
user:
user:$apr1$passwdhashpasswdhashpasswdhash...
Run Code Online (Sandbox Code Playgroud)
删除空白用户后,一切正常.
您想要使用 nginx basic_auth 获得更安全的密码哈希吗?做这个:
echo "username:"$(mkpasswd -m sha-512) >> .htpasswd
Run Code Online (Sandbox Code Playgroud)
SHA-512 被认为不如 bcrypt 好,但它是目前 nginx 支持的最好的。
我自己将 htpassword 文件粘贴在“/etc/nginx”下。假设它被命名为htcontrol,那么...
sudo htpasswd -c /etc/nginx/htcontrol calvin
按照提示输入密码,文件将位于正确的位置。
location / {
...
auth_basic "Restricted";
auth_basic_user_file htcontrol;
}
Run Code Online (Sandbox Code Playgroud)
或者auth_basic_user_file /etc/nginx/htcontrol;但第一个变体对我有用
| 归档时间: |
|
| 查看次数: |
13649 次 |
| 最近记录: |