HenKHan: Apache Webserver und Perl

Ich habe auf meinem WindowsXP-Rechner den Apache-Webserver installiert. Dieser funktioiniert auch. Nun möchte ich Perl-Scripte auf dem Server laufen lassen. Deshalb habe ich ActivePerl installiert. Wenn ich nun die Scripte von meiner HP, also die auf dem Apache, ausführen möchte, erscheint der Fehler 404, obwohl die Links richtig sind! Woran kann das liegen?

  1. hallo,

    erstmal: deine Nachfrage hättest du ruhig in deinem anderen Thread <?m=39188&t=7076> unterbringen können ...

    Wenn ich nun die Scripte von meiner HP, also die auf dem Apache, ausführen möchte, erscheint der Fehler 404, obwohl die Links richtig sind! Woran kann das liegen?

    Die "Links" ? Welche ? Wenn du cgi-Funktionalität haben möchtest, müssen die entsprechenden Handler in der httpd.conf korrekt angegeben sein, und die Perl-Scripts sollten dann auch ein korrektes "shebang" aufweisen. Dann sollte alles funktionieren. Beschreib mal deine "Fehler" etwas genauer - eine "HP, also die auf dem Apache" ist möglicherweise ganz einfach nicht im DocumentRoot abgelegt, oder du hast versucht, einen virtuellen Host einzurichten usw.

    Christoph S.

    1. »» erstmal: deine Nachfrage hättest du ruhig in deinem anderen
         Thread <?m=39188&t=7076> unterbringen können ...

      Oh, sorry!!!

      »» Die "Links" ? Welche ?
      Mit "Links" meine ich die Links, mit denen ich die Scripte aufrufe, da der Server immer einen  404-Fehler ausgibt.

      Hier ein Auszug aus meiner httpd.conf:
      ...
      #2. Sektion
      Port 80
      ServerAdmin henkhan@web.de
      ServerName 127.0.0.1
      DocumentRoot "Server-Pfad"
      <Directory />
          Options FollowSymLinks
          AllowOverride None
      </Directory>
      <Directory "Pfad">
          Options Indexes FollowSymLinks MultiViews All
          AllowOverride All
          Order allow,deny
          Allow from all
      </Directory>
      <IfModule mod_userdir.c>
          UserDir "C:/Programme/tools/web/Apache/Apache/users/"
      </IfModule>

      DirectoryIndex index.htm

      AccessFileName .htaccess
      <Files ~ "^.ht">
          Order allow,deny
          Deny from all
          Satisfy All
      </Files>

      UseCanonicalName On
      <IfModule mod_mime.c>
          TypesConfig conf/mime.types
      </IfModule>

      DefaultType text/plain

      <IfModule mod_mime_magic.c>
          MIMEMagicFile conf/magic
      </IfModule>

      HostnameLookups Off

      ErrorLog logs/error.log

      LogLevel warn
      LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
      LogFormat "%h %l %u %t "%r" %>s %b" common
      LogFormat "%{Referer}i -> %U" referer
      LogFormat "%{User-agent}i" agent
      CustomLog logs/access.log common
      ServerSignature On

      Apache parses all CGI scripts for the shebang line by default.

      This comment line, the first line of the script, consists of the symbols

      pound (#) and exclamation (!) followed by the path of the program that

      can execute this specific script.  For a perl script, with perl.exe in

      the C:\Program Files\Perl directory, the shebang line should be:

      #!c:/program files/perl/perl

      Note you _must_not_ indent the actual shebang line, and it must be the

      first line of the file.  Of course, CGI processing must be enabled by

      the appropriate ScriptAlias or Options ExecCGI directives for the files

      or directory in question.

      However, Apache on Windows allows either the Unix behavior above, or can

      use the Registry to match files by extention.  The command to execute

      a file of this type is retrieved from the registry by the same method as

      the Windows Explorer would use to handle double-clicking on a file.

      These script actions can be configured from the Windows Explorer View menu,

      'Folder Options', and reviewing the 'File Types' tab.  Clicking the Edit

      button allows you to modify the Actions, of which Apache 1.3 attempts to

      perform the 'Open' Action, and failing that it will try the shebang line.

      This behavior is subject to change in Apache release 2.0.

      Each mechanism has it's own specific security weaknesses, from the means

      to run a program you didn't intend the website owner to invoke, and the

      best method is a matter of great debate.

      To enable the this Windows specific behavior (and therefore -disable- the

      equivilant Unix behavior), uncomment the following directive:

      ScriptInterpreterSource registry

      The directive above can be placed in individual <Directory> blocks or the

      .htaccess file, with either the 'registry' (Windows behavior) or 'script'

      (Unix behavior) option, and will override this server default option.

      Alias /icons/ "Pfad/"

      <Directory "Pfad">
              Options Indexes MultiViews
              AllowOverride None
              Order allow,deny
              Allow from all
          </Directory>

      Alias /manual/ "Pfad/"

      <Directory "Pfad">
              Options Indexes FollowSymlinks MultiViews
              AllowOverride None
              Order allow,deny
              Allow from all
          </Directory>
       ScriptAlias /cgi-bin/ "Pfad/"

      #
          # "Pfad" should be changed to whatever your ScriptAliased
          # CGI directory exists, if you have that configured.
          #
          <Directory "Pfad">
              Options  Indexes MultiViews
              AllowOverride None
              Order allow,deny
              Allow from all
          </Directory>
      ...
      Ich habe hier einen großen Teil der englischen Kommentare herausgeschnitten. Damit es nicht ganz so lang wird. Kann mir jemand sagen, was ich falsch gemacht habe, dass keine Perl-Scripte ausführt werden?

      1. hi,

        ohje ...

        Hier ein Auszug aus meiner httpd.conf:
        ...
        #2. Sektion
        Port 80
        ServerAdmin henkhan@web.de

        bis dahin mags angehen, obwohl port 80 für einen _lokalen_ Webserver nicht _sehr_ glücklich ist.

        ServerName 127.0.0.1

        interessanter Name ;-)

        DocumentRoot "Server-Pfad"

        Und _DAS_ geht nun überhaupt nicht. Auf einem WinXP-Rechner sollte ungefähr so etwas hier stehen:
        DocumentRoot "C:/Programme/Apache Group/Apache/htdocs"

        <Directory />
            Options FollowSymLinks
            AllowOverride None
        </Directory>
        <Directory "Pfad">
            Options Indexes FollowSymLinks MultiViews All
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>

        Das ist stark überarbeitungswürdig, die "Directories" können so nicht "stimmen".

        <IfModule mod_userdir.c>
            UserDir "C:/Programme/tools/web/Apache/Apache/users/"
        </IfModule>

        Zwar wäre ein solcher Pfad zu einem Benutzerverzeichnis möglich, sieht aber sehr unglücklich aus. Für die Administration auf einem WinXP-Rechner ist es sinnvoller, keine so tief gestaffelten Verzeichnisse zu verwenden. Leg dir einfach ein Verzeichnis "C:\Apache" an, und du hast es leichter  -  aber _bitte_ berücksichtige den Hinweis, daß für einen auf einem Windows-Rechner laufenden Apache ein "UserDir" im Grunde genommen noch nicht vorgesehen ist. Du brauchst es auch nicht, solange du nur deine eigenen Scripts ausprobieren möchtest.

        DirectoryIndex index.htm

        Dir ist klar, daß du damit jede "index.php" und jede "index.html" als Index-Datei ausschließt? (Siehe dein früherer Thread)

        AccessFileName .htaccess
        <Files ~ "^.ht">
            Order allow,deny
            Deny from all
            Satisfy All
        </Files>

        wichtg, brauchst du aber beim derzeitigen Stand deiner Administration noch nicht.

        ErrorLog logs/error.log

        ja, warum schreibst du nicht, was in dieser Datei drin steht ??? Das ist immer die _ERSTE_ Adresse auf der Suche nach Fehlern in der Serverkonfiguration.

        ScriptInterpreterSource registry

        ähm, ja ... ist dir klar, was diese Einstellung bewirkt ? Wenn nicht, frag mal Michael Schröpl und sag ihm, daß ich dich darauf hingewiesen hab *gg*

        Alias /icons/ "Pfad/"

        wieder ein völlig falscher Pfad. Pfadnamen in Windows beginnen mit einem Laufwerksbuchstaben. Punkt. Das gilt auch für die folgenden Directories wie

        Alias /manual/ "Pfad/"

        Das manual liegt garantiert woanders

        ScriptAlias /cgi-bin/ "Pfad/"

        und dein cgi-bin-Verzeichnis ist möglicherweise
        ScriptAlias /cgi-bin/ "C:/Programme/Apache Group/Apache/cgi-bin/"
        du kannst es allerdings auch an beliebiger anderer Stelle liegen haben, vorausgesetzt, die Pfadangabe beginnt mit einem Laufwerksbuchstaben.

        Ich habe hier einen großen Teil der englischen Kommentare herausgeschnitten. Damit es nicht ganz so lang wird. Kann mir jemand sagen, was ich falsch gemacht habe, dass keine Perl-Scripte ausführt werden?

        Ich habe dir bereits in deinem anderen Thread die Adresse http://aktuell.de.selfhtml.org/artikel/server/apacheconf/index.htm genannt, warum liest du denn nicht nach ? Auch die anderen Feature-Artikel zur Serverkonfiguration können dir sehr viel weiterhelfen als eine Nachfrage hier im Forum. Erst wenn dir diese bereits vorhandenen Hilfestellungen nicht genügend Auskunft geben, solltest du nachfragen.

        Christoph S.

        1. Hallo,

          bis dahin mags angehen, obwohl port 80 für einen _lokalen_ Webserver nicht _sehr_ glücklich ist.

          Warum sollte Port 80 eine unglückliche Wahl sein? Was macht den lokalen Rechner so prominent, daß es unter seiner Würde wäre, einen Webserver laufen zu haben, der auf das Standard-HTTP-Port horcht? (Abgesehen davon, daß auf jedem Rechner irgendwann lokal gearbeitet wird, er also dann der 'lokale Rechner' ist)

          Ansonsten verstehe ich nicht, warum die Leute so viele Probleme haben, einen Apache unter Windows zum Laufen zu bringen. So ein DAU kann man doch gar nicht sein. Die mitgelieferte[1] Konfiguration ist für den Standardanwendungsfall recht gut zu gebrauchen. Und wenn's dann doch konkret wird, sollte man IMHO _zuerst_ die mitgelieferte Dokumentation lesen, und dann immer eine Sicherheitskopie der Original-Konfiguration anlegen. Aber was rede ich, die Leute von der Apache-Truppe sind ja sowieso so fix gewesen, daß bei der Installation gleich eine mit angelegt wird (http.default.conf).

          Grüße
            Klaus

          [1] Wobei die bei der Installation auch gleich an die lokalen Pfade angepaßt wird.

          1. hi,

            Warum sollte Port 80 eine unglückliche Wahl sein?

            Nun, es wird nicht lange dauern, bis er die berühmten Einträge

            pd9e13c1e.dip.t-dialin.net - - [04/Mar/2002:22:17:10 +0100] "GET /scripts/..%255c../winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 292
            pd9e13c1e.dip.t-dialin.net - - [04/Mar/2002:22:17:11 +0100] "GET /scripts/..%255c../winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 292
            pd9e13c1e.dip.t-dialin.net - - [04/Mar/2002:22:17:13 +0100] "GET /_vti_bin/..%255c../..%255c../..%255c../winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 309
            pd9e13c1e.dip.t-dialin.net - - [04/Mar/2002:22:17:15 +0100] "GET /_vti_bin/..%255c../..%255c../..%255c../winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 309
            pd9e13c1e.dip.t-dialin.net - - [04/Mar/2002:22:17:18 +0100] "GET /_mem_bin/..%255c../..%255c../..%255c../winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 309
            pd9e13c1e.dip.t-dialin.net - - [04/Mar/2002:22:17:22 +0100] "GET /msadc/..%255c../..%255c../..%255c/..%c1%1c../..%c1%1c../..%c1%1c../winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 325

            in seinen logs findet.

            Ansonsten verstehe ich nicht, warum die Leute so viele Probleme haben, einen Apache unter Windows zum Laufen zu bringen.

            Das verstehe ich auch nicht. Aber es ist eben so ;-)

            Grüße retour

            Christoph S.

            1. Hi Christoph,

              Warum sollte Port 80 eine unglückliche Wahl sein?
              Nun, es wird nicht lange dauern, bis er die
              berühmten Einträge
              ...
              in seinen logs findet.

              Na und? Die habe ich auch schon ein paarmal erwischt.
              Wo ist das Problem, solange auf Port 80 kein IIS läuft?

              Ansonsten verstehe ich nicht, warum die Leute so
              viele Probleme haben, einen Apache unter Windows zum
              Laufen zu bringen.

              Ich schon - weil sie unter Windows klicki-bunti "gelernt haben".
              Da ist die httpd.conf halt ein Schlag unter die Gürtellinie. ;-)

              Viele Grüße
                    Michael

              1. Hallo,

                Ansonsten verstehe ich nicht, warum die Leute so
                viele Probleme haben, einen Apache unter Windows zum
                Laufen zu bringen.

                Ich schon - weil sie unter Windows klicki-bunti "gelernt haben".
                Da ist die httpd.conf halt ein Schlag unter die Gürtellinie. ;-)

                Und dabei haben sich, wie ich schon erwähnt habe, die Leute, die den Windows-Port gemacht haben, so sehr bemüht, daß die Ausgangskonfiguration Sinn macht, und die Klickibunti-Anwender fürs erste gar nichts modifizeren müssen.
                ...
                So jetzt habe ich es ausprobiert:
                Der neue Webmin http://www.webmin.com läuft auch unter cygwin http://sources.redhat.com/cygwin/. Wenn man dann die Webmin-konfiguration an die Windows-Gegebenheiten angepasst hat, dann kann sich damit auch der Apache über ein Webinterface konfigurieren lassen.

                Grüße
                  Klaus

            2. Hallo,

              Warum sollte Port 80 eine unglückliche Wahl sein?
              Nun, es wird nicht lange dauern, bis er die berühmten Einträge

              [...]

              in seinen logs findet.

              Dann fehlt eine Firewall. Wenn das der Fall ist, dann sind diese Log-Einträge das geringste Problem,da sie einfahc nur daruaf hinweisen, daß der Apache das Nimda-Spiel nicht mitspielt. Allerdings sind dann auch ander Prots offen, welche DU nicht 'verlegen' kannst, über die potentielle Angreifer deinen Rechner attakieren können.

              Grüße
                Klaus

  2. Hi,

    Wenn ich nun die Scripte von meiner HP, also die auf
    dem Apache, ausführen möchte, erscheint der Fehler
    404, obwohl die Links richtig sind!

    ich bezweifele diese Aussage.

    Denn die Bedeutung von "404" ist, daß die Links eben _nicht_ "richtig" sind - auf jeden Fall schon mal nicht auf etwas Existierendes zeigen.

    Viele Grüße
          Michael