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

Ошибка Apache 500 при использовании символических ссылок

Вот отрывок из сценария развертывания, который я использую для развертывания приложений php на моем сервере CentOS.

echo "Starting Deployment to $SITE_FOLDER (Relase Directory: $RELEASE_DIR)..."
svn --username=$SVN_USER export $REPOSITORY $DEPLOY_FOLDER/releases/$RELEASE_DIR

echo "CHMOD 755 of Release Directory"
chmod 755 -R $DEPLOY_FOLDER/releases/$RELEASE_DIR

echo "Making Symbolic Link."
ln -nfs $DEPLOY_FOLDER/releases/$RELEASE_DIR/ $DEPLOY_FOLDER/public_html

Я успешно использовал это в аналогичной среде. Я устанавливаю это на новом сервере, и файлы apache отлично обслуживали файлы из public_html, прежде чем я его удалил.

Теперь, когда он обслуживается через символическую ссылку, все файлы php выдают 500 ошибок. Файлы без .php обслуживаются нормально.

Я пробовал использовать каталог как разных пользователей apache и разные разрешения, но ничего не работает. Любые идеи? Заранее благодарим за помощь!

Вам необходимо добавить директиву FollowSymlinks, например:

<Directory /usr/local/httpd/htdocs>
Options Indexes FollowSymLinks
</Directory> 

Видеть http://httpd.apache.org/docs/2.2/mod/core.html#directory

Это может быть что угодно, поэтому лучше всего, если вы проверите журнал ошибок Apache (на 500 вы всегда будете получать некоторую ошибку).

Обычно Apache переходит по ссылке, но может иметь SymLinksIfOwnerMatch (вместо того FollowSymLinks), поэтому убедитесь, что файл и папка, к которым вы обращаетесь (index.php & public_html) имеет правильного владельца (совпадает с владельцем), а права доступа не слишком широки (должно быть 755 для public_html).

Если у вас неправильные разрешения, например 664, вы можете получить эту ошибку:

SoftException в Application.cpp: 256: файл "/home/foo/public_html/index.php" доступен для записи группой

Так что это может помочь:

chown $USER public_html public_html/index.php
chmod 755 public_html

Поскольку вы имеете дело с символической ссылкой, которая всегда имеет 777, но это не имеет значения, поскольку разрешения символьных ссылок никогда не используются. Изменение разрешений папки назначения должно работать нормально.

У меня была такая же проблема, виновником был suPHP. Символьные ссылки всегда равны 777, а suPHP применяет 755 и выдает ошибку 500.