【问题标题】:Deploying Node.js/React app on AWS server, ports not forwarding properly在 AWS 服务器上部署 Node.js/React 应用程序,端口未正确转发
【发布时间】:2019-11-23 05:02:09
【问题描述】:

我正在尝试在 AWS 上的 ec2 实例上部署 NodeJS/React 应用程序。

我的应用在 3000 端口上运行良好,但没有被转发到 80 端口。

在这种情况下,修改 proxy_pass 或修改 iptables 似乎都不起作用。

我尝试了以下方法:

  1. 修改Nginx的服务器配置,将3000端口转发到80端口。我的Nginx配置:

    server {
        listen 80;
        location / {
            proxy_pass http://[My Private ec2 IP]: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;
            server_name example.com www.example.com;
        }
    }
    
  2. 修改iptables将3000端口转发到80端口。

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

我的目录结构如下:

- appname/ - /api (node.js server-side code) - /client (React client-side code)

我尝试在appname/client/npm build 中运行npm startsudo netstat -lntp | grep 80 显示没有进程在监听 80 端口,因此该端口可用。

应用在[public IP]:3000 上呈现。当我尝试访问[public IP] 时,浏览器显示“无法访问此站点”。

这似乎是一件相当简单的事情,但 nginx 和 iptables 配置都被忽略了。我错过了什么吗?

【问题讨论】:

    标签: node.js reactjs amazon-web-services nginx amazon-ec2


    【解决方案1】:

    还需要端口从 Amazon EC2 实例的控制台面板进行转发。要从 EC2 实例控制台面板启用端口,请执行以下步骤:

    1. 登录到 Amazon EC2 仪表板
    2. 选择您的 EC2 实例机器
    3. 选择您的 EC2 机器后,在底部面板中找到 Security groups 部分
    4. 点击assigned security group名称,它应该类似于launch-wizard-{number}
    5. 然后,从底部面板打开inbound 选项卡
    6. 单击编辑按钮并添加需要在实例机中打开的端口(80、3000)

    您可以查看以下 URL 以获取有关 Amazon EC2 端口转发的更多信息

    https://aws.amazon.com/premiumsupport/knowledge-center/connect-http-https-ec2/

    【讨论】:

    • 明确一点:安全组不转发任何流量。安全组是网络过滤器。默认情况下,所有入口流量都被阻止。以上指令授权80端口的流量。
    • 是的,安全组不转发流量,它们用作网络过滤器。
    猜你喜欢
    • 2021-11-25
    • 2022-01-15
    • 2019-11-02
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2020-07-10
    相关资源
    最近更新 更多