Nginx拒绝在ec2实例上连接节点应用

时间:2019-08-25 00:17:32

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

我有使用nginx配置在ec2实例上运行的简单nodejs应用 尝试从浏览器访问该应用程序时,它给了我"ec2-18-223-0-201.us-east-2.compute.amazonaws.com refused to connect."

当尝试从VM卷曲它时 使用curl http://localhost:3000可以正常工作,但是尝试curl http://127.0.0.1:3000时可以给我这个输出

Found. Redirecting to https://127.0.0.1:3000/

这是我的Nginx配置

upstream test{
  server 127.0.0.1:3000;
}

server {
    listen 80;
   server_name ec2-18-223-0-201.us-east-2.compute.amazonaws.com www.ec2-18-223-0-201.us-east-2.compute.amazonaws.com;
    location / {

 client_max_body_size 20M;
    client_body_buffer_size 128k;
    proxy_pass http://test;
    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;
     }
}

1 个答案:

答案 0 :(得分:1)

在实际问题发生之前应该清楚的一件事。节点应用程序中是否有重定向策略返回到输出以下?

  

curl http://127.0.0.1:3000它给了我这个输出

     

Found. Redirecting to https://127.0.0.1:3000/,因为重定向是   应该来自Nginx,而不是来自节点应用。

但是我确定问题出在Nginx而不是Node app上,因为它可以在本地端口3000上响应。

refused to connect连接意味着服务器根本没有运行,或者端口可能已从防火墙禁用。

两个可能的原因:

  1. 实例的安全组中不允许使用端口80,因此在AWS实例的安全组中允许允许80
  2. Nginx未运行。检查tail -f /var/log/nginx/error.log下的日志,其原因可能是服务器部分中 DNS 的日志名称。

因此,对于Nginx配置有两个建议

  1. 更新您的Nginx配置以支持长DNS名称

vim /etc/nginx/nginx.conf并在配置的http部分下添加值

http {
server_names_hash_bucket_size  512;
....
}

2。从配置中删除冗余名称,这不是原因,但是您应该删除server_name ec2-18-223-0-201.us-east-2.compute.amazonaws.com www.ec2-18-223-0-201.us-east-2.compute.amazonaws.com;