Puncte:0

Cum să configurați Apache ca proxy invers pentru un container docker

drapel jp

Mă străduiesc să-mi configurez serverul Apache ca proxy invers pentru un docker conținut Lumina verde instanță.

În oficial docs se propune pentru a rula Greenlight într-un container docker cu o instanță Nginx ca proxy invers (în principal pentru a facilita rularea acestuia împreună cu un server BBB). Cu toate acestea, în configurația mea, nu vreau să rulez propria instanță BBB, ci mai degrabă să folosesc Greenlight ca frontend pentru un server BBB extern.

Dar, pentru comoditate, totuși, am configurat Greenlight într-un container docker.

Dar, deoarece serverul meu are multe scopuri (în principal este folosit pentru a livra mai multe site-uri web și pentru a oferi conturi de e-mail, ambele administrate de Froxlor dar funcționează și ca un Server Matrix) Nu vreau să configurez Nginx ca proxy, deoarece asta m-ar forța să schimb substanțial configurația Apache care rulează Froxlor.

Așa că încercam să configurez Apache în schimb ca o prox inversă. Din păcate, în documente este doar un exemplu Nginx:

locație /b {
  proxy_pass http://127.0.0.1:5000;
  proxy_set_header Gazdă $gazdă;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $schema;
  proxy_http_versiunea 1.1;
}

locație /b/cablu {
  proxy_pass http://127.0.0.1:5000;
  proxy_set_header Gazdă $gazdă;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $schema;
  proxy_set_header Actualizare $http_upgrade;
  proxy_set_header Conexiune „Actualizare”;
  proxy_http_versiunea 1.1;
  proxy_read_timeout 6h;
  proxy_send_timeout 6h;
  client_body_timeout 6h;
  send_timeout 6h;
}

M-am legat pentru ca acest lucru să funcționeze pe Apache cu următoarele setări VirtualHost:

<VirtualHost MYIP:443>
  ServerName greenlight.example.com
ProxyPreserveHost On
ProxyRequests Off
ProxyVia On
ProxyPass / http://127.0.0.1:5000
ProxyPassReverse / http://127.0.0.1:5000   
<Location "/cable">
  ProxyPass / http://127.0.0.1:5000 connectiontimeout=6h timeout=6h
  ProxyPassReverse / http://127.0.0.1:5000
</Location>
</VirtualHost>

Mă abat de la exemplu că nu vreau să folosesc un subfolder virtual »b« ci mai degrabă un subdomeniu care să redirecționeze traficul specific către portul local 5000. Din păcate, acest lucru nu funcționează. Serverul revine

502 Eroare prox

Eroare de proxy

Serverul proxy a primit un răspuns nevalid de la un server din amonte.
Serverul proxy nu a putut gestiona cererea

Motiv: Eroare la citirea de pe serverul de la distanță

Poate cineva să-mi explice, vă rog, care ar putea fi motivul acestei erori? Cum să traduc setările Nginx Header în Apache și celelalte setări de timeout și sunt chiar necesare?

drookie avatar
drapel za
Deci, practic, încercați să faceți opusul a ceea ce face industria în prezent. Hilar.
drapel jp
@drookie Vrei să spui trecerea pentru Nginx la Apache? Ei bine, nu, nu sunt. Vreau doar să instalez Greenlight pe un server care se întâmplă să ruleze multe alte lucruri cu Apache și nu are niciun sens să reconfigureze zeci de aplicații, deoarece „industriale” consideră că Nginx este mai tare.
djdomi avatar
drapel za
nu, nu ai inteles ideea. ar trebui să utilizați nginx ca cache și să rulați aplicațiile pe apache. ăsta a vrut să spună. Așa că spuneți problema inițială, deoarece, în primul rând, aveți o [problema x și y](https://faq-database.de/doku.php?id=en:x-and-y-problem)
drapel jp
@djdomi Mulțumesc pentru comentariu. Poate ai dreptate. Am schimbat întrebarea încercând să ofer mai multe fundal. Nu am vrut să fiu prea specific la începutâ¦
Puncte:2
drapel in

Există câteva probleme aici:

  1. Ordin
    Primul drum potrivit câștigă. Ai plasat / inainte de /cablu, asa de / se va potrivi mereu și /cablu nu va fi folosit niciodată.
  2. bare oblice care se potrivesc
    Dacă încheiați primul parametru al ProxyPass cu / trebuie să adăugați unul la al doilea și invers. În caz contrar, veți ajunge cu adrese URL nefuncționale trimise la backend
  3. ProxyPass în interiorul unui <Location> bloc
    Dacă utilizați ProxyPass în interiorul unui <Location> primește doar al doilea parametru. Primul este înlocuit de <Location>.

Exemplu:

<VirtualHost MYIP:443>
    ServerName greenlight.example.com
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyVia On
    ProxyPass /cable http://127.0.0.1:5000 connectiontimeout=6h timeout=6h
    ProxyPassReverse /cable http://127.0.0.1:5000
    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
</VirtualHost>

În ultimul rând, dar nu în ultimul rând, în prezent transferați ambele locații la aceeași adresă URL backend. Acest lucru este de obicei greșit.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.