在 Amazon EC2 中设置 Nginx https 反向代理

在 Amazon EC2 中设置 Nginx https 反向代理

我在 Amazon EC2 上运行 Ubuntu 14.04.3 和 Nginx 1.4.6。我尝试在端口 8000 上为我的应用程序设置反向代理,当我访问 www.mywebsite.com:8000 时,我可以看到它正在运行。反向代理应将所有 http 流量重定向到 https,然后为应用程序提供服务。

这是我的站点启用配置:

server {
  listen 80;
  server_name mywebsite.com
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  server_name mywebsite.com

  access_log  /var/log/nginx/access.log;
  error_log   /var/log/nginx/error.log;

  ssl on;
  ssl_certificate     /etc/nginx/ssl/certificate.crt;
  ssl_certificate_key /etc/nginx/ssl/key.key;
  keepalive_timeout   60;

  ssl_ciphers             HIGH:!ADH:!MD5;
  ssl_protocols           TLSv1;
  ssl_prefer_server_ciphers on;

  proxy_buffers 16 64k;
  proxy_buffer_size 128k;

location / {
    proxy_pass  http://IPADDRESS:8000;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_redirect off;
    proxy_read_timeout 60m;

    proxy_set_header    Host            $host;
    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header    X-Forwarded-Host $http_host;
    proxy_set_header    X-Forwarded-Server $host;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto https;
    proxy_set_header    Front-End-Https On;
}
}

起初我使用 localhost 作为我的 IP 地址,但读完这个问题这表明使用 ec2 的私有 IP,而不是公共 IP,我也试过了。但没有成功。

我打开了一个终端,该终端通过 ssh 连接到我的应用程序,因此我可以看到何时有 http 请求进入,当我访问 mywebsite.com:8000 时,它确实进入了。但是 www.mywebsite.com 是一个空白页,最终会超时,并且我的应用程序显示它没有收到初始请求。Nginx 是唯一在端口 80 和 443 上监听的应用程序。

我的错误和访问日志也是空的。有人能看到发生了什么吗?

更新

Nginx 正在监听端口 80,但是尝试 cURL 时返回连接被拒绝,这说明我的 iptables 默认值已被更改。将这些默认值刷新回默认值可允许流量到达 Nginx。

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

有趣的是,当不需要代理时使用 Ec2 的私有 IP 地址,因为 localhost 工作正常。

相关内容