Конфигурирование Web сервера

Поддерживаются все распространенные Web сервера: IIS (isapi_fcgi.dll), nginx, lighttpd, apache.

WebDAO поддерживает режимы cgi, FastCGi, mod_perl. Наиболее производительным является режим FastCGI.

В описании используются следующие исходные условия.

Таблица 3.2. Исходные данные

Наименование параметраЗначение
Web root/usr/zag/www
Временный каталог/tmp
Каталог для записи логов/var/log/
Наименование доменаexample.org
Расположение файлового сокета для FastCGI сервера/tmp/myapp.socket

Настройка Standalone сервера FastCGI

В состав пакета WebDAO входит скрипт wd_fcgi.fpl ( /usr/local/bin/wd_fcgi.fpl for example). Для запуска самостоятельного сервера используется следующая строка :

    #!/bin/sh
    /usr/local/bin/wd_fcgi.fpl -d -l /tmp/myapp.socket -n 5 -maxreq 1000

Для получения справки используется параметр --help:

        /usr/local/bin/wd_fcgi.fpl --help

Вывод:

    Usage:
    wd_fcgi.fpl [options]
        -d -daemon     Daemonize the server.
        -p -pidfile    Write a pidfile with the pid of the process manager.
        -l -listen     Listen on a socket path, hostname:port, or :port.
        -n -nproc      The number of processes started to handle requests.
        -m -maxreq     Number of request before process will be restarted 
                       -1 - unlimited. (defailt: -1)

nginx ( standalone FastCGI)

  • Простой пример

    server {
        listen       80;
        server_name  example.org;
        charset utf-8;
        access_log  /var/log/nginx/example.org-access.log ;
	error_log  /var/log/nginx/example.org-error.log  debug;
        root   /home/zag/www/;
        location ~ / {
            include        fastcgi_params;
            fastcgi_pass   unix:/tmp/webdao.sock;
            fastcgi_param wdSession WebDAO::Sessionco;
            fastcgi_param wdIndexFile index.xhtm;
        }
    }
  • Пример с использованием собственного пакета основного модуля

Для примера пусть используется в качестве имени модуля: MySite. Конструктор этого класса в качестве параметра принимает config - путь к конфигурационному файлу.

    server {
        listen       80;
        server_name  example.org;
        charset utf-8;
        access_log  /var/log/nginx/example.org-access.log;
	error_log  /var/log/nginx/example.org-error.log  debug;
        root   /home/zag/www/;
        #sample for static data
        #location ~* ^/(js|imag|img|data|data2|css|static|images)/ {
        #}
        location ~ / {
            include        fastcgi_params;
            fastcgi_pass   unix:/tmp/webdao.sock;
            fastcgi_param wdSession WebDAO::Sessionco;
            fastcgi_param wdIndexFile index.xhtm;
    	    fastcgi_param wdEngine MySite;
	    fastcgi_param wdEnginePar config=/home/zag/www/mysite.ini;
        }
    }

apache (static + standalone FastCGI)

Возможны два режима. Когда используется собственный менеджер FCGI( FastCgiServer ) и кода подключение производится через FCGI сокет.

Требуется установка модуля mod_fastcgi:

        mod_fastcgi-2.4.2

В глобальной части httpd.conf требуется добавить одну из необходимых секций:

  • 1 Static (FastCgiServer)

     <LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so
        <IfModule mod_fastcgi.c>
        AddHandler fastcgi-script fpl fcgi
        FastCgiServer /usr/local/bin/wd_fcgi.fpl \
            -idle-timeout 3000 -flush -restart-delay 5 \
            -initial-env wdFCGIreq=1000 -processes 4 \
    </IfModule>
  • 2 Standalone ( FastCgiExternalServer )

     <LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so
      <IfModule mod_fastcgi.c>
      # Connect via net socket
      # FastCgiExternalServer /usr/local/bin/wd_fcgi.fpl -host localhost:60000
       FastCgiExternalServer /usr/local/bin/wd_fcgi.fpl -socket /tmp/myapp.socket
      </IfModule>

Настройки секции VirtualHost:

 <VirtualHost>
    DocumentRoot /usr/zag/www
    ServerName example.org
    ErrorLog /var/log/example.org-error_log
    CustomLog /var/log/example.org-access_log common
    SetEnv wdEngine WedDAO::Kern
    SetEnv wdIndexFile index.xhtml
    SetEnv wdSession WebDAO::Sessionco
    #for use external storage
    #SetEnv wdStore WebDAO::Store::MLDBM
    #SetEnv wdStorePar path=/tmp
    RewriteEngine on
    AddDefaultCharset UTF-8
    RewriteCond     %{HTTP:Authorization}   ^(.*)$ [NC]
    RewriteRule     /.*             -       [E=HTTP_AUTHORIZATION:%1]
    <IfModule mod_fastcgi.c>
        RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
        RewriteRule ^/(.*) /usr/local/bin/wd_fcgi.fpl?$1 [QSA]
    </IfModule>
 </VirtualHost>

lighttpd (standalone FastCGI)

    var.engine = "ZagSite"
    var.defaults = (
        "WD_SESSION"=>"WebDAO::Sessionco",
        "WD_INDEXFILE"=>"index.xhtm"
    )
    $HTTP["host"] == "example.org" {
    server.document-root    = "/home/zag/www/"
    setenv.add-environment =  var.defaults 
    }
    #use custom root class - MySite
    $HTTP["host"] == "example.com" {
    server.document-root    = "/home/zag/www/"
    setenv.add-environment =  var.defaults + (  
        "WD_ENGINE" => "MySite",
        "WD_ENGINE_PAR"=>"config=/home/zag/www/mysite.ini" 
        )
    }
    #skip static 
    $HTTP["url"] !~ "^/(js|imag|img|css|static)" {
       fastcgi.server = (
        "" => (
            "" => (
                "socket"      => "/tmp/webdao.sock",
                "check-local" => "disable"
                    )
                )
            )
    }

Настройка cgi сервера

Для работы WebDAO как CGI приложения используется скрипт wd_cgi.pl.

apache ( CGI )

 <VirtualHost *>
    DocumentRoot /usr/zag/www
    ServerName example.org
    ErrorLog /var/log/example.org-error_log
    CustomLog /var/log/example.org-access_log common
    
    SetEnv wdIndexFile index.xhtm
    SetEnv wdEngine WebDAO::Engine
    SetEnv wdSession WebDAO::Sessionco
    
    RewriteEngine on
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
    RewriteRule ^/(.*) /usr/local/bin/wd_cgi.pl?$1 [QSA]
    <Directory "/usr/local/bin/wd_cgi.pl">
      AddHandler cgi-script cgi pl
      Options Indexes FollowSymLinks ExecCGI
    </Directory>
 </VirtualHost>

Запуск из shell

Для запуска из командной строки используется скрипт wd_shell.pl. В процессе выполнения используются переменные окружения.

  Usage:
      wd_shell.pl [options] file.pl
       options:
        -help  - print help message
        -man   - print man page
        -f file    - set root [x]html file 
  
  Options:
    -help   Print a brief help message and exits
    -man    Prints manual page and exits
    -f filename
            Set filename set root [x]html file for load domain

Для написания тестов используется WebDAO::Test.