我制作了一个 ruby on rails 应用程序,它正在运行,0.0.0.0:3000
我还转发了路由器上的 3000 端口,以便可以通过互联网远程访问。
因此,我可以通过以下方式查看 Web 应用程序:
1.localhost:3000
在运行服务器的机器上
2.192.168.0.100:3000
在同一 LAN 上的任何机器上
3.<my-external-ip>:3000
在任何连接到互联网的机器上
现在,我该如何添加登录身份验证系统,以便每当有人进入<my-external-ip>:3000
浏览器时,他们都必须输入用户名和密码才能访问 Web 应用程序。我知道我可以在我的 Ruby on Rails 应用程序中添加身份验证系统,但我希望有一个解决方案可以在 Rails 层“之前”完成此操作。
我对此完全陌生。
答案1
在应用程序机器上添加 nginx 反向代理,默认站点的配置如下:
server {
listen 3001;
server_name _;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}}
从那里,生成一个带有用户名和密码的相关 htpasswd 文件(参见http://www.htaccesstools.com/htpasswd-generator/或apache-utils
)并将其放置在/etc/nginx/htpasswd.users
。
在您的路由器上,将外部端口 3000 映射到端口 3001 的内部 IP。
从那里,当外部有人尝试访问您的网站时,它会提示他们输入用户名和密码。
请注意,这是完全未加密的,并且无法抵御暴力攻击,但对于您正在寻找的内容,它会很好用。