Nginx 作为 AWS ALB 背后的反向代理(自签名)
Nginx as a reverse proxy behind AWS ALB (self-signed)
我在 AWS 中创建了一个环境,其中包括一个安装了节点 js 网络服务器和 Nginx 的 EC2 实例,位于自签名应用程序负载均衡器后面。
我的 ALB 从 HTTPS (443) 获取请求并通过 HTTP (80) 将它们转发到 Nginx。我的 Nginx 应该从 ALB(在端口 80 中)获取请求并将它们转发到端口 9090(由节点 js Web 服务器使用)。
但是,我在将请求从 Nginx 转换到应用程序时遇到了问题。
当在 HTTP 上使用 ALB DNS 输入 URL 时,我能够到达上面的页面(而不是我的网络服务器应用程序页面):
我的 default.conf 附在上面的文件:
我所有的安全组都打开来测试问题(443、80、9090)。所以端口不是问题,而是Nginx配置。
此外,我的目标群体如上所示:
可能是什么问题/我应该做哪些进一步的配置?
谢谢。
有了 Load Balancer 为什么还要使用 Nginx?听起来您正在为一个 nodejs 应用程序使用两个 Nginx 服务器。 SSL 操作也会消耗额外的 CPU 资源。 CPU 最密集的操作是 SSL 握手。
正确的处理方法也将解决您的上述问题。
- 创建目标组并与实例端口绑定
9090
- 生成 certificate from AWS(免费)
- 创建 HTTPS 侦听器并放置 aws 证书
- 将我们在步骤 1 中创建的目标组添加到负载均衡器的 HTTPS 侦听器中。
使用这种方法,您将在负载均衡器处终止 SSL/TLS,实例将接收纯 HTTP 连接,这将节省 SSL CPU 时间 encryption/decryption。
SSL termination is the term pointing to proxy servers or load balancers which accepts SSL/TLS connections however do not use the same while connecting to the back end servers. E.g. A load balancer exposed to the internet might accept HTTPS at port 443 but connects to backend servers via HTTP only
出于测试目的,这应该有效。
server {
listen 80;
server_name example.com;
client_max_body_size 32M;
underscores_in_headers on;
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_pass_header device_id;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_read_timeout 120;
proxy_next_upstream error timeout invalid_header http_500;
proxy_connect_timeout 90;
proxy_pass http://localhost:9090;
}
}
成功了。问题出在“/etc/nginx/nginx.conf”文件中。经过大量阅读和尝试 - 我发现在文件内部它转发到 HTML (而不是我的 nodejs Web 服务器)。
更改了“root /path_to_ws”这一行,重启了 Nginx 就可以了。
感谢您的帮助!
我在 AWS 中创建了一个环境,其中包括一个安装了节点 js 网络服务器和 Nginx 的 EC2 实例,位于自签名应用程序负载均衡器后面。
我的 ALB 从 HTTPS (443) 获取请求并通过 HTTP (80) 将它们转发到 Nginx。我的 Nginx 应该从 ALB(在端口 80 中)获取请求并将它们转发到端口 9090(由节点 js Web 服务器使用)。
但是,我在将请求从 Nginx 转换到应用程序时遇到了问题。
当在 HTTP 上使用 ALB DNS 输入 URL 时,我能够到达上面的页面(而不是我的网络服务器应用程序页面):
我的 default.conf 附在上面的文件:
我所有的安全组都打开来测试问题(443、80、9090)。所以端口不是问题,而是Nginx配置。
此外,我的目标群体如上所示:
可能是什么问题/我应该做哪些进一步的配置? 谢谢。
有了 Load Balancer 为什么还要使用 Nginx?听起来您正在为一个 nodejs 应用程序使用两个 Nginx 服务器。 SSL 操作也会消耗额外的 CPU 资源。 CPU 最密集的操作是 SSL 握手。
正确的处理方法也将解决您的上述问题。
- 创建目标组并与实例端口绑定
9090
- 生成 certificate from AWS(免费)
- 创建 HTTPS 侦听器并放置 aws 证书
- 将我们在步骤 1 中创建的目标组添加到负载均衡器的 HTTPS 侦听器中。
使用这种方法,您将在负载均衡器处终止 SSL/TLS,实例将接收纯 HTTP 连接,这将节省 SSL CPU 时间 encryption/decryption。
SSL termination is the term pointing to proxy servers or load balancers which accepts SSL/TLS connections however do not use the same while connecting to the back end servers. E.g. A load balancer exposed to the internet might accept HTTPS at port 443 but connects to backend servers via HTTP only
出于测试目的,这应该有效。
server {
listen 80;
server_name example.com;
client_max_body_size 32M;
underscores_in_headers on;
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_pass_header device_id;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_read_timeout 120;
proxy_next_upstream error timeout invalid_header http_500;
proxy_connect_timeout 90;
proxy_pass http://localhost:9090;
}
}
成功了。问题出在“/etc/nginx/nginx.conf”文件中。经过大量阅读和尝试 - 我发现在文件内部它转发到 HTML (而不是我的 nodejs Web 服务器)。 更改了“root /path_to_ws”这一行,重启了 Nginx 就可以了。 感谢您的帮助!