Ich habe eine Rails App mit einem NGINX Reverse Proxy hinter einem AWS ELB. Ich beende SSL auf dem ELB und ich habe NGINX konfiguriert, um jeden HTTP-Versuch zu erzwingen, als HTTPS neu zu schreiben. Dieses Setup funktioniert einwandfrei, aber ich bediene die Site auch über ECS. Da die ELB-Integritätsprüfung auf HTTP-Port 80 erfolgt, schlägt die ELB-Integritätsprüfung fehl und die Instanz wird abgemeldet, wenn sie die Weiterleitung erhält und 301 zurückgibt.NGINX force SSL für alle außer Health-Check-Datei?
Wie richte ich NGINX so ein, dass alle Dateien mit Ausnahme der Integritätsprüfung über HTTPS gesendet werden?
Hier ist mein Server Block von nginx.conf:
server {
listen 80;
server_name localhost;
root /var/www/html;
location ~ ^elbcheck\.html$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://rails_app;
break;
}
location/{
proxy_redirect off;
proxy_next_upstream error;
if ($http_x_forwarded_proto != "https") {
rewrite^https://$host$request_uri? permanent;
}
try_files $uri $uri/ @proxy;
}
location ~* \.(jpg|jpeg|svg|png|gif|ico|css|js|eot|woff|woff2|map)$ {
proxy_cache APP;
proxy_cache_valid 200 1d;
proxy_cache_valid 404 5m;
proxy_ignore_headers "Cache-Control";
expires 1d;
proxy_set_header Host $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 https;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass http://rails_app;
}
location @proxy {
proxy_set_header Host $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 https;
proxy_pass http://rails_app;
}
}
das Problem bei diesem Ansatz ist, dass nginx reagieren Der Health-Check, nicht die App "rails", umgeht also eines der Ziele des Health-Checks: Entfernen von fehlerhaften Instanzen, bei denen der Rails-Server nicht antwortet. Sie haben möglicherweise eine Situation, in der nginx reagiert, aber die Rails-App nicht und Ihre Benutzer werden immer noch zu dieser fehlerhaften Instanz weitergeleitet. – Augusto