У меня работает связка nginx -> apache2 + mysql + postgresql. Поставим memcached, APC (кэшер для php), и несколько модулей для php5.
Для того, чтобы nginx проксировал через локальный адрес (192.168.1.254, например), необходимо добавить в bind наш домен. Это ещё пригодиться для доступа из локальной сети, чтобы запросы не шли через «внешку», а также для однозначной идентификации того, что заходят из «доверенной» сети. Добавляем в файл /etc/bind/named.conf.local наш домен:
zone "zagirov.name" {
type master;
file "/etc/bind/db.zagirov.name";
};
Создаём файл /etc/bind/db.zagirov.name:
$TTL 604800
@ IN SOA zagirov.name. root.zagirov.name. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 192.168.1.254
* IN A 192.168.1.254
Я использую Debian testing (squeeze). Устанавливаем пакеты:
aptitude install apache2 nginx libapache2-mod-php5 php5-cli php5-mysql php5-pgsql php5-xmlrpc php5-gd php5-curl php5-xsl php-apc memcached php5-memcache mysql-server postgresql
Структура папок сайта: logs – логи tmp – папка для временных файлов и файлов сессии www – содержимое сайта
Создадим «эталонную» папку для сайта, которая будет структурой для будущих сайтов
mkdir - p /var/www/etalon/{logs,tmp,www}
chown www-data.www-data /var/www/etalon/{tmp,www}
chmod 0700 /var/www/etalon/{tmp,www}
Открываем в mc папку /var/www/, выбираем папку etalon, нажимает shift+F5, вводим название сайта(zagirov.name). Появилась папка для будущего сайта: /var/www/zagirov.name/ Чтобы логи архивировались, создаём правило для logrotate в файле /etc/logrotate.d/sites:
/var/www/*/logs/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 644 root root
sharedscripts
postrotate
if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
/etc/init.d/apache2 reload > /dev/null
fi
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
Теперь настраиваем nginx. Удаляем все символические ссылки из папки /etc/nginx/sites-enabled Создаём конфигурацию для неописанных доменов: /etc/nginx/sites-available/default_http В случае, когда сайт не описан nginx просто разорвёт соединение, ничего не выдав.
server {
listen 80 default;
server_name _;
access_log off;
server_name_in_redirect off;
return 444;
}
Открываем mc. В левой панели /etc/nginx/sites-enabled, в правой – /etc/nginx/sites-available Выбираем файл default_http и нажимаем комбинацию Ctrl+X, а затем S – это создаст символическую ссылку выбранного файла в папке другой панели. Теперь создадим файл для сайта /etc/nginx/sites-available/zagirov.name:
server {
listen 80;
server_name zagirov.name www.zagirov.name rustam.zagirov.name;
server_tokens off;
access_log /var/www/zagirov.name/logs/nginx.access.log;
error_log /var/www/zagirov.name/logs/nginx.error.log warn;
charset utf-8;
client_max_body_size 1m;
root /var/www/zagirov.name/www;
index index.php index.html index.htm;
location / {
#Реврайт
#try_files $uri $uri /index.php?q=$uri&$args;
proxy_pass http://zagirov.name:81;
include proxy.conf;
}
#Тут перечисляем все пути и файлы статики (картинки, стили)
location ~ /(favicon.ico|wp-content/uploads/|wp-content/themes/openark-blog/(images/|style.css)) {
expires 7d;
}
}
Опять включаем сайт созданием символической ссылки.
Теперь настраиваем apache. Удаляем включённые по дефолту сайты из папки /etc/apache2/sites-enabled Меняем порт с 80 на 81 в файле /etc/apache2/ports.conf:
NameVirtualHost *:81
Listen 81
Создаём конфигурацию для неописанных доменов: /etc/apache2/sites-available/default_http
<virtualhost *:81>
ServerName default
</virtualhost>
Создадим настройки для сайта в файле /etc/apache2/sites-available/zagirov.name:
<virtualhost *:81>
ServerName zagirov.name
ServerAlias www.zagirov.name rustam.zagirov.name
DocumentRoot /var/www/zagirov.name/www
ErrorLog /var/www/zagirov.name/logs/apache2.error.log
CustomLog /var/www/zagirov.name/logs/apache2.access.log combined
AddDefaultCharset UTF8
php_flag magic_quotes_gpc off
php_admin_value open_basedir "/var/www/zagirov.name/www"
php_admin_value upload_tmp_dir "/var/www/zagirov.name/tmp"
php_value session.save_path "/var/www/zagirov.name/tmp"
</virtualhost>
Включаем сайт:
a2ensite zagirov.name
Перезапускаем apache и nginx.
invoke-rc.d apache2 restart
invoke-rc.d nginx restart
Установка рутового пароля для пользователя postgres для PostgreSQL:
su postgres
psql -d template1
ALTER USER postgres WITH PASSWORD 'Str0ng passw0rd';