我正在尝试用密码保护我网站上的整个端口——https://domain.com:8081和http://domain.com:8081
我尝试编辑 /etc/nginx/sites-enabled/domain.com.vhost ,在服务器块中添加以下内容,但无济于事(我从此链接,但该链接涉及密码保护目录而不是端口):
location ^~ :8081 {
auth_basic "Restricted Area";
auth_basic_user_file conf/htpasswd;
}
我也尝试了“location:8081”,但是也没有用。
我如何用密码保护端口 8081(或者我想要的任何其他端口)?
如果有任何区别,我正在使用带有 Nginx 1.4.6 的 Ubuntu 14.04.1 LTS。
谢谢。
[编辑]
在实施 Nathan 的解决方案时,https://domain.com:8081/phpmyadmin/(SSL),它会提示输入用户名和密码,但会给我一个“500 内部服务器错误”页面。以下是 Nginx 错误日志中显示的内容:
[crit] 3390#0: *154 open() "/etc/nginx/conf/htpasswd" failed (13: Permission denied), client: 152.35.52.108, server: domain.com, request: "GET /phpmyadmin/ HTTP/1.1", host: "domain.com:8081"
当要http://domain.com:8081/phpmyadmin/(非 SSL),它显示“400 错误请求 普通 HTTP 请求已发送到 HTTPS 端口”。错误日志中没有任何记录;相反,Nginx 访问日志中显示以下内容:
"GET /phpmyadmin/ HTTP/1.1" 40.1" 400 279 "-" "[user agent]"
答案1
我假设你有一个server {
用于此端口的单独块...因此你只需保护/
该服务器块内的目录:
location / {
auth_basic "Restricted Area";
auth_basic_user_file conf/htpasswd;
}
所以:
server {
listen 8081;
server_name whateveryouwant;
root /path/to/root/folder;
location / {
auth_basic "Restricted Area";
auth_basic_user_file conf/htpasswd;
}
}
我还没有测试过,但它应该是这样的。