如何在浏览器中通过固定IP访问AWS Lightsail上部署的Express应用
问题核心原因
你当前访问http://44.197.139.141/mailing返回文件列表,是因为Apache直接将服务器/mailing目录的静态文件做了索引展示,没有把请求转发到运行在3000端口的Express Node进程,你尝试的http://44.197.139.141/mailing:3000本身是错误的地址格式,端口号必须紧跟在IP/域名之后。
排查&解决步骤
第一步:确认Express应用本身运行正常
首先SSH登录到你的Lightsail实例,按顺序执行操作:
- 切换到应用目录:
cd /mailing - 启动应用:
npm start,启动后保持当前SSH终端不关闭 - 新开一个SSH终端连接服务器,执行本地访问测试:
curl http://localhost:3000
如果返回Express默认欢迎页内容,说明应用本身无问题,按下面两个方案二选一配置访问即可。
方案一:SSH隧道本地访问(仅适合开发调试,无需修改服务器配置)
该方案不需要开放3000端口对外,仅本地可访问:
- 关闭之前配置的无效隧道,在本地终端执行正确的隧道建立命令:
注意替换命令中的密钥文件路径为你本地实际存储路径,命令执行后无任何输出即为正常,不要关闭该终端ssh -i 你的Lightsail密钥文件本地路径.pem -N -L 3000:localhost:3000 bitnami@44.197.139.141 - 本地浏览器直接访问
http://localhost:3000即可打开应用界面
方案二:Apache反向代理配置(适合正式对外提供服务,无需开隧道)
该方案配置后直接访问http://44.197.139.141/mailing即可打开应用:
- 启用Apache必要模块:
sudo a2enmod proxy proxy_http sudo /opt/bitnami/ctlscript.sh restart apache - 添加反向代理规则,编辑Bitnami Apache配置文件
/opt/bitnami/apache2/conf/httpd.conf,在文件末尾添加以下内容:<Location /mailing> ProxyPass http://localhost:3000 ProxyPassReverse http://localhost:3000 RequestHeader set X-Forwarded-Proto "http" </Location> - 重启Apache生效配置:
sudo /opt/bitnami/ctlscript.sh restart apache - 配置PM2守护Node进程,保证应用后台持续运行:
- 全局安装PM2:
npm install -g pm2 - 切换到/mailing目录:
cd /mailing - 启动应用:
pm2 start bin/www --name mailing-app - 配置开机自启:
pm2 save && pm2 startup
- 全局安装PM2:
额外排查点
如果需要直接对外暴露3000端口访问(不推荐,安全性低),需要登录AWS Lightsail控制台,进入对应实例的「网络」选项卡,添加入站规则:允许TCP协议3000端口的0.0.0.0/0来源访问,之后可以通过http://44.197.139.141:3000直接访问应用。
内容的提问来源于stack exchange,提问作者Cristian Parada
相关产品推荐
相关产品推荐

