20

läuft Nachdem ich anmelden und das Cookie gesetzt ich Fehler bekommen 502. Wenn ich das Protokoll lesen i den Fehler:Wie nginx Config ändern in Amazon Elastic Bohnenstengel eine Docker Instanz

014/05/17 01:54:43 [error] 11013#0: *8 upstream sent too big header while reading response 
header from upstream, client: 83.248.134.236, server: , request: "GET /administration 
HTTP/1.1", upstream: 

Nach einiger schnell googeln Ich fand: http://developernote.com/2012/09/how-i-fixed-nginx-502-bad-gateway-error/

und ich möchte versuchen, fastcgi_buffers und fastcgi_buffer_size auf einen anderen Wert festzulegen. Aber wie setze ich Variable auf Nginx in Amazon Elasticbeanstalk?

Der Nginx-Server befindet sich vor meiner Andock-Instanz.

Antwort

19

Ich musste auch die Nginx-Konfiguration ändern.

  1. Erstellen Sie ein Skript, das die nginx Konfiguration modifiziert (wahrscheinlich wollen Sie /etc/nginx/sites-enabled/elasticbeanstalk-nginx-docker.conf) und startet den nginx-Dienst (service nginx restart).
  2. Sie müssen dieses Skript ausführen, nachdem diese Nginx-Konfigurationsdatei geschrieben wurde, die nach normalen Ebextensions ausgeführt wird. Das ist undokumentiert, aber Evan hat uns gesagt, wie man das macht here: im Wesentlichen verwenden Sie eine Erweiterung, um das Skript in ein Verzeichnis mit Hooks zu kopieren, das zur richtigen Zeit ausgeführt wird.

Ein Beispiel ebextension Config ist .ebextensions/01modify_nginx.config:

container_commands: 
    copy: 
    command: "cp .ebextensions/01rewrite_nginx_config.py /opt/elasticbeanstalk/hooks/appdeploy/enact/" 
    make_exe: 
    command: "chmod +x /opt/elasticbeanstalk/hooks/appdeploy/enact/01rewrite_nginx_config.py" 

Das ist schön jetzt mein Projekt arbeiten (here die Quelle ist, wo Sie es in Aktion sehen können).

+0

Ich hatte das Bearbeiten von Skript 01rewrite_nginx_config.py umbenennen 12_rewrite_nginx_config es spät genug auszuführen zu bekommen. –

15

Ein anderer Weg Elastic Beanstalk nginx Config zu erweitern ist eine Datei im .ebextensions Verzeichnis zum Beispiel nginx.config mit dem folgenden Inhalt zu erstellen,:

files: 
     "/etc/nginx/conf.d/000_my_config.conf": 
     content: | 
     upstream nodejsserver { 
      server 127.0.0.1:8081; 
      keepalive 256; 
     } 

     server { 
      listen 8080; 

      location/{ 
      proxy_pass http://nodejsserver; 
      proxy_set_header Connection ""; 
      proxy_http_version 1.1; 
      proxy_set_header  Host   $host; 
      proxy_set_header  X-Real-IP  $remote_addr; 
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
      } 

      location /myconfig { 
      proxy_pass http://my_proxy_pass_host; 
      } 
     } 

/etc/nginx/conf.d/000_my_config.conf ist der Dateiname, die auf der Elastic Beanstalk erstellt werden EC2-Instanzen. Standardmäßig befindet sich diese Konfiguration in der Datei /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf. Wenn Sie also 000 als Präfix angeben, wird Ihnen garantiert, dass Ihre Konfiguration zuerst berücksichtigt wird.

Der Inhalt wurde von der Standard-Nginx-Konfiguration (/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf wieder) kopiert, dann mit meiner eigenen Konfiguration angepasst.

+2

Dunno über frühere Versionen, aber wenn Sie dies tun, erhalten Sie eine böse Fehlermeldung von Nginx, doppelte Upstream "nodejs" in /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf: 12'. Nicht nur das, Sie müssen sich bei jedem Beanstalk-Knoten anmelden und die '000_my_config.conf'-Datei manuell entfernen. Sei gewarnt. –

+4

@TimFulmer: genau deshalb habe ich meinen upstream "nodejsserver" und nicht "nodejs" aufgerufen. – jsebfranck

+2

Sie können Dateien entfernen, indem Sie einen Befehlsabschnitt in die gleiche Datei Hinzufügen 'Befehle: 01remove_backup: Befehl ein: rm -f [Dateien]' (Aktualisierung idententation etc) –

26

Amazon empfiehlt tatsächlich, die Staging-Version der nginx-Deployment-Datei zu bearbeiten. Es gibt mehrere unter /tmp/deployment/config/, eine für die Bearbeitung des allgemeinen "http" -Kontexts und dann einige für die Konfiguration verschiedener Aspekte des Servers.

wollte ich die Caching-Funktionalität auf die Standard-Proxy-Server befestigen, so schrieb ich eine .ebextensions Konfigurationsdatei #etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf, zu ersetzen, die dann über zu /etc/nginx/conf.d während der Bereitstellung kopiert wird. Du kannst die Datei inline einbinden, wenn es einfach genug ist, aber ich stelle meine in S3, damit verschiedene Anwendungen und ziehe sie runter und benutze sie. Hier ist die Konfigurationsdatei:

commands: 
    01-get-nginx-conf-file: 
    command: aws s3 cp s3://<bucket-name>/custom-nginx.conf /home/ec2-user 

container_commands: 
    01-replace-default-nginx-config: 
    command: mv -f /home/ec2-user/custom-nginx.conf /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf 
+0

Ich denke, dies der sauberste Weg ist die Standard-conf zu überschreiben . Vielen Dank. –

+0

Nach allen möglichen Versuchen hat sich dieser wie ein Zauberer verhalten. Sie müssen nginx nicht genau zum richtigen Zeitpunkt neu starten oder befürchten, dass Ihr Skript überschrieben wird. Überschreibe es einfach an der Quelle. Schön. –

+0

Ist es wichtig, wie Sie diese Datei benennen? Wie stellen Sie Ihre eigene nginx-Konfigurationsdatei in S3 bereit? Gibt es eine Möglichkeit, eb deploy die Datei von Ihrem Computer in den S3-Bucket zu kopieren, anstatt sie manuell zu kopieren? Ich bin mir sicher, dass Sie dafür einen weiteren S3-Bucket erstellen könnten, aber ich möchte den gleichen EBS-Bucket verwenden, der für mich erstellt wurde. –

2

Ein sauberer Ansatz ist in nginx Conf-Dateien mit Ihren gewünschten Änderungen in einem Unterordner zu haben.ebextensions:

You can now place an nginx.conf file in the .ebextensions/nginx folder to override the Nginx configuration. You can also place configuration files in the .ebextensions/nginx/conf.d folder in order to have them included in the Nginx configuration provided by the platform.

Source

+3

Es ist erwähnenswert, dass diese Lösung nur mit einigen ELB-Plattformen funktioniert - [Java] (http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-nginx.html) und [Go] (http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/go-nginx.html). Wenn Sie zum Beispiel Docker Platform mit nginx als Proxy verwenden, müssen Sie die Lösung mit der Konfigurationsdatei (die das Schlüsselwort files verwendet) verwenden, die in .extensions gespeichert ist – rkarczmarczyk