Назад | Перейти на главную страницу

Ошибка CGI сервера Apache 500

Я пытаюсь настроить сервер для веб-интерфейса cgit для GIT. Я скачал исходный код с сайта разработчика и правильно скомпилировал по инструкции.

Мой default-server.conf выглядит так:

#
# Global configuration that will be applicable for all virtual hosts, unless
# deleted here, or overriden elswhere.
# 

DocumentRoot "/srv/www/htdocs/cgit"

#
# Configure the DocumentRoot
#
<Directory "/srv/www/htdocs">
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs-2.2/mod/core.html#options
    # for more information.
    Options None
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    AllowOverride None
    # Controls who can get stuff from this server.
    Order allow,deny
    Allow from all
</Directory>

<Directory "/srv/www/htdocs/cgit/">
    AllowOverride None
    Options FollowSymlinks +ExecCGI
    DirectoryIndex /
    Order allow,deny
    Allow from all
</Directory>

# Aliases: aliases can be added as needed (with no limit). The format is 
# Alias fakename realname
#
# Note that if you include a trailing / on fakename then the server will
# require it to be present in the URL.  So "/icons" isn't aliased in this
# example, only "/icons/".  If the fakename is slash-terminated, then the 
# realname must also be slash terminated, and if the fakename omits the 
# trailing slash, the realname must also omit it.
#
# We include the /icons/ alias for FancyIndexed directory listings.  If you
# do not use FancyIndexing, you may comment this out.
#
Alias /icons/ "/usr/share/apache2/icons/"

<Directory "/usr/share/apache2/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"

# "/srv/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/srv/www/cgi-bin">
    AllowOverride None
    Options +ExecCGI -Includes
    Order allow,deny
    Allow from all
</Directory>

# UserDir: The name of the directory that is appended onto a user's home
# directory if a ~user request is received.
#
# To disable it, simply remove userdir from the list of modules in APACHE_MODULES 
# in /etc/sysconfig/apache2.
#
<IfModule mod_userdir.c>
    # Note that the name of the user directory ("public_html") cannot simply be
    # changed here, since it is a compile time setting. The apache package
    # would have to be rebuilt. You could work around by deleting
    # /usr/sbin/suexec, but then all scripts from the directories would be
    # executed with the UID of the webserver.
    UserDir public_html
    # The actual configuration of the directory is in
    # /etc/apache2/mod_userdir.conf.
    Include /etc/apache2/mod_userdir.conf
    # You can, however, change the ~ if you find it awkward, by mapping e.g.
    # http://www.example.com/users/karl-heinz/ --> /home/karl-heinz/public_html/ 
    #AliasMatch ^/users/([a-zA-Z0-9-_.]*)/?(.*) /home/$1/public_html/$2
</IfModule>


# Include all *.conf files from /etc/apache2/conf.d/.
#
# This is mostly meant as a place for other RPM packages to drop in their
# configuration snippet.
#
# You can comment this out here if you want those bits include only in a
# certain virtual host, but not here.
#
Include /etc/apache2/conf.d/*.conf

# The manual... if it is installed ('?' means it won't complain)
Include /etc/apache2/conf.d/apache2-manual?conf

Когда я пытаюсь получить доступ к графическому интерфейсу, написав "localhost" в адресной строке браузера, я получаю «Ошибка сервера - ошибка 500».

В журнале ошибок (/ var / log / apache2 / error_log) я вижу эту строку каждый раз, когда обновляюсь:

[Mon Apr 23 13:52:39 2012] [error] [client ::1] Request exceeded the limit of 10 subrequest nesting levels due to probable confguration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

Я пробовал использовать директиву LimitInternalRecursion и устанавливал ее на «500» до бесконечности. Насколько я могу судить, реальной проблемы с директивой нет, просто какой-то бесконечный цикл перезаписи.

Проблема, с которой вы столкнулись, связана с этой строкой здесь:

DirectoryIndex /

По сути, это означает, что когда вы получаете доступ http://localhost, дисплей /- который затем отобразит /, и т.д.. DirectoryIndex следует указать файл; при доступе к каталогу, если этот файл существует, он отображает его. Итак, если у вас было:

DirectoryIndex cgit.cgi

Затем, когда вы получите доступ http://localhost, он будет отображать cgit.cgi (если он существует в этом каталоге). Еще один совет - используйте виртуальные хосты в /etc/apache2/conf.d/*.conf. Например, учитывая код, аналогичный приведенному выше, вы можете иметь следующее в /etc/apache2/conf.d/cgit.conf:

<Directory "/srv/www/htdocs/cgit">
    AllowOverride None
    Options FollowSymlinks +ExecCGI
    Order allow,deny
    Allow from all
</Directory>

Тогда вы можете использовать оригинал DocumentRoot в /etc/apache2/httpd.conf без изменения исходного файла.