在AWS服务器上部署Node.js / React应用程序,端口无法正确转发

时间:2019-07-14 00:18:09

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

我正在尝试在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)

我尝试从npm start以及appname/client/内部运行npm buildsudo netstat -lntp | grep 80显示没有进程正在侦听端口80,因此该端口可用。

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

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

1 个答案:

答案 0 :(得分: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/