Возвращяясь к localhost...

31.08.2012

Уже при написании статьи меня не покидало ощущение того, что выстроенная схема настройки LAMP, собранная из разных источников информации, окажется неоптимальной. Да, все эти шаги были проверены и был получен описанный результат. Но особенность в том, что это работает для одного сайта. Если нужно работать над многими, что является непременным условием для работы любого вебмастера, проявляются недостатки. Как минимум, для каждого нового сайта нужно создавать настроечный файл в /etc/apache2/sites-available, перезапускать apache...

Но самым главным неудобством описанной в статье схемы стало то, что она позволяет лишь редактировать существующие в папках сайта файлы - при этом не изменяются их владелец и группа. Когда же создаётся новый файл, у него будут владелец и группа собственной учётной записи, а не www-data, как было запланировано. При этом на работе apache это может отразиться совсем не лучшим образом, сайт может перестать открываться из-за недостаточного доступа к файлам.

Я потратил определённое время на то, чтобы развернуть на локальном сервере архив этого сайта. При старте Firefox отображал пустой экран, т.е. ничего. Chrome ругался на Internal Server Error 500. Поначалу я грешил на настройки php.ini, которые отличались от тех, которые были на хостинге. При этом нашёл неплохую расшифровку большинства параметров файла php.ini, так что время, можно сказать, потратил не зря. Однако, дело оказалось совсем не в этих настройках.

Достаточно было заглянуть в лог ошибок apache, расположенный в /var/log/apache2/error.log, чтобы понять в чём проблема. Apache не мог прочитать даже первых подключаемых в index.php файлов, у него не было к ним доступа. Я ведь распаковывал архив сайта под своей учетной записью, поэтому все файлы и папки получили её в качестве владельца и группы, причём у группы по умолчанию права только на чтение. Все заработало лишь после выставления правильной группы и прав доступа. И об этом нужно не забывать, используя такую схему, то есть при каждом создании файла (распаковка из архива - это тоже создание) нужно корректировать права.

Всё это, конечно, неудобно. Мысль о том, что можно изменить пользователя, от имени которого будет запускаться apache c www-data на собственного, посещала меня и раньше. Действительно, веб-сервер в данном случае нужен лишь локальный, поэтому идея персонального apache для собственного пользователя вполне имеет право на существование. И вот в процессе решения проблемы запуска сайта я, перебирая различные варианты, обнаружил в одном из файлов настроек веб-сервера именно то, что мне нужно. В файле /etc/apache2/envvars определяются переменные окружения, и две из них, APACHE_RUN_USER и APACHE_RUN_GROUP как раз и задают пользователя и группу, от имени которых и будет запущен apache. Изменив эти значения на имя собственного пользователя и перезапустив веб-сервер, я одним махом решил все свои проблемы.

Ещё одна проблема, которую нужно было решить на локальном веб-сервере - проблема "чистых ссылок", которые используются Drupal-ом. По умолчанию, модуль apache mod_rewrite не подключен. Подключаются модули с помощью команды a2enmod, аналогично тому, как подключаются виртуальные хосты. Подключим нужный модуль и перезапустимся:
    sudo a2enmod rewrite
    sudo service apache2 restart

Но и после этого "чистые ссылки" ещё не заработают. Оказалось, что настроечные файлы-болванки, описывающие виртуальные хосты содержат следующие строчки:
    AllowOverride    None

В одном файле таких строчек четыре штуки. Для того чтобы mod_rewrite заработал, нужно изменить их на:
    AllowOverride    All

После этого (опять же, не забыв перезапустить apache) у меня "clean-urls" заработали в полной мере.

В заключении поста хочу также порекомендовать способ, благодаря которому не нужно для каждого нового/редактируемого сайта вновь создавать отдельный виртуальный хост на сервере. Я создал один виртуальный хост localweb и каждый новый сайт размещаю в новой папке внутри папки документов DocumentRoot, описанной в настройках виртуального хоста. К примеру, папка виртуального хоста localweb у меня находится в /var/www/localweb. Чтобы создать новый сайт достаточно создать новую папку, например /var/www/localweb/newsite. И всё, теперь новый сайт доступен по адресу localweb/newsite, при этом не нужно ни создавать новый виртуальный хост, ни редактировать файл /etc/hosts.



Добавить комментарий