Devo utilizzare la riscrittura o il return o il proxy_pass in nginx?

La documentazione Apache chiaramente afferma che mod_rewrite dovrebbe essere solo un ultimo resort. Per la nginx , la sezione Impedenze contiene esempi in cui la richiesta_uri è sostanzialmente invariata.


La situazione è questa:

  • Noi (un dipartimento in un istituto) possiamo avere un server web principale che dovrà essere aggiornato presto (eseguendo Debian 6). Per affrontare l'aggiornamento, ho installato un server nginx, in grado di proiettare parti notoriamente funzionanti bene ad un server aggiornato e ad altri server del vecchio server.
  • Il vecchio server aveva una serie di regole di ProxyPass (una quantità significativa del suo lavoro è proxy). Vorrei spostarli tutti in nginx , poiché, come ho capito, la nginx è più performante nel proxying.
  • Un gran numero di utenti hanno directory home dell'utente che viene utilizzato da un altro server. Per questi utenti sono disponibili versioni tilde e non tilde (ad esempio, http://my.site/muru e http://my.site/~muru potrebbero essere passati a http://other.server/~muru , ma http://other.server/muru non esiste).
  • Alcune cartelle sono state passate a una cartella diversa sullo stesso server. (ad esempio, il sito http://my.site/local-club sarebbe proxied a http://my.site/~local-club ).

La mia domanda principale è:

  • Dato A e B entrambi proxy a C su un server diverso, dovrei usare la rewrite o la location con il return alle richieste di reindirizzamento da B a A o continuare a proxy entrambi?
  • Dato A e B sia sullo stesso server, con B che sono proxy a A, dovrei usare la riscrittura o ritorna per redirect B a A?

Il reindirizzamento (e il return ) ha il vantaggio di indicare chiaramente la relazione tra le due directory.


Le mie regole di rewrite assomigliano:

 rewrite ^/B(/.*) /A$1 permanent; 

E le regole di return :

 location ~ ^/B(/.*) { return 301 /A$1; } 

Con:

 location ~ ^/~(A|D|E|F..)/ { proxy_pass https://other.server; proxy_redirect default; } 

  • Il raid 5 esteso non è in espansione
  • Norme di password per Google Cloud Platform
  • Reset eth0 per spostare il server di ubuntu 14.04
  • Come creare un JDK senza testa su Ubuntu
  • crontab non riesce, non riesce a trovare eseguibili eseguibili
  • Basso SSOP IOPS (~ 100)
  • forza postfix per submit sequenziali
  • Come posso fare Linux eseguire uno script bash quando un disco specifico è hotswapped dentro?
  • One Solution collect form web for “Devo utilizzare la riscrittura o il return o il proxy_pass in nginx?”

    Ciò non import esattamente se il vostro server nginx si occuperà di migliaia di richieste al secondo e si desidera evitare each richiesta di trascorrere il tempo della CPU nella corrispondenza delle regex di riscrittura. Ora, vorrei dire che utilizzare il modo più chiaro per scrivere i file di configuration fino a raggiungere questo limite, quindi se non hai il budget per scalare l'infrastruttura, sarebbe tempo di pensare a truccare la tua configuration per adattarsi al tuo traffico. Lo svantaggio del return è che se si dispone di più redirezioni si finisce con una posizione che avvolge una direttiva di return. Utilizzando la riscrittura è ansible avvolgerti più di loro in una posizione generica e testare nel primo parametro per un model più specifico.

    Aggiornamento: un esempio di reindirizzamento multiplo in una posizione generica:

     location /B { rewrite ^/B/foo/(.*)$ /A/newfoo/$1 permanent; rewrite ^/B/bar/(.*)$ /A/newbar/$2 permanent; rewrite ^/B/(.*)$ /A/$1 permanent; } 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.