Архивы: Apache

Uploadify IO error 2038 http 412/413

Есть такой замечательный скрипт мульти-загрузки файликов на сервер uploadify.

Поставил его, вроде все работает. Однако, на больших файлах (более 10 Мбайт, а надо было 25) стала проявлятся ошибка. Файлики не закачивались.

После муторного просева гугла, выяснилос: необходимо прописать в файлике .htaccess такие параметры:

php_value post_max_size 35M

php_value upload_max_filesize 25M

php_value max_execution_time 600

php_value max_input_time 600

php_value memory_limit 128M

Иногда не срабатывает, потому как .htaccess должен лежать в папке с .swf  файлом, а еще лучше прописать в php.ini

С другой стороны, хотя ошибка #2038 (http 412) исчезла, появилась другая — http 413.

Эта проблема уже относится к вебсерверу:

в apache необходимо прописать

LimitRequestBody 25242880

Но у меня стоял еще nginx в качестве frontend, поэтому там необходимо было прописать:

client_max_body_size 25m;

proxy_send_timeout 120;

Теперь вроде все работает. mod_secure на который ссылаются многие по этой теме совершенно не причем.

Установка mod_rpaf

Качаем:
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz

Компилируем:
apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

или

apxs2 -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c для apache 2.2

Подключаем:
LoadModule rpaf_module /lib/httpd/modules/mod_rpaf-2.0.so

Настройка:

<IfMofule rpaf_module>

RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1 192.168.0.1
RPAFheader X-Real-IP(без вот этого не работает)

</IfModule>

Либо

LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf-2.0.so

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 внешниеИПчерезпробелы
RPAFheader X-Forwarded-For
RPAFheader X-Real-IP

Недурно написано тут:

http://tresnet.ru/archives/98

xml и 500 error

В процессе создания одного портала, столкнулся с интересной бедой, которая выпала на мой сервер неожиданно. Когда создали sitemap.xml, оказалось что никому этот файл не доступен, хотя и присутствует на сервере. Сервер отвечал браузеру 500 ошибкой (Error) ссылаясь на какой-то дикий допотопный баг Netscape. Очень долго думая, я пришел к выводу что проблема все-таки не в сервере Apache, а проблема в интерпретаторе xml. В файле mod_php.conf я не обнаружил записи xml, и быстро это исправил.

Однако, не тут то было, даже с этой записью вылетала 500 ошибка…. В интернете информации не было, пришлось включать все возможные логи, чтобы докопаться до сути. В итоге в логе php, была найдена ошибка syntax error unexpected t_string для файла xml в первой строке. Пошарив в гугле, обнаружил что такая беда случается, если включена опция short_tags в настройках php. Так как, в этом случае php являсь обработчиком xml, думает что строка

<?xml version="1.0" encoding="UTF-8"?>

Является скриптом php, а не разметкой xml. Решение проблемы может быть разным. Отключить short_tags, но тогда некоторые движки с корявым кодингом будут сыпать ошибками.

При включенном short_tags можно решить проблему написав вместо

<?xml version=»1.0″?>

так:

<<?= ‘?’; ?>xml version=»1.0″<?= ‘?’; ?>>

Однако, есть более простое решение проблемы. Отправлять заголово с помощью php:

<?php
header("Content-Type: application/xml");
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>

можно даже rewrite правило написать…. если хочется.

Cookietracking или ошибка 500

Немного подстаривая апач, который имеет по умолчанию кучу включенных модулей, встретился с ошибкой в логах Invalid command «cookietracking». Ошибка проявлялась в том, что виртуальный сайт не откликался, а получал ошибку 500.

Лечится это путем включения модуля usertrack_module в основном конфигурационном файле апача. Для большинства простых сайтов этот модуль не нужен, а вот для некоторых плагинов wordpress необходима.

Register_globals опять грабли

Начиная с PHP 4.2, параметр Register_globals по умолчанию находится в выключенном состоянии. Часто это проявляется когда хочешь передать что-то запросом GET скрипту на PHP. Переменные в этом случае не передаются, и можно долго тупить ища проблему там где ее нет, т.е. в коде. Безусловно, отключение глобальных переменных дает возможность обеспечить более современной защитой веб-приложения на сервере. Но все таки, для быстрой работы, грубо говоря песочницы, иногда необходимо чтобы этот параметр был включен. Чтобы не нарушать безопасность всего сервера, можно включить этот параметр в файлике .htaccess с помощью нехитрой строки:
php_flag register_globals on
и для директории в которой он (созданный файлик) находится, параметр будет работать как в старые добрые времена.
PS. Чтобы включить везде эту штуку, правим файл php.ini.

более подробно тут: http://ru.php.net/manual/en/ini.core.php#ini.register-globals