Nginx 负载均衡器支持 HTTP 和 HTTPS
Nginx Load balancer support HTTP and HTTPS
我已经配置了一个 Nginx 负载均衡器,因此它可以将流量分配给更多的 Nginx+PHP5-FPM 服务器。负载均衡器 Nginx website.com.conf (vhost) 配置如下:
upstream backend {
ip_hash;
server IP_NGINX_PHP5FPM_NODE1;
server IP_NGINX_PHP5FPM_NODE2;
}
server {
listen 80;
server_name www.website.com website.com;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
}
}
因此,当用户通过 HTTP 访问站点时,负载均衡器可以使用两个节点来处理流量。一切都适用于 HTTP,但我需要它也支持 HTTPS。所以我将其编辑为:
upstream backend {
ip_hash;
server IP_NGINX_PHP5FPM_NODE1;
server IP_NGINX_PHP5FPM_NODE2;
}
server {
listen 80;
listen 443 ssl;
server_name www.website.com website.com;
ssl on;
ssl_certificate /var/www/website.com/ssl/website-bundle.crt;
ssl_certificate_key /var/www/website.com/ssl/diosesbueno.key;
ssl_buffer_size 8k;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /var/www/website.com/ssl/trustchain.crt;
ssl_dhparam /var/www/website.com/ssl/dhparam.pem;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5:!kEDH;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
}
}
如果我通过 HTTPS 访问该站点,它可以正常工作,但 Firefox 说该网站包含未加密的元素并发出警报,请参见此屏幕截图:http://postimg.org/image/m15g9zgzh/
有人可以帮我解决这个问题吗?
这可能与您的 nginx 配置无关。
您可能正在通过 HTTP 链接引用页面中的某些文件 - 图片、JavaScript、CSS 等。确保您使用的是相对 URL。 Chrome 的网络检查器的错误控制台实际上会告诉您触发警告的确切 URL。
我认为该错误与您的服务器设置无关,而是由于使用 http.查看 FireBug 中的网络选项卡,看看是否通过它获取了任何内容。 http。通常是 .js 或 css
感谢@ceejayoz 和@Martin 的回答,我发现了与网站页面中的混合内容 HTTPS/HTTP 有关的问题。基本上,后端 Nginx 节点通过 HTTP 将网站内容发送到 Nginx 负载均衡器 HTTPS。因此,向用户显示的网页在代码中包含一些 HTTP 链接。因此,为了解决这个问题,我还在 Nginx 节点中添加了对 SSL 的支持,并且我修改了 Nginx 负载平衡器虚拟主机以在代理传递指令中支持 https:
proxy_pass https://backendssl;
SSL 服务器内部:
server {
listen 443 ssl;
这是上游后端ssl的内容:
upstream backendssl {
ip_hash;
server IP_ADDRESS_NODE1:443;
server IP_ADDRESS_NODE2:443;
}
由于网站一直需要 HTTPS 连接,我还添加了:
server {
listen 80;
server_name www.website.com website.com;
return 301 https://$server_name$request_uri;
}
在 Nginx 负载平衡器虚拟主机中。
希望对其他用户有所帮助!
我已经配置了一个 Nginx 负载均衡器,因此它可以将流量分配给更多的 Nginx+PHP5-FPM 服务器。负载均衡器 Nginx website.com.conf (vhost) 配置如下:
upstream backend {
ip_hash;
server IP_NGINX_PHP5FPM_NODE1;
server IP_NGINX_PHP5FPM_NODE2;
}
server {
listen 80;
server_name www.website.com website.com;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
}
}
因此,当用户通过 HTTP 访问站点时,负载均衡器可以使用两个节点来处理流量。一切都适用于 HTTP,但我需要它也支持 HTTPS。所以我将其编辑为:
upstream backend {
ip_hash;
server IP_NGINX_PHP5FPM_NODE1;
server IP_NGINX_PHP5FPM_NODE2;
}
server {
listen 80;
listen 443 ssl;
server_name www.website.com website.com;
ssl on;
ssl_certificate /var/www/website.com/ssl/website-bundle.crt;
ssl_certificate_key /var/www/website.com/ssl/diosesbueno.key;
ssl_buffer_size 8k;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /var/www/website.com/ssl/trustchain.crt;
ssl_dhparam /var/www/website.com/ssl/dhparam.pem;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5:!kEDH;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
}
}
如果我通过 HTTPS 访问该站点,它可以正常工作,但 Firefox 说该网站包含未加密的元素并发出警报,请参见此屏幕截图:http://postimg.org/image/m15g9zgzh/
有人可以帮我解决这个问题吗?
这可能与您的 nginx 配置无关。
您可能正在通过 HTTP 链接引用页面中的某些文件 - 图片、JavaScript、CSS 等。确保您使用的是相对 URL。 Chrome 的网络检查器的错误控制台实际上会告诉您触发警告的确切 URL。
我认为该错误与您的服务器设置无关,而是由于使用 http.查看 FireBug 中的网络选项卡,看看是否通过它获取了任何内容。 http。通常是 .js 或 css
感谢@ceejayoz 和@Martin 的回答,我发现了与网站页面中的混合内容 HTTPS/HTTP 有关的问题。基本上,后端 Nginx 节点通过 HTTP 将网站内容发送到 Nginx 负载均衡器 HTTPS。因此,向用户显示的网页在代码中包含一些 HTTP 链接。因此,为了解决这个问题,我还在 Nginx 节点中添加了对 SSL 的支持,并且我修改了 Nginx 负载平衡器虚拟主机以在代理传递指令中支持 https:
proxy_pass https://backendssl;
SSL 服务器内部:
server {
listen 443 ssl;
这是上游后端ssl的内容:
upstream backendssl {
ip_hash;
server IP_ADDRESS_NODE1:443;
server IP_ADDRESS_NODE2:443;
}
由于网站一直需要 HTTPS 连接,我还添加了:
server {
listen 80;
server_name www.website.com website.com;
return 301 https://$server_name$request_uri;
}
在 Nginx 负载平衡器虚拟主机中。
希望对其他用户有所帮助!