пятница, 29 марта 2013 г.

Один конфиг Nginx для работы с кучей разных сайтов


server {
    listen 80 default; # этот конфиг - умолчательный для 80 порта
    server_name _;  # хитрый ключик, обозначающий, что этот конфиг применим для любого сайта

    set $sathost $host;  # В sathost будет лежать имя сайта. Так же должна называться директрия с сайтом
    # убираем www
    if ( $host ~ ^(www\.)?(.+)$ ) {
        set $sathost $2;
    }
 
    root   /var/www/all/$sathost; # конень сайта определяем автоматически
    index index.php index.html index.htm; # в каком порядке искать индексные файлы

    access_log off;
# access_log /var/log/nginx/all/$sathost_access.log; # такая комбинация, к сожалению, не работает. жду пока допилят
    error_log  /var/log/nginx/all.error.log error;

    location / {   # правила ниже применяются для любых запросов
                if (!-d /var/www/all/$sathost) { # если не нашли директорию с именем запрошенного сайта
        # переадресуем на сайт под названием undefined, который лежит в /all/undefined
        set $sathost undefined;
        rewrite ^ /index.php last;
                }

        # начало rewrite
        set $rflag 1;   # так как логического объединения в условных выражениях нет, то вводим переменную для сложения двух условий. flag указывает на необходимость сделать переадресацию
        if (-e $request_filename) { # если есть запрошенный файл, то переадресация не нужна
            set $rflag 0;
        }
        if (!-f /var/www/all/$sathost/index.php) { # если нет index.php в корне сайта, то переадресация тоже не нужна, ибо некуда
            set $rflag 0;
        }
        if ($rflag = 1) {  #
            rewrite  ^ /index.php  last;
        }
        # конец rewrite

        if (-f $request_filename) { # для статических файлов включаем кэш на час
            expires  1h;
            break;
        }
    }

    location ~ \.php$ { # этот блок сработает при запросе .php файлов
        root   /var/www/all/$sathost;
        fastcgi_pass   127.0.0.1:9000; # тут висит php-fpm
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/all/$sathost/$fastcgi_script_name;
        include fastcgi_params;
        break;
    }

    location ~ \.htm(l?)$ { # этот блок работает при вызове .html или .htm
        # если в корне сайта лежит файл «.parse_html», то обрабатываем HTML как PHP
        fastcgi_param  SCRIPT_FILENAME  /var/www/all/$sathost/$fastcgi_script_name;
        include fastcgi_params;
        if (!-f $request_filename) { # даже если запросили .html, это не значит что он у нас есть
            # соотвественно, если файла нет, то тоже делаем rewrite
            rewrite  ^ /index.php  last;
        }
        if (-f /var/www/all/$sathost/.parse_html) { # проверяем на наличие метки
            # если в директории сайта лежит ключевой файлик, то все html обрабатываем как php
            fastcgi_pass   127.0.0.1:9000;
        }
        break;
    }
 

    location ~ /\.ht { # в файлах, начинающихся на «.ht» могут лежать пароли или оставшиеся настройки от Апача - отдавать это ни к чему.
        deny  all;
    }
}


Nginx и два сайта на одном домене



httpd -v
Server version: Apache/2.2.23 (FreeBSD)
Server built:   Dec 18 2012 10:11:02



nginx -V
nginx version: nginx/1.2.6

Конфиг апача (/usr/local/etc/apache22/inc):


NameVirtualHost *:88

    ServerAdmin root@mail.org.ua
    DocumentRoot "site-directory"
    ServerName sitename.org.ua
    ServerAlias www.sitename.org.ua
    ErrorLog "/var/log/apache/sitename.org.ua.log"
    CustomLog "/var/log/apache/sitename.org.ua.access.log" common



Аналогично для второго сайта:



    ServerAdmin root@mail.org.ua
    DocumentRoot "site2-directory"
    ServerName sitename2.org.ua
    ErrorLog "/var/log/apache/sitename2.org.ua.log"
    CustomLog "/var/log/apache/sitename2.org.ua.access.log" common


Конфиг nginx (/usr/local/etc/nginx/inc/):
server {
        listen       80;
        server_name  sitename.org.ua;
location / {
proxy_pass         http://127.0.0.1:88/;
proxy_redirect     off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size       100m;
client_body_buffer_size    128k;
proxy_connect_timeout      90;
proxy_send_timeout         90;
proxy_read_timeout         90;
proxy_buffer_size          4k;
proxy_buffers              4 32k;
proxy_busy_buffers_size    64k;
proxy_temp_file_write_size 256k;
}

location ~* ^.+.(jpeg|jpg|ico|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
root  /usr/local/www/site-directory/;
        }
}

Аналогично для второго сайта:

server {
        listen       80;
        server_name  sitename2.org.ua;
location / {
proxy_pass         http://127.0.0.1:88/;
proxy_redirect     off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size       100m;
client_body_buffer_size    128k;
proxy_connect_timeout      90;
proxy_send_timeout         90;
proxy_read_timeout         90;
proxy_buffer_size          4k;
proxy_buffers              4 32k;
proxy_busy_buffers_size    64k;
proxy_temp_file_write_size 256k;
}

location ~* ^.+.(jpeg|jpg|ico|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
root  /usr/local/www/site2-directory/;
        }
}



Webmin – юзерфрендли управление FreeBSD


Operating system FreeBSD 9.0
Webmin version 1.610
Kernel and CPU FreeBSD 9.0-RELEASE on amd64


Webmin — это программный комплекс, позволяющий администрировать операционную систему через веб-интерфейс, в большинстве случаев, позволяя обойтись без использования командной строки и запоминания системных команд и их параметров. Используя любой браузер, администратор сервера может создавать новые учётные записи пользователей, почтовые ящики, изменять настройки служб и сервисов, например : веб-сервера Apache, DNS. Однако, в некоторых случаях необходимо знание операционной системы и редактирование конфигурационных файлов вручную. Кроме того, не все возможности операционной системы и не все программы можно конфигурировать через интерфейс Webmin, например nginx пока не входит в базовый набор.

Webmin состоит из простого веб-сервера и большого количества скриптов (>500), которые собственно и осуществляют связь между командами администратора через веб-интерфейс и их исполнением на уровне операционной системы и прикладных программ. Webmin написан полностью на языке Perl и не использует никаких дополнительных нестандартных модулей. Простота, лёгкость и быстрота выполнения команд — одно из самых больших преимуществ данной панели управления.
Другое важное преимущество — возможность исправлять конфигурационные файлы вручную, так как Webmin не «портит» конфигурационные файлы, в отличие от некоторых других панелей управления, и следует, как правило, политикам дистрибутивов по конфигурированию программ.
Данная панель управления бесплатно на условиях лицензии BSD распространяется для коммерческого и некоммерческого использования. Авторы этой программы позволяют всем желающим не только бесплатно использовать программу, но и изменять её по своему усмотрению.

wia wiki

Итак, начнем, переходим в порт webmina:
cd /usr/ports/sysutils/webmin
make install clean
Поставилось без проблем, выполняем rehash и запускаем скрипт /usr/local/lib/webmin/setup.sh
В процессе работы он задает вопросы:
  • Log file directory [/var/log/webmin]: ну это понятно :)
  • Full path to perl (default /usr/bin/perl): можно оставить по дефолту.
  • Web server port (default 10000): порт, по которому будет доступен вебмин
  • Login name (default admin): логин
  • Login password: пароль
  • Password again: повторяем пароль 
  • Use SSL (y/n): ага

Добавляем в /etc/rc.conf строку webmin_enable="YES" .  Старт по адресу
/usr/local/etc/rc.d/webmin start