这是我的第一个问题,所以请你放轻松一点!
我正在尝试在多租户SAAS平台内设置一个Nginx代理服务器,使用OpenR校/Lua和LetsEncrypt自动生成SSL证书。
代理服务器正在运行,证书正在颁发。Nginx配置(通过OpenResty)正在向我的AWS弹性(经典)负载均衡器发送请求。
问题是,我的ELB背后的实例似乎没有接收到HTTPS协议,所以我的网站导航中的链接等等都是HTTP,而不是HTTPS。
例如,加载https://www.domain.com有效,但单击导航中的一个链接显示http://www.domain.com/page.html。
下面是我在代理上的OpenR校/nginx配置:
http {
lua_shared_dict auto_ssl 1m;
lua_shared_dict auto_ssl_settings 64k;
resolver 8.8.8.8 ipv6=off;
init_by_lua_block {
auto_ssl = (require "resty.auto-ssl").new()
auto_ssl:set("allow_domain", function(domain)
return true
end)
auto_ssl:init()
}
init_worker_by_lua_block {
auto_ssl:init_worker()
}
server {
listen 443 ssl;
location / {
proxy_pass http://AWS-ELB-URL-HERE;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
ssl_certificate_by_lua_block {
auto_ssl:ssl_certificate()
}
ssl_certificate /etc/ssl/resty-auto-ssl-fallback.crt;
ssl_certificate_key /etc/ssl/resty-auto-ssl-fallback.key;
}
server {
listen 80;
location /.well-known/acme-challenge/ {
content_by_lua_block {
auto_ssl:challenge_server()
}
}
}
server {
listen 127.0.0.1:8999;
client_body_buffer_size 128k;
client_max_body_size 128k;
location / {
content_by_lua_block {
auto_ssl:hook_server()
}
}
}
}为了试图确定Rails应用程序是否存在问题,我将Nginx配置更改为直接指向实例IP地址,而不是ELB。这样做,all链接就是https(!),这正是我想要的!
因此,在这一点上,我认为问题要么是:( a)我的Nginx配置没有正确地传递协议;或者( b)我的ELB没有将协议传递给后端实例。
我倾向于认为ELB是罪魁祸首,因为当将代理直接指向实例IP时,一切都按预期工作。
因此,我已经开始研究ELB配置和侦听器,但是还没有找到一个可以工作的配置。我现在拥有的是:

我也曾尝试将其改为:
负载平衡器协议: HTTPS (安全HTTP),负载均衡器端口: 443,实例协议: HTTP,实例端口: 80
但这也不起作用,而且链接仍然是HTTP。
现在,我只是在猜测如何处理侦听器和端口,尝试任何一种配置来查看它是否工作。到目前为止什么都没有。
有没有人对这个问题有任何洞察力,以及如何解决?蒂娅!
发布于 2018-06-25 17:21:47
好吧,我想出来了!我刚刚向SSL块添加了一个附加指令:
proxy_set_header X-Forwarded-Ssl on;在重新启动nginx之后,所有请求现在都作为https传递给我的ELB和它后面的应用服务器!
此外,对于我的ELB侦听器,我删除了SSL (安全TCP)列表器,并添加了:
LB协议: HTTPS (安全HTTP),LB端口: 443,实例协议: HTTP,实例端口: 80
https://serverfault.com/questions/917511
复制相似问题