пятница, октября 19, 2012

gpg, nginx, key

При установке nginx (doc) в debian 6 вылезает ошибка:

W: GPG error: http://nginx.org squeeze Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ABF5BD827BD9BF62

Лечится так:

shell> gpg --keyserver hkp://keys.gnupg.net --recv-keys ABF5BD827BD9BF62
gpg: requesting key 7BD9BF62 from hkp server keys.gnupg.net
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 7BD9BF62: public key "nginx signing key " imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
shell> gpg -a --export 7BD9BF62 | apt-key add -
OK

вторник, октября 02, 2012

NAT

Задача: разрешить пользователям локальной сети иметь доступ к ресурсам глобальной сети (Internet).

ОС: CentOS v5.8

Все действия выполняются от пользователя root. Настроим NAT. eth0 - локальная сеть, eth1 - интернет.:

shell> iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
shell> echo 1 > /proc/sys/net/ipv4/ip_forward
shell> /etc/init.d/iptables restart

MASQUERADE - удобно использовать, если у вас динамический IP. Отредактировать в файле /etc/sysctl.conf параметр:

net.ipv4.ip_forward = 1

Применить настройки:

shell> sysctl -p

Если требуется чтоб пользователи могли из локальной сети подключатся к удаленным VPN PPTP серверам тогда потребуется модуль ip_nat_pptp.. Для этого надо отредактировать файл /etc/sysconfig/iptables-config добавив нужные модули:

IPTABLES_MODULES="ip_nat_pptp ip_nat_ftp"

И перезапустить iptables:

/etc/init.d/iptables restart

После этого больше ничего делать не потребуется.

И напоследок минимальный скрипт, который дает доступ только к http/https и разрешает пинговать внешние ресурсы:

!/bin/bash

ipt="/sbin/iptables"
lan="eth0"                      # lan
wan="eth1"                      # wan
subnet="192.168.40.0/22"        # local subnet


# flush all
$ipt -F
$ipt -X
$ipt -t nat -F
$ipt -t nat -X


# policy default
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD DROP

# allow lo
$ipt -A INPUT -i lo -j ACCEPT

# permit established
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# permit ssh
$ipt -A INPUT -p tcp --dport 22 -j ACCEPT

# permit ports
$ipt -t filter -A FORWARD -s $subnet -p tcp -m multiport --dport http,https -j ACCEPT
$ipt -t filter -A FORWARD -s $subnet -p icmp -j ACCEPT

# NAT (lan -> wan)
$ipt -t nat -A POSTROUTING -o $wan -j MASQUERADE
$ipt -t filter -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

# save iptables rules
service iptables save

Этот скрипт надо запускать каждый раз когда вы вносите в него изменения. После всех изменений сами правила для iptables будут сохранены в /etc/sysconfig/iptables. Именно его система будет загружать при загрузке системы.


вторник, сентября 25, 2012

Установка ipt_NETFLOW v1.8 в CentOS 5.8 (PAE)


Сенсор ipt_NETFLOW считается самым быстрым, в прямом смысле этого слова, для отдачи статистики по протоколу netflow. Систему не грузит, работает молненосно :)

ВЕРСИЯ СИСТЕМЫ

Система centos 5.8:

shell> uname -a
Linux temp.test.local 2.6.18-308.13.1.el5PAE #1 SMP Tue Aug 21 17:50:26 EDT 2012 i686 i686 i386 GNU/Linux

УСТАНОВКА ИНСТРУМЕНТАРИЯ

Устанавливаем набор инструментов и исходники ядра:

shell> yum install iptables-devel gcc gcc-c++ kernel-headers kernel-PAE-devel make

Если у вас процессор без PAE то надо указать kernel-devel.

ИСХОДНИКИ ipt_NETFLOW

Загружаем исходники модуля:

shell> wget http://citylan.dl.sourceforge.net/project/ipt-netflow/ipt-netflow/ipt_netflow-1.8.tgz
shell> tar xf ipt_netflow-1.8.tar
shell> mv ipt_netflow-1.8 /usr/local/src/
shell> cd /usr/local/ipt_netflow-1.8/

КОМПИЛЯЦИЯ

Начинаем собирать:

shell> ./configure
(...)
  Now run: make all install
shell> make all install
make -C /lib/modules/2.6.18-308.13.1.el5PAE/build M=/usr/local/src/ipt_netflow-1.8 modules_install
make: *** /lib/modules/2.6.18-308.13.1.el5PAE/build: Нет такого файла или каталога.  Останов.
make: *** [minstall] Ошибка 2

Покавырявшись немного стало понятно - нет симлинка на исходники ядра:

shell> ln -s /usr/src/kernels/2.6.18-308.13.1.el5PAE-i686/ /lib/modules/$(uname -r)/build

Проверяем привильно ли все:

shell> file /lib/modules/$(uname -r)/build
/lib/modules/2.6.18-308.13.1.el5PAE/build: symbolic link to `/usr/src/kernels/2.6.18-308.13.1.el5PAE-i686/'

И опять собираем моудль:

shell> ./configure
(...)
  Now run: make all install
shell> make all install
(...)
shell> depmod

Проверяем установился ли модуль:

shell> modinfo ipt_NETFLOW
filename:       /lib/modules/2.6.18-308.13.1.el5PAE/extra/ipt_NETFLOW.ko
version:        1.7.2
description:    iptables NETFLOW target module
author:         
license:        GPL
srcversion:     43F3959209576499C33AB98
depends:        x_tables
vermagic:       2.6.18-308.13.1.el5PAE SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
parm:           destination:export destination ipaddress:port (charp)
parm:           inactive_timeout:inactive flows timeout in seconds (int)
parm:           active_timeout:active flows timeout in seconds (int)
parm:           debug:debug verbosity level (int)
parm:           sndbuf:udp socket SNDBUF size (int)
parm:           hashsize:hash table size (int)
parm:           maxflows:maximum number of flows (int)
parm:           aggregation:aggregation ruleset (charp)

Опа! А версия то 1.7.2.

АВТОЗАГРУЗКА МОДУЛЯ

Раз модуль относится к iptables то пусть он его и подгружает. Логично? Логично. Но не рабоатет. Редактируем файл /etc/sysconfig/iptables-config, находим там параметр IPTABLES_MODULES и приводим его к такому виду:

IPTABLES_MODULES="ip_nat_pptp ip_nat_ftp ipt_NETFLOW"

У меня тут еще кое что есть, так что ненужное можно удалить. Создаем файл /etc/modprobe.d/ipt_netflow.conf с содержимым:

options ipt_NETFLOW hashsize=160000 destination=127.0.0.1:8818

Т.е. сенсор ipt_NETFLOW будет отсылать на 127.0.0.1:8818 данные о трафике. Именно на этот IP:PORT надо вешать коллектор. Перезапускаем систему и ... Не работает. Модуль как бы загружен, но он не подвязался к сетевому интерфейсу lo. Проблема в том, что iptables загружается немного раньше, чем система начинает грузить сеть:

shell> ll /etc/rc3.d/ |grep iptables
lrwxrwxrwx 1 root root 18 Сен 17 14:45 S08iptables -> ../init.d/iptables
shell> ll /etc/rc3.d/ |grep network
lrwxrwxrwx 1 root root 17 Сен 19 13:19 S10network -> ../init.d/network

По цифаркам видно, что грузится первее. iptables загружается первым, интерфейса lo еще нет, в dmesg попадает сообщение remove destination 127.0.0.1:8818. Все пропало...

Когда встала проблема я полез в сеть искать решение. И все что я нашел было как у меня. Т.е. все запускали ipt_NETFLOW как я, через конфиг iptables. Такое чувство, что никто никогда не перезагружает сервера (я ради теста перезагружал :)). Возможно проблема в чем-то другом.

Заставить загружать модуль номально удалось лишь указав загрузку через /etc/rc.local:

shell> echo modprobe ipt_NETFLOW >> /etc/rc.local

ПРОВЕРКА РАБОТЫ СЕНСОРА

Проверить работу можно так:

shell> cat /proc/net/stat/ipt_netflow 
Flows: active 14 (peak 100 reached 0d0h5m ago), mem 0K
Hash: size 160000 (mem 625K), metric 1.0, 1.0, 1.0, 1.0. MemTraf: 304 pkt, 15 K (pdu 77, 4004).
Timeout: active 1800, inactive 15. Maxflows 2000000
Rate: 286 bits/sec, 0 packets/sec; Avg 1 min: 1630 bps, 0 pps; 5 min: 1419 bps, 0 pps
cpu#  stat: , sock: , traffic: , drop: 
Total stat:      1   1087   1216,    0    0    0    0, sock:     42 0 0, 56 K, traffic: 2303, 0 MB, drop: 0, 0 K
cpu0  stat:      0      0      0,    0    0    0    0, sock:      0 0 0, 0 K, traffic: 0, 0 MB, drop: 0, 0 K
cpu1  stat:      1   1087   1216,    0    0    0    0, sock:     42 0 0, 56 K, traffic: 2303, 0 MB, drop: 0, 0 K
sock0: 127.0.0.1:8818, sndbuf 110592, filled 0, peak 0; err: sndbuf reached 0, other 0

Незабудте убрать модуль из конфига iptables (/etc/sysconfig/iptables-config).

Все настроено. Осталось настроить правила в iptables (пример есть в исходниках - README) и настроить какой нить коллектор для принятия данных отсылаемых сенсором.

UPDATE 10/04/2012
Есть еще один способ загружать ipt_NETFLOW во время загрузки системы. В файл /etc/sysctl.conf добавить вот эти параметры:

net.netflow.flush = 0
net.netflow.maxflows = 2000000
net.netflow.aggregation =
net.netflow.destination = 127.0.0.1:8818
net.netflow.sndbuf = 110592
net.netflow.hashsize = 160000
net.netflow.debug = 0
net.netflow.inactive_timeout = 15
net.netflow.active_timeout = 1800

А в файл /etc/sysconfig/iptables-config отредактировать параметр:

IPTABLES_MODULES="ipt_NETFLOW"

Такой способ более правильный


пятница, августа 17, 2012

Проверка состояния диска в linux

Предположим есть подозрения - диск в системе стал работать плохо (битые файлы, глюки системы). Что делать? Первое и самое простое - проверить состояние дисков. Посмотреть SMART диска можно довольно просто:

shell> smartctl --all /dev/sda
(...)

В SMART атрибутах надо обратить внимание на важные параметры:

Raw_Read_Error_Rate
Reallocated_Sector_Count
Current_Pending_Sector

Первый атрибут покажет как часто возникают ошибки при чтении данных. Второй параметр покажет сколько раз была произведена операция remapping (битый сектор помечается как не рабочий). А третий указывет сколько секторов уже накрылись.

Кстати, некоторые производители добавляют свои атрибуты в SMART или называют по свойму. Бывает еще, на одном диске привешение показателя какого-то атрибута норма, а у другого производителя - кретическое значение. Но все более менее стандартизированно, проблем должно быть минимум.

Проверить поверхность диска на bad блоки можно командой:

shell> badblocks -v /dev/sdb
(...)

Лучше всего в начале посмотреть SMART, проверить диск и еще раз сравнить SMART. Если атрибуты выше начнуть увеличиваться - значит диск надо срочно менять.

вторник, июля 24, 2012

Установка zabbix agent на synology

Работу сетевого хранилища можно контролировать через SNMP протокол. Параметры, которые можно контролировать, великое множество. Но это проще сказать, чем сделать. Если учесть, что производители еще и сами добавляют свои MIB в устройства, то разобираться в выдаваемых параметрах можно очень долго.

Но славо богу есть системы мониторинга. Я пользуюсь Zabbix. В нутри сетевых хранилищ Synology установлен linux. В систему можно установить менеджер пакетов - ipkg. С помощью этого менеджера можно установить различные пакеты. Zabbix среди пакетов нет. Потому будем устанавливать из исходников.

# ipkg install gcc make bison flex gconv-modules adduser
(...)
# cd
# mkdir soft
# cd soft/
# wget http://citylan.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.0.1/zabbix-2.0.1.tar.gz
# tar zxf zabbix-2.0.1.tar.gz
# cd zabbix-2.0.1
# ./configure --enable-agent

Скорее всего выскочит ошибка:

checking for ICONV support... no
configure: error: Unable to find iconv.h "no"

Делаем так:

# ln -s /opt/include/ /usr/include

Можете еще убедится что файл iconv.h находится именно в /opt/include/:

# find / -name iconv.h

Собираем и устанавливаем:

# make
# make install

Сразу создадим группу и пользователя для работы сервиса:

# addgroup zabbix
# adduser -G zabbix zabbix

И создадим каталог для логов:

# mkdir /var/log/zabbix/
# msk-soft-srv> chown zabbix:zabbix /var/log/zabbix/

Редактируем конфиг /usr/local/etc/zabbix_agentd.conf:

PidFile=/tmp/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
Server=192.168.42.4
ListenIP=192.168.41.32
ListenPort=10050
SourceIP=192.168.41.32

(Некоторые параметры не обязательны.)

Пришлось написать init скрипт. Создать файл /usr/local/etc/rc.d/zabbix_agentd.sh со след. содержимым:

#!/bin/sh

# author: Konstantin Kruglov
# email: kruglovk@gmail.com
# www: k0st1an.blogspot.com
# description: init script for use on synology devices
# version: 0.1, 07/24/2012
# usage:
# cp zabbix_agend.sh /usr/local/etc/rc.d/
# chmod +x /usr/local/etc/rc.d/zabbix_agend.sh
########################################################

ConfFile="/usr/local/etc/zabbix_agentd.conf"

if [ -e ${ConfFile} ]; then
 if [ -r ${ConfFile} ]; then
  source ${ConfFile}
 else
  echo "Config file (${ConfFile}: problem read)"
  exit 1
 fi
else
 echo "Config file (${ConfFile} not found)"
 exit 1
fi


Status=`pidof zabbix_agentd > /dev/null && echo $?`

case "$1" in

start)
 echo -n "Start zabbix_agentd..."

 if [ -z "${Status}" ]; then
  /usr/local/sbin/zabbix_agentd -c ${ConfFile}

  if [ "${?}" = "0" ]; then
   sleep 1
   echo " ok"
   exit 0
  else
   sleep 1
   echo " false"
   exit 1
  fi
 else
  echo "Zabbix already run"
  exit 1;
 fi
 ;;
stop)
 echo -n "Stop zabbix_agentd..."

 if [ -z ${Status} ]; then
  echo " not runing"
  exit 1
 fi

 if [ -e "${PidFile}" ]; then
  kill `cat ${PidFile}`
  
  if [ "${?}" = "0" ]; then
   sleep 1
   echo " ok"
   exit 0
  else
   sleep 1
   echo " false"
   exit 1
  fi
 fi
 ;;
status)
 echo -n "Status zabbix_agentd..."

 if [ -z ${Status} ]; then
  echo " not runing"
 else
  echo " runing"
 fi

 exit 0
 ;;
*)
 echo "Usage: ${0} {start|stop|status}"
 exit 1
 ;;
esac

(версия поновее)

На сервере мониторинга:

# zabbix_get -s 192.168.41.32 -k system.cpu.util[,system,]
0.938541

P.S.
Скрипт не доделан. Есть желание сделать перезапуск сервиса и дотестировать до конца. Пока проблем не замечено. У вас есть право использовать такие прифексы при компиляции как --prefix, --sysconfdir (дока)

среда, июля 04, 2012

Установка php-fpm + mysql + phpMyAdmin

Все действия проводились на системе centos 5.8, с последними обновлениями:

# uname -a
Linux mska-ats-srv4 2.6.18-308.8.2.el5PAE #1 SMP Tue Jun 12 10:37:15 EDT 2012 i686 athlon i386 GNU/Linux

Предположим у вас уже есть настроенный и рабочий nginx.

# yum --enablerepo=remi install mysql-server php-fpm php-mysql php-mcrypt php-mbstring


mysql

Указываем чтоб mysqld запускался автоматически при загрузки системы:

# chkconfig mysqld on

При первом запуске:

# /etc/init.d/mysqld start

Выдается информация как прописать пароль root'а:

# mysqladmin -u root password


php-fpm

После установки php-fpm в конфигурационном файле /etc/php-fpm.d/www.conf изменить след. значения вот так:

user = nginx
group = nginx

Теперь php-fpm будет запускаться от имени пользователя nginx. Далее:

# chkconfig php-fpm on
# /etc/init.d/php-fpm start

Первая команда указывает, что нужно запускать php-fpm при запуске системы. Вторая стартует php-fpm.


nginx

Конфигурационный файл для сайта phpMyAdmin:

server {
    listen       80;
    server_name  db.domain.ru;
    root         /var/local/httpd/domain.ru/db/public_html;

    location / {
        index  index.php;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}

Рестартнем nginx:

# /etc/init.d/nginx restart


phpMyAdmin

Далее надо загрузить последную версию phpMyAdmin и распаковать:

# cd /var/local/httpd/domain.ru/db/public_html/
# wget http://citylan.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.5.1/phpMyAdmin-3.5.1-all-languages.tar.gz
# tar zxf phpMyAdmin-3.5.1-all-languages.tar.gz
# mv phpMyAdmin-3.5.1-all-languages/* ./
# rm -fr phpMyAdmin-3.5.1-all-languages*
# mv config.sample.inc.php config.inc.php

Рекомендуется в конфигурационном файле config.inc.php исправить значение параметра $cfg['blowfish_secret'] на свое. Что нить длиной на 16 - 20 цифр и букв.

Теперь пробуем зайти на db.domain.ru, должно появиться окно Welcome to phpMyAdmin с вводом логина и пароля.


Errors

Если при заходе на страницу показывается сообщение - file not found, добавить в /etc/nginx/fastcgi_params:

fastcgi_param   SCRIPT_FILENAME         $request_filename;

Или проверить есть ли такая запись. При заходе на странцу может появляется сообщение:

phpMyAdmin - Error
Cannot start session without errors, please check errors given
in your PHP and/or webserver log file and configure your PHP
installation properly.

Надо проверить в /etc/php.ini значение параметра session.save_path и передать права на каталог nginx:

# cat /etc/php.ini | grep session.save_path
;     session.save_path = "N;/path"
;     session.save_path = "N;MODE;/path"
session.save_path = "/var/lib/php/session"
;       (see session.save_path above), then garbage collection does *not*
# mkdir /var/lib/php/session
# chown nginx:nginx /var/lib/php/session

UP: 09/26/2012
phpMyAdmin
После захода в админку phpmyadmin, снизу будет красная надпись, что-то там про blowfish_secret. Это важный параметр, отвечающий за сохранность сессии. В каталоге с phpmyadmin надо найти файл config.sample.inc.php, открыть его и отредактировать параметр $cfg['blowfish_secret']:

$cfg['blowfish_secret'] = 'kdsfjffjl2j294h1o4hfiyf892';

Как-то так. И переименовать файл:

mv config.sample.inc.php config.inc.php

mysql

Можно немного обезопасить сервер mysql если повесить его на интерфейс lo:

# echo bind-address=127.0.0.1 >> /etc/my.cnf

Тогда запросы mysql будет обслуживать только от локальных приложений.

понедельник, июня 18, 2012

Настройка vsftpd с виртуальными пользователями на Cent OS 5.8

Все действия проводились на centos 5.8:

# uname -a
Linux vm-centos58.localdomain 2.6.18-308.8.2.el5 #1 SMP Tue Jun 12 09:57:26
EDT 2012 i686 i686 i386 GNU/Linux

Установке подлежит довольно старая версия из официального репозитория.

# yum info vsftpd
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
...    
Available Packages
Name       : vsftpd
Arch       : i386
Version    : 2.0.5
Release    : 24.el5_8.1
Size       : 144 k
Repo       : updates
Summary    : vsftpd - Very Secure Ftp Daemon
URL        : http://vsftpd.beasts.org/
License    : GPL
Description: vsftpd - это 'Очень защищенный демон FTP' (Very Secure FTP daemon).
           : Вообще то он был создан на скорую руку.

Забавное описание :)

Итак. На данный момент версия ушла долеко вперед. Можно поставить поновее. Можно собрать из исходников. Но пока ставим из того, что есть в официальном репозитории. Ибо для ftp этого более чем достаточно.

# yum install vsftpd

Конфигурационные файлы лежат в /etc/vsftpd. Приводим vsftpd.conf к такому виду:

xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
log_ftp_protocol=YES
userlist_enable=YES
max_clients=15
max_per_ip=3
use_localtime=YES
nopriv_user=ftp
listen=YES
anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
write_enable=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/local/ftpd/$USER
chroot_local_user=YES
hide_ids=YES
#pasv_min_port=50555
#pasv_max_port=51555
# 775 for new dirs & 664 for new files
local_umask=002

Чтоб понять для чего нужна каждая опция прошу прочесть документацию. На данный момент нас интересует только опция local_root, которая отвечает за то, что каждый пользователь попадет в свой каталог. В ней указан польный путь к папке с данными ftp пользователей. $USER - это логин ftp пользователя. Папку, по указанному пути, нужно будет создвать при добавлении нового пользователя.

Теперь надо доустановить недостающие пакеты:

# yum install apr apr-util

Загрузить два пакета:

# wget http://www.k0st1an.ru/download/linux/rpm/httpd-tools-2.2.22-1.el5.i386.rpm
# wget http://www.k0st1an.ru/download/linux/rpm/pam-pam_pwdfile-0.99-2.i386.rpm
# rpm -ih httpd-tools-2.2.22-1.el5.i386.rpm
# rpm -ih pam-pam_pwdfile-0.99-2.i386.rpm

Теперь в /etc/vsftpd надо создать файла базы данных и добавить пользователя:

# touch virtual_users.db
# htpasswd -d virtual_users.db test
New password: 
Re-type new password: 
Adding password for user test

Теперь надо привести к нужному виду файл /etc/pam.d/vsftpd:

auth required pam_pwdfile.so pwdfile /etc/vsftpd/virtual_users.db
account required pam_permit.so

И последний штрих. Надо чтоб vsftpd поднимался автоматически после загрузки системы. Для этого надо использовать команду chkconfig и стартуем сервис:

# chkconfig vsftpd on
# /etc/init.d/vsftpd start

вторник, июня 12, 2012

Установка и простая настройка nginx на centos 5.8 (быстрый запуск)


В centos в качестве менеджера пакетов используется yum. Потому зададим официальный репозиторий nginx. Можно собрать последнюю версию из исходников. Можно поискать готовый пакет.

В файл /etc/yum.repo.d/nginx.repo (который надо создать) записать следующее содержимое:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

После чего можно через yum посмотреть информацию о пакете nginx и сразу установить:

# yum info nginx
...
# yum install nginx

После успешной установки надо отредактировать конфигурационный файл сервера и настроить хост. В /etc/nginx/nginx.conf надо отредактировать значение одного параметра:

include /etc/nginx/conf.d/*.conf.l;

Эта опция отвечает за загрузку конфигов под каждый конкретный сайт. Можно разделить конфиги на разные каталоги. Например в одном держать конфиги, а в другом симлинки на те, что следует подгружать. В данном конкретном случае все будет в одном каталоге и те конфиги, что нужно загружать обозначены ".l".

Далее следуем в каталог /etc/nginx/conf.d и делаем копию default.conftest.ll.conf.l. Редактируем до такого вида:

server {
    listen  80;
    server_name  test.ll;
    root /var/local/httpd/test.ll/public_html;
    autoindex on;
    autoindex_localtime on;
    autoindex_exact_size on;

    #charset koi8-r;
    access_log  /var/log/nginx/test.ll.access.log  main;

    location / {
        index  index.html;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

То что выделено жирным не обязательно. Это всего навсего может, на первых парах, упростить работу. Эти опции позволяют отобразить содержимое каталога в браузере, когда файла index.html нет (первая опция). Вторая опция указывает, что нужно отображать время в локальной времени :] Третья опция указывает на то, что нужно размер файла отображать в удобном виде (KB, MB, GB). Каталог в опции root нужно создать. В праве указать расположение сайта в другом месте.

После всего этого запустить nginx:

# /etc/init.d/nginx start

Всё.