1. Home
  2. Tehniline
  3. Apache
  4. mod_proxy ja URL-märkide kodeerimine
  1. Home
  2. Tehniline
  3. mod_proxy ja URL-märkide kodeerimine

mod_proxy ja URL-märkide kodeerimine

Kui proxy taga töötava rakenduse jaoks on oluline, et kõik URL-i märgid jõuaksid muutmata kujul rakenduseni, siis kahjuks ei sobi selleks Minu Zone’i kaudu seadistatav sisenevate päringute ümbersuunamine (mod_proxy), sest see teeb enne rakenduseni edastamist URL-is mõningaid muudatusi. Näiteks kodeeritakse osa märke ümber nende kuueteistkümnendsüsteemseteks ekvivalentkoodideks. Sellise muutuse läbivad näiteks märgid “#”, “&” ja “?” (muutudes vastavalt “%23”, “%26” ja “%3F”).

See muudab omakorda üsna keeruliseks selliste rakenduste nagu näiteks Thumbor kasutamise. Kuigi mod_proxy puhul võiks teoreetiliselt aidata võtmesõna nocanon, ei toeta Minu Zone kahjuks seda võimalust.

Olukorra lahendab, kui asendada mod_proxy Apache rewrite-reegliga. Näiteks lisada Apache direktiiviplokk:
RewriteCond "%{THE_REQUEST}" "^[A-Z]+\ /([^?\ ]+)/?"
RewriteRule "^/(.*)" "http://127.0.157.196:8888/%1" [P,NE]
127.0.157.196 ja 8888 tuleb asendada õigete väärtustega (korrektse IP-silmusaadressi leiate kas Minu Zone keskkonnast valides Serveriteenus -> Süsteemsed andmed  või shellis käivitades käsu vs-loopback-ip -4).
Rewrite-reegli NE lipp tagab, et ei toimuks mingeid muudatusi rakendusele edastava URL-i ja parameetrite osas. https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_ne
Turvahoiatus!

[NE] (No Escape) lipu kasutamine võib kujutada turvariski, kui päringud suunatakse tundmatule või avalikule teenusele. Kasuta [NE] lippu ainult siis, kui proksid sisemisse, usaldusväärsesse teenusesse, ning veendu, et backend valideerib URL-id ega käsitle neid käsurea- või failiteedena.

RewriteCond lahti seletatult

RewriteCond "%{THE_REQUEST}" "^[A-Z]+\ /([^?\ ]+)/?"

See on tingimus, mille alusel reegel rakendub.
Siin kasutatakse spetsiaalset muutujat %{THE_REQUEST}, mis sisaldab brauseri algset HTTP-päringu rida, näiteks:
GET /images/foo.jpg?size=large HTTP/1.1

^[A-Z]+\ /([^?\ ]+)/? regexp-i seletus:

  • ^[A-Z]+ — vaste HTTP meetodile (nt GET, POST, HEAD jne)

  • \ / — tühik + kaldkriips (nii algab alati URL)

  • ([^?\ ]+) — püüab kinni kõik märgid kuni esimese ? (päringu parameetrid) või tühikuni. See tähendab: püütakse kinni ainult URL-i “puhas tee” ilma query stringita.

  • /? — lubab lõpus ühe valikulise kaldkriipsu.

See „püütud” osa salvestatakse grupina %1, mida saab hiljem RewriteRule sees kasutada.

Updated on 6. nov. 2025
Was this article helpful?

Related Articles