20

Dopo faccio il login e il cookie viene impostato ottengo l'errore 502. Quando ho letto il registro ottengo l'errore:Come cambiare nginx config nella amazon fagiolo magico elastico in esecuzione un'istanza finestra mobile

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: 

Dopo un po 'googling veloce ho trovato: http://developernote.com/2012/09/how-i-fixed-nginx-502-bad-gateway-error/

e voglio provare a impostare fastcgi_buffers e fastcgi_buffer_size su un valore diverso. Ma come posso impostare la variabile su nginx in amazon elasticbeanstalk?

Il server nginx si trova prima dell'istanza della finestra mobile.

risposta

19

Avevo anche bisogno di modificare la configurazione di nginx.

  1. creare uno script che modifica la configurazione di nginx (probabilmente si desidera /etc/nginx/sites-enabled/elasticbeanstalk-nginx-docker.conf) e riavvia il servizio nginx (service nginx restart).
  2. È necessario eseguire lo script dopo che è stato scritto questo file di configurazione di nginx, che viene eseguito dopo che sono state eseguite le normali estensioni. Questo non è documentato, ma Evan ha condiviso come eseguire questa operazione here: in sostanza si utilizza un'ebextension per copiare lo script in una directory con hook che viene eseguito al momento opportuno.

Un esempio ebextension config è .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" 

Questo sta lavorando bene ora per il mio progetto (here è la fonte dove si può vedere in azione).

+0

ho dovuto rinominare il 01rewrite_nginx_config.py script di editing per 12_rewrite_nginx_config per farlo eseguire abbastanza tardi. –

15

Un altro modo per estendere Elastic Beanstalk config nginx è quello di creare un file nella directory .ebextensions, chiamato ad esempio nginx.config con il seguente contenuto:

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 è il nome del file che verrà creato sul Beanstalk Elastic Istanze EC2. Per impostazione predefinita questa configurazione si trova nel file /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf. Quindi, se il prefisso è 000, garantisce che la configurazione verrà presa in considerazione per prima.

Il contenuto è stato copiato dalla configurazione predefinita di nginx (/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf nuovamente), quindi personalizzato con la mia configurazione.

+2

Non so sulle versioni precedenti, ma al momento, se lo fai, riceverai un brutto messaggio di errore da Nginx, 'duplicate upstream" nodejs "in /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf: 12'. Non solo, dovrai accedere a ciascun nodo Beanstalk e rimuovere manualmente il file 000_my_config.conf'. Essere avvertito –

+4

@TimFulmer: questo è esattamente il motivo per cui ho chiamato il mio "nodejsserver" a monte e non "nodejs". – jsebfranck

+2

Puoi rimuovere i file aggiungendo una sezione comandi allo stesso file 'comandi: 01remove_backup: comando: rm -f [tuo file]' (aggiornamento idententazione ecc.) –

26

Amazon consiglia in realtà di modificare la versione di gestione temporanea del file di distribuzione nginx. Ce ne sono diversi a /tmp/deployment/config/, uno per la modifica del contesto generale "http", e poi alcuni per la configurazione di diversi aspetti del server.

ho voluto collegare la memorizzazione nella cache funzionalità al server proxy di default, così ho scritto un file di configurazione per sostituire .ebextensions#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf, che viene poi copiato verso /etc/nginx/conf.d durante la distribuzione. È possibile allineare il file se è abbastanza semplice, ma inserisco il mio in S3 in modo tale che le diverse applicazioni possano estrarlo e utilizzarlo. Ecco il file di configurazione:

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

Penso che questo sia il modo più pulito per sovrascrivere il conf predefinito . Grazie. –

+0

Dopo tutti i tipi di diversi tentativi questo ha funzionato come un fascino. Non è necessario riavviare nginx esattamente nel momento giusto o temere di averlo sovrascritto, basta sovrascriverlo all'origine. Bellissimo. –

+0

Ha importanza il nome del file? Inoltre, come si distribuisce il file di configurazione nginx personalizzato su S3? C'è un modo per fare un dep di eb copiare il file dalla tua macchina al secchio S3 invece di copiarlo manualmente? Sono sicuro che potresti creare un altro bucket S3 per questo, ma voglio usare lo stesso bucket EBS che è stato creato per me. –

2

Un approccio più pulito è quello di avere i file .conf nginx con le modifiche desiderati in una sottocartella in.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

Vale la pena menzionare che questa soluzione funziona solo con alcune piattaforme ELB - [Java] (http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-nginx.html) e [Vai] (http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/go-nginx.html). Se si utilizza ad esempio Docker Platform con nginx come proxy, è necessario utilizzare la soluzione con il file di configurazione (che utilizza la parola chiave files) posto all'interno di .ebextensions – rkarczmarczyk