apache — сделать расширение файла для интерпретации переполнением стека

Я добавил это в мой файл .htaccess:

AddHandler fcgid-script .test

(Я использую FastCGI / VirtualMin / WebMin)

И создал файл test.test с содержимым;

<?php echo "test"; ?>

Это приводит к внутренней ошибке сервера и это сообщение в журнале ошибок:

[Thu Apr 16 14:12:57.631287 2015] [fcgid:warn] [pid 2646] (104)Connection reset by peer: [client xxxx:53595] mod_fcgid: error reading data from FastCGI server
[Thu Apr 16 14:12:57.631402 2015] [core:error] [pid 2646] [client xxxx:53595] End of script output before headers: test.test

Что я делаю неправильно? Я пытался использовать разные имена обработчиков, такие как x-httpd-php или x-httpd-php5, но это ничего не дает.

Я также попробовал:

<FilesMatch "\.test$">
SetHandler fcgid-script
</FilesMatch>

но у него такая же внутренняя ошибка сервера.

20

Решение

Проверено и проверено на работу:

Поскольку вы упомянули, что используете Webmin, я адаптировал свой ответ для Webmin. Вы можете сделать это, отредактировав конфигурацию Apache через оболочку.

Я отмечу, что обычно предпочтительнее редактировать конфигурацию Apache, и в этом случае, вероятно, это неизбежно, так как я не верю, что вы можете сделать такой вид редактирования в .htaccess, Хотя может быть хак, с которым я не знаком, администратор сервера, вероятно, захочет сохранить это в конфигурации apache. Мысли о .htaccess файлы с мошенническими расширениями файлов, летающие по отдельным каталогам, звучат не только медленно, но и крайне небезопасно.

Я установил Apache на Ubuntu 14.04 через VirtualBox. Я добавил Webmin и FastCGI.

Я предпринял следующие шаги:

  1. Войдите в Webmin, перейдите на ваш виртуальный хост.
  2. Нажмите на Редактировать директивы
  3. Добавьте следующее внизу:

<Directory />
#Your SetHandler script here
#(@MrTux's script works here but NOT IN .htaccess)

Require all granted
</Directory>
  1. Нажмите Сохранить
  2. Нажмите «Применить изменения» вверху.
  3. Вы сделали!

Я отмечу, что SetHandler пропускает некоторые заголовки, поэтому, если вы объявите это в .htaccess есть вероятность, что заголовки уже отправлены, что и вызывает вашу ошибку. Снова, .htaccess не является предпочтительным способом установки правил, если у вас есть контроль над вашей системой. В этом случае это может вызвать проблемы с безопасностью в любом случае.

2

Другие решения

Кажется, что модуль FastCGId не знает, как выполнить ваш скрипт — FcgidWrapper директива, кажется, отсутствует (так как ваш PHP-скрипт не имеет притон).

В зависимости от вашего дистрибутива вы должны настроить его вручную, или вы можете настроить существующую директиву, которая уже обрабатывает файлы .php, чтобы также обрабатывать файлы .test (Обычно это следует делать с помощью директивы «SetHandler fcgid-script» и установки / дублирования Директива FcgidWrapper).

Скорректированный пример (взят из https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples):

<FilesMatch "\.test$">
AddHandler fcgid-script .test
</FilesMatch>
Options +ExecCGI
FcgidWrapper /usr/bin/php5-cgi .test

Больше информации и примеров: https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples а также http://tltech.com/info/php-on-fcgid/

Другие проблемы могут быть основаны на разрешениях, например если вы используете suexec, то процесс fastcgid не может записывать в журналы или не может выполнить сценарий оболочки. Здесь было бы очень полезно, если бы вы могли указать, правильно ли выполняются нормальные .php-файлы.

6

Попробуйте использовать это в своем файле htaccess

AddType application/x-httpd-php .test

Смотрите этот вопрос переполнения стека: Проблема с выполнением CGI-скриптов на Apache.

2

Я не парень Fastcgi. я Googled проблема. Я получил 2 аналогичных вопроса, размещенных в virtualmin, Я просто добавляю ответ, опубликованный там.

https://www.virtualmin.com/node/34903

  1. перейдите в virtualmin \ ваш виртуальный сервер \ конфигурация сервера \ настройки сайта \
  2. выберите «Apache mod_php (запустить как пользователь Apache)», затем сохраните
  3. переключите обратно «FCGId (запуск от имени владельца виртуального сервера)» (он запросит запуск сценариев CGI от имени владельца домена)
  4. Сохранить

https://www.virtualmin.com/node/25539

Перейти / home / sitename / fcgi-bin
Используйте команду follpwoing для сброса неизменного флага

«chattr -i php5.fcgi»

Затем удалите каталоги / home / sitename / etc и / home / sitename / fcgi-bin (убедитесь, что все, что не связано с php в etc, сохранено)
С помощью virtualmin вернитесь в режим apache mod_php, а затем обратно в режим FCGId. Сайт теперь должен работать. Не забудьте забить любые файлы / каталоги в public_html, которые были apache to: Обратите внимание, что обычно это оба sitename.

Надеюсь, это поможет вам.

0

Я ставлю под сомнение fcgid-script обработчик. Это не обычный обработчик PHP, даже для FCGI. Обычно вы увидите

<FilesMatch "\.test$">
SetHandler application/x-httpd-php
</FilesMatch>

Или же

<FilesMatch "\.test$">
SetHandler php5-fcgi
</FilesMatch>

Если ни один из этих способов не работает, убедитесь, что PHP FCGI установлен.

0

Все сценарии CGI требуют, чтобы вы добавили строку Shebang вверху сценария.

Так что если вы хотите запустить PHP, вы должны были включить что-то вроде:

#!/path/to/php

В верхней части вашего скрипта, чтобы он работал

0
По вопросам рекламы [email protected]