我有使用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;
}
}
答案 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
连接意味着服务器根本没有运行,或者端口可能已从防火墙禁用。
两个可能的原因:
80
,因此在AWS实例的安全组中允许允许80 。tail -f /var/log/nginx/error.log
下的日志,其原因可能是服务器部分中 DNS 的日志名称。因此,对于Nginx配置有两个建议
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;