Announcement

Collapse
No announcement yet.

Apache sendet jeden Request an das mod_jk module

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Apache sendet jeden Request an das mod_jk module

    Hallo zusammen,
    ich habe eine Frage bzgl der Zusammenarbeit
    Apache / mod_jk Module und Anbindung an Tomcat
    Ich benutze Apache/1.3.27 (Unix) mod_jk/1.2.4 and Tomcat 4.1.27

    Es geht darum, dass es so scheint, als ob
    Apache jeden Request immer auch an das mod_jk
    Module weitersendet (auch Request, die keine Tomcat Requests sind).

    Folgende Logmeldungen erscheinen im Apache mod_jk Logfile
    <pre>
    [Fri Sep 03 10:14:32 2004 AM] [jk_uri_worker_map.c (460)]: Into
    jk_uri_worker_map_t::map_uri_to_worker
    [Fri Sep 03 10:14:32 2004 AM] [jk_uri_worker_map.c (477)]: Attempting to
    map URI '/'
    [Fri Sep 03 10:14:32 2004 AM] [jk_uri_worker_map.c (599)]:
    jk_uri_worker_map_t::map_uri_to_worker, done without a match
    </pre>

    Mich würde interessieren, ob dies das "normale"
    Verhalten ist (oder eventuell ein Konfigurationsfehler einen solchen Effekt haben könnte). Eigentlich halte ich dies aus Performancgründen nicht für ein erwünschtes Verhalten. Habe diese Frage auch schon in die Tomcat User Liste geposted, aber leider bisher
    keine Antwort bekommen.

    Viele Grüsse
    Karin

  • #2
    Hi Karin,

    Das sieht ganz normal aus IMHO. Der mod_jk muß ja überprüfen ob ein request für den Tomcat gedacht ist. Wenn nicht, ignoriert er ihn. Steht ja auch da "done without a match", also alles im grünen Bereich :-) Er leitet den request nicht weiter aber eine einmalige Überprüfung muß sein.

    Ich habe es mal getestet und bei mir kommen exakt diesselben Ausgaben, d.h. ein negativer match für jeden Apache-Request. Allerdings nur wenn ich den log level hochsetze mit

    <PRE>
    JkLogLevel debug
    </PRE>

    Mit der default-Einstellung info kommen diese Meldungen nicht.

    Gruß,

    Alwi

    Comment


    • #3
      Hallo Alwin,
      danke für Deine Antwort.

      ich verstehe nicht, wieso eine einmalige Prüfung sein muss. Nehmen wir einmal an
      es kommt ein Request an, der nicht für Tomcat
      bestimmt ist. Dann muss es ja in der Konfiguration
      von Apache für diesen Request eine Location geben, die dafür verantwortlich. Dann könnte
      Apache dies einfach an den dort konfigurierten Handler schicken und eigentlich muss dann mod_jk nicht mehr gefragt werden.

      Viele Grüsse
      Kari

      Comment


      • #4
        Hi Karin,

        Da hast Du natürlich recht. Das hängt aber wohl davon ab, wie der Apache intern implementiert ist. Ich sehe zwei Möglichkeiten: <br>
        1. Er sucht sich anhand einer Tabelle den richtigen Handler und leitet den Request dann weiter (wie Du beschreibst) <br>
        2. Er konfiguriert am Anfang jeden Handler mit den für ihn vorgesehenen Pfaden und fragt später einfach jeden, ob er den Request verarbeiten kann. <br>
        Ich bin implizit von Fall 2 ausgegangen. Ich bin davon ausgegangen, das die JkXYZ in der httpd.conf an den mod_jk weitergegeben wird und der "eigentliche Apache" sich dann darum nicht mehr kümmert. Performancemäßig macht es IMHO keinen großen Unterschied, es wird eigentlich immer nur in Maps nachgeschaut, ob ein Treffer vorliegt. Genau wissen tu ich es allerdings nicht, ich hab nie in den Apache-Code reingeschaut. Ich weiß nur, das ich die Meldungen bei entsprechendem Log-Level auch bekomme. Vielleicht kann uns ja Peter Rossbach weiterhelfen, interessiert mich jetzt auch :-)

        Gruß,

        Alwi

        Comment


        • #5
          Also merkwürdig ist es schon, aber vermutlich
          stimmt Alwin's Analyse. Die Handler im Apache funktionieren jedenfall als eine Art Pipeline.
          Leider gibt es nur wenige Design- oder Analyse- Dokumente über den Apache.

          Hier ein paar Verweise zum Apache Design
          http://www.shoshin.uwaterloo.ca/~oadragoi/cw/CS746G/a1/apache_conceptual_arch.html
          http://webdesign.ittoolbox.com/nav/t.asp?t=418&p=421&h1=418&h2=419&h3=421
          http://apache.hpi.uni-potsdam.de/document/documents/architecture_recovery_of_apache.pdf

          Tschau
          pete

          Comment


          • #6
            Hi zusammen,

            Ich hab Peters Dokumente mal überflogen. Sehr interessant ist auch folgende Seite, die beschreibt wie man Module selber schreibt (in Perl):

            http://modperl.com:9000/book/chapters/ch7.html

            Unter "The URI Translation Phase" steht, das Apache alle "URI-Translator"-Module durchgeht. Jeder der den Request nicht verarbeiten kann, gibt DECLINED zurück. Die Kette wird unterbrochen, sobald einer OK sagt. mod_jk registriert sich beim Apache als URI-Translator (muß es ja).

            In den Dateien http_request.c und request.c (Apache 2.0 Source, bei 1.3 wirds wohl ähnlich sein) und mod_jk.c (mod_jk 1.2 Source) kann man das auch einigermaßen erkennen, wenn man sich die Funktionen ap_process_request, ap_process_request_internal und jk_translate anschaut. Allerdings ist das nicht gerade leicht zu durchschauen, ich gebe es jetzt auf :-)

            IMHO steht halt einfach mod_jk am Anfang der Kette (Pipeline) und bekommt die ganzen Apache-Requests ab, die es dann in jk_translate mit DECLINED beantwortet.

            Gruß,

            Alwi

            Comment

            Working...
            X