我正在尝试通过我的Nginx配置来保护默认服务器。但是,当我访问该站点时,不会显示用户名/密码对话框。 Nginx像往常一样返回内容。这是完整的配置:
worker_processes 1;
events
{
multi_accept on;
}
http
{
include mime.types;
sendfile on;
tcp_nopush on;
keepalive_timeout 30;
tcp_nodelay on;
gzip on;
# Set path for Maxmind GeoLite database
geoip_country /usr/share/GeoIP/GeoIP.dat;
# Get the header set by the load balancer
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
real_ip_recursive on;
server {
listen 80;
server_name sub.domain.com;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd/sub.domain.com.htpasswd;
expires -1;
access_log /var/log/nginx/sub.domain.com.access default;
error_log /var/log/nginx/sub.domain.com.error debug;
location / {
return 200 '{hello}';
}
}
}
有趣的是,当我尝试使用无效的文件路径作为auth_basic_user_file的值时,configtest仍然通过。情况并非如此。
这里是Nginx和系统信息:
[root@ip nginx]# nginx -v
nginx version: nginx/1.8.0
[root@ip nginx]# uname -a
Linux 4.1.7-15.23.amzn1.x86_64 #1 SMP Mon Sep 14 23:20:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
我们正在使用yum提供的Nginx RPM。
答案 0 :(得分:0)
您需要在位置块内添加auth_basic和auth_basic_user_file,而不是服务器块。
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd/sub.domain.com.htpasswd;
return 200 '{hello}';
}
答案 1 :(得分:0)
在将基本身份验证添加到配置后,您是否尝试重新加载/停止并启动nginx?有必要使用以下方式重新加载nginx:
sudo -i service nginx reload
----为了使新设置生效。
我还要仔细检查您所测试的URL。 (一旦我尝试在Nginx代理配置中测试Nginx基本身份验证,则访问Nginx代理后面的资源的实际URL,而不是Nginx的实际URL。)
使用无效的文件路径作为auth_basic_user_file的值仍然不会导致configtest在2018年也失败。 这是我的Nginx版本:
nginx version: nginx/1.10.2
尽管无效的文件路径会导致基本身份验证检查失败并导致:
403 Forbidden
----提供凭据后的HTTP响应。
答案 2 :(得分:0)
在我的情况下,将指令添加到/etc/nginx/sites-available/default
是有效的,而将指令添加到/etc/nginx/nginx.conf
则没有效果。
当然,只有在您的nginx.conf文件中有此文件时,才会发生这种情况:
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
配置很简单(将其放置在网站特定部分的位置下,或整个网站的服务器下):
server {
location /foo/ {
auth_basic "This part of website is restricted";
auth_basic_user_file /etc/apache2/.htpasswd;
}
}