我在 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 工作正常。