我目前正在运行一个Node.js应用程序,它具有API和文件服务功能(我知道nginx可以处理它,但我最初不应该使用它)。
我只是使用它来进行简单的基本身份验证,但这并不那么简单。
以下是我的nginx配置:
upstream nodejsapp {
server 127.0.0.1:1337;
keepalive 15;
}
server {
listen 80 default_server;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_redirect off;
location / {
proxy_pass http://nodejsapp;
proxy_set_header Connection "Keep-Alive";
proxy_set_header Proxy-Connection "Keep-Alive";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
/etc/nginx/.htpasswd
文件仅仅是用户:加密密码
,很好。
使用这个配置,当我访问我的IP地址时,它:
- 要求我输入用户名和密码
- 开始加载页面
- 有时会再次要求输入用户名和密码
- 完成加载页面
目前为止一切正常,即使它两次要求输入密码。
Node.js应用程序采用JWT身份验证。当我登录后,网站重新加载并从此处开始,无限制地要求输入用户名和密码(基本认证),只要我点击登录。JWT在我的本地存储中。如果我在基本认证提示框上点击取消,则JWT将被删除,我将退出登录,并且...再次要求进行基本认证。
这是在Chrome上的情况。对于Firefox和Safari,在JWT登录后,它会自动从本地存储中删除令牌(我退出登录)。
很难解释,我无法向您展示网站。简而言之,主要问题是Node.js应用程序的JWT被删除了。