1.说明
有时候我们需要对一些服务进行访问限制。避免任何人知晓 ip 和 端口都可以访问。
如针对 netdata 或作为个人私有笔记的 wordpress。
而这些服务本身可能并不自带登陆限制。或限制后会有操作很繁琐等等负面效应。
这种情况下可以考虑使用 Nginx 反向代理进行统一认证。
其主要优势和特征是
- 认证成功后,操作将不再受任何认证阻挠,非常干净。
- 认证不成功将一直处于认证窗口,看不到任何服务信息,一刀切。
2.登陆认证配置
首先创建密码文件,建一个目录
mkdir /etc/nginx/mypasswords
创建密码文件,最后的参数为登陆的用户名(示例为pp)
htpasswd -c /etc/nginx/mypasswords/passwd.dav pp
应该会要求输入两次密码。即可创建成功。
接下来进行反向代理配置。
如希望对 http://hostname:8888 进行加密,可在 Nginx 中进行如下配置,且这样配置后需要认证的链接为 http://hostname
server {
listen 80;
server_name hostname;
location /service1/ {
#要求登陆认证
auth_basic "Protected";
#密码文件路径
auth_basic_user_file /etc/nginx/mypasswords/passwd_service1.psw;
#反向代理链接
proxy_pass http://localhost:8888/;
}
}
如希望对 http://hostname:8888/service1 进行加密,可在 Nginx 中进行如下配置(注意区别主要在 location /service1 最后不带斜杠,且 proxy_pass http://localhost:8888 最后也不带斜杠),这样配置后需要认证的链接为 http://hostname/service1
server {
listen 80;
server_name hostname;
location /service1 {
#要求登陆认证
auth_basic "Protected";
#密码文件路径
auth_basic_user_file /etc/nginx/mypasswords/passwd_service1.psw;
#反向代理链接
proxy_pass http://localhost:8888;
}
}
配置完成后,重启 Nginx 即可生效。
尝试访问需要认证的链接,可以发现需要登陆认证。
3.关闭原服务对外的端口
仅用如上方式配置后,原服务依旧可以通过原端口无认证访问。
所以还需要通过防火墙等手段,将原来的服务端口对外禁止访问,即可达到必须认证的目的。
4.Https加密
通常对于有认证要求的服务,传输过程的保密性也是有需求的。
不过这正好也可以通过 Nginx 反向代理完成,仅需在配置中再加几行 ssl 相关的内容即可。
详见: