fastcgi vs catalyst

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

fastcgi vs catalyst

Непрочитанное сообщение ProFTP » 2009-03-01 16:05:06

есть фремворк catalyst, запускал его в тестовом режиме CGI, настраивал, тугой он, но с большими возможностями...

примерно такой конфиг

Код: Выделить всё

FastCgiServer /home/x0/data/www/MyApp/script/myapp_fastcgi.pl -processes 3
Alias /MyApp/ /home/x0/data/www/MyApp/script/myapp_fastcgi.pl
   
<VirtualHost *:80>
DocumentRoot /home/x0/data/www/MyApp
 
 ErrorLog /home/x0/data/www/MyApp/error.log
  ServerName x0.org.ua
 

        <Directory /home/x0/data/www/MyApp>
            Options +ExecCGI
        </Directory>
     
        # you can also run your app in any non-root location
</VirtualHost>
пишет что доступ 403, точже самое что и в mod_perl

после запуска это, что он хочеn? права стоят на пользователя www www 750

есть цитата

Код: Выделить всё

Apache
Apache is the world's most common web server, so most sites are already using
Apache and have a configuration that you can easily add your Catalyst app to. If you
decide to use Apache, you can use either mod_perl or FastCGI to actually run your
Catalyst application.
FastCGI
FastCGI is easiest of the two to set up; simply install mod_fastcgi (or the newer
mod_fcgid, which might be better for some users) and add the following to Apache's
httpd.conf:
     FastCgiServer /.../myapp/script/myapp_fastcgi.pl -processes 3
     Alias /myapp/ /.../myapp/script/myapp_fastcgi.pl/
(Note that ... above is an abbreviation for wherever you want your application code
to live. Many sites use /var/www or /var/www-apps, but /home/myapp/ or something
similar is also possible.)
The above configuration will tell Apache to start (and maintain) three instances of
your application, and to make the application available on the web under the /myapp
URL. You can put the Alias directive inside a VirtualHost block to make your
application available at the root of a virtual host.
If you'd like to run your FastCGI server on a separate machine, you can tell Apache
about a FastCGI external server:
     FastCgiExternalServer /var/www/htdocs/myapp.fcgi -host remote.server.
     com:3010
     Alias /myapp/ /var/www/htdocs/myapp.fcgi
Note that /var/www/htdocs/myapp.fcgi isn't a real file; it's a virtual file that ends
with .fcgi (so Apache knows to invoke the fastcgi-handler) and exists inside
the doc root (so Apache knows it's allowed to be served). The -host directive points
FastCGI at the server running on remote.server.com, port 3010.
On remote.server.com, you'll want to run scripts/myapp_fastcgi.pl -l :3010
and setup firewall rules so that only your front end server can talk to port 3010. You
can also use another port number, as there is no defined standard port.
If your application is in a PAR, you can start an external FastCGI server by running
parl myapp.par myapp_fastcgi.pl -l :3010. You can then configure a remote
Apache with FastCGI to support to connect to that server, just as described above for
the non-PAR case.
                                           [ 179 ]
Deployment
In addition, the external server need not be on another host, it can be run on
localhost the same way. You can also use a named socket on the filesystem instead of
a host and port; just say -socket instead of -host. It is easier to enforce permissions
on files than TCP ports, so if you care about fine-grained access to the FastCGI
server, you might like using the named socket better. Keep in mind that you can't
use a named socket when the FastCGI server is running on a different host from the
front-end web server.
Static Content
One last tweak is to have Apache serve your static content without involving your
Catalyst application. All you'll need to do is add an Alias directive like the following:
    Alias /myapp/static /.../myapp/root/static
Apache can serve static content much more efficiently than your Catalyst application,
so for maximum performance it's best to add this piece of configuration.
mod_perl
For years, mod_perl was the only way to write efficient web applications, so it's still
in wide use. Serving your Catalyst application with mod_perl is very easy. First,
you'll need Catalyst::Engine::Apache from the CPAN.
Then, to a mod_perl-enabled Apache 2.x.x configuration, you'll just need to add:
    PerlSwitches -I/.../myapp/lib
    PerlModule MyApp
    <Location /> # or you can use /myapp, or a VirtualHost, etc.
          SetHandler              modperl
          PerlResponseHandler MyApp
    </Location>
On Apache 1.3, the setup is slightly different:
    <Perl>
          use lib qw(/.../myapp/lib);
    </Perl>
    PerlModule MyApp
    <Location />
          SetHandler perl-script
          PerlHandler MyApp
    </Location>
                                          [ 180 ]
                                                                                   Chapter 9
Finally, if you're using PAR, you can install Apache::PAR and point Apache at the
PAR instead of a directory:
     PerlAddVar PARInclude /.../myapp.par
     PerlModule Apache::PAR
     PerlModule MyApp
These directives replace the <Perl> or PerlSwitches sections above (but not the
<Location> section).
After you have setup your configuration, you can restart Apache and enjoy your
app. The same static caveat with FastCGI applies to mod_perl, so you will want to
add an Alias or Location for serving the static content directly. (This is more difficult
with PAR, but you might want to take the slight performance hit for the convenience
of one-file deployment. Additionally, you can copy the static content somewhere
outside of the PAR file and only use the PAR for code. Then there is no performance
hit, but maintenance is slightly more difficult.)
Performance Considerations
Unfortunately, the mod_perl setup described above is not ideal. mod_perl works by
loading your entire application into every Apache process. This means that when
an Apache process has to spoon-feed a dial-up user a 200M movie (or 20k of HTML;
the concept is the same), the memory that your application used is wasted streaming
bytes instead of processing requests. On sites with high traffic, this will result in
unacceptable performance, as the application processes will be tied up serving data
(and you can't start more application processes because you'll be out of memory).
This is a well-known mod_perl problem not specific to Catalyst (or even Perl,
mod_ruby and mod_python suffer the same problem), and is part of the reason why
FastCGI is becoming popular.
The solution is to run a two-tiered architecture. In front of your mod_perl application
processes, you place a lean load balancer (like perlbal) or a basic Apache process. The
front end will pass dynamic requests to the backend application servers. When the
dynamic result is ready, the dynamic server will send it very quickly to the front end
server. The front end server will then send the response to the client. While that front
end server is tied up, another lean front end server can dispatch another dynamic
request to your application. This setup ensures that you are always using as much
CPU and bandwidth as possible.
                                          [ 181 ]
Deployment
Setting up a front end server is covered in the mod_perl book at http://perl.
apache.org/, and perlbal is covered in the next section. The only thing you need to
do for Catalyst is to tell it that there's a frontend proxy by setting using_frontend_
proxy to 1 in the application config. This option is necessary so that Catalyst will
generate URLs that point to the front end server when you use uri_for.
If you're going to use mod_perl for a large site, be sure to set up a
two-tiered architecture.
еще тут

Код: Выделить всё

    *  NAME
    * DESCRIPTION
    * OVERLOADED METHODS
          o $self->run($c, $listen, { option => value, ... })
          o $self->write($c, $buffer)
          o $self->daemon_fork()
          o $self->daemon_detach( )
          o $self->_fix_env( $env ) 
    * WEB SERVER CONFIGURATIONS
          o Standalone FastCGI Server
          o Apache 1.x, 2.x
                + Standalone server mode
                + Static mode
                + Dynamic mode
                + Authorization header with mod_fastcgi or mod_cgi 
          o Lighttpd
                + Standalone server mode
                + Static mode
                + Non-root configuration 
          o IIS 
    * SEE ALSO
    * AUTHORS
    * THANKS
    * COPYRIGHT 

NAME ^

Catalyst::Engine::FastCGI - FastCGI Engine
DESCRIPTION ^

This is the FastCGI engine.
OVERLOADED METHODS ^

This class overloads some methods from Catalyst::Engine::CGI.
$self->run($c, $listen, { option => value, ... })

Starts the FastCGI server. If $listen is set, then it specifies a location to listen for FastCGI requests;

/path

    listen via Unix sockets on /path
:port

    listen via TCP on port on all interfaces
hostname:port

    listen via TCP on port bound to hostname

Options may also be specified;

leave_umask

    Set to 1 to disable setting umask to 0 for socket open =item nointr

    Do not allow the listener to be interrupted by Ctrl+C
nproc

    Specify a number of processes for FCGI::ProcManager
pidfile

    Specify a filename for the pid file
manager

    Specify a FCGI::ProcManager sub-class
detach

    Detach from console
keep_stderr

    Send STDERR to STDOUT instead of the webserver

$self->write($c, $buffer)
$self->daemon_fork()

Performs the first part of daemon initialisation. Specifically, forking. STDERR, etc are still connected to a terminal.
$self->daemon_detach( )

Performs the second part of daemon initialisation. Specifically, disassociates from the terminal.

However, this does not change the current working directory to "/", as normal daemons do. It also does not close all open file descriptors (except STDIN, STDOUT and STDERR, which are re-opened from /dev/null).
$self->_fix_env( $env )

Adjusts the environment variables when necessary.
WEB SERVER CONFIGURATIONS ^
Standalone FastCGI Server

In server mode the application runs as a standalone server and accepts connections from a web server. The application can be on the same machine as the web server, on a remote machine, or even on multiple remote machines. Advantages of this method include running the Catalyst application as a different user than the web server, and the ability to set up a scalable server farm.

To start your application in server mode, install the FCGI::ProcManager module and then use the included fastcgi.pl script.

    $ script/myapp_fastcgi.pl -l /tmp/myapp.socket -n 5

Command line options for fastcgi.pl include:

    -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.

See below for the specific web server configurations for using the external server.
Apache 1.x, 2.x

Apache requires the mod_fastcgi module. The same module supports both Apache 1 and 2.

There are three ways to run your application under FastCGI on Apache: server, static, and dynamic.
Standalone server mode

    FastCgiExternalServer /tmp/myapp.fcgi -socket /tmp/myapp.socket
    Alias /myapp/ /tmp/myapp/myapp.fcgi/
    
    # Or, run at the root
    Alias / /tmp/myapp.fcgi/
    
    # Optionally, rewrite the path when accessed without a trailing slash
    RewriteRule ^/myapp$ myapp/ [R]

The FastCgiExternalServer directive tells Apache that when serving /tmp/myapp to use the FastCGI application listenting on the socket /tmp/mapp.socket. Note that /tmp/myapp.fcgi does not need to exist -- it's a virtual file name. With some versions of mod_fastcgi or mod_fcgid, you can use any name you like, but most require that the virtual filename end in .fcgi.

It's likely that Apache is not configured to serve files in /tmp, so the Alias directive maps the url path /myapp/ to the (virtual) file that runs the FastCGI application. The trailing slashes are important as their use will correctly set the PATH_INFO environment variable used by Catalyst to determine the request path. If you would like to be able to access your app without a trailing slash (http://server/myapp), you can use the above RewriteRule directive.
Static mode

The term 'static' is misleading, but in static mode Apache uses its own FastCGI Process Manager to start the application processes. This happens at Apache startup time. In this case you do not run your application's fastcgi.pl script -- that is done by Apache. Apache then maps URIs to the FastCGI script to run your application.

    FastCgiServer /path/to/myapp/script/myapp_fastcgi.pl -processes 3
    Alias /myapp/ /path/to/myapp/script/myapp_fastcgi.pl/

FastCgiServer tells Apache to start three processes of your application at startup. The Alias command maps a path to the FastCGI application. Again, the trailing slashes are important.
Dynamic mode

In FastCGI dynamic mode, Apache will run your application on demand, typically by requesting a file with a specific extension (e.g. .fcgi). ISPs often use this type of setup to provide FastCGI support to many customers.

In this mode it is often enough to place or link your *_fastcgi.pl script in your cgi-bin directory with the extension of .fcgi. In dynamic mode Apache must be able to run your application as a CGI script so ExecCGI must be enabled for the directory.

    AddHandler fastcgi-script .fcgi

The above tells Apache to run any .fcgi file as a FastCGI application.

Here is a complete example:

    <VirtualHost *:80>
        ServerName www.myapp.com
        DocumentRoot /path/to/MyApp

        # Allow CGI script to run
        <Directory /path/to/MyApp>
            Options +ExecCGI
        </Directory>

        # Tell Apache this is a FastCGI application
        <Files myapp_fastcgi.pl>
            SetHandler fastcgi-script
        </Files>
    </VirtualHost>

Then a request for /script/myapp_fastcgi.pl will run the application.

For more information on using FastCGI under Apache, visit http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
Authorization header with mod_fastcgi or mod_cgi

By default, mod_fastcgi/mod_cgi do not pass along the Authorization header, so modules like Catalyst::Plugin::Authentication::Credential::HTTP will not work. To enable pass-through of this header, add the following mod_rewrite directives:

    RewriteCond %{HTTP:Authorization} ^(.+)
    RewriteRule ^(.*)$ $1 [E=HTTP_AUTHORIZATION:%1,PT]

Lighttpd

These configurations were tested with Lighttpd 1.4.7.
Standalone server mode

    server.document-root = "/var/www/MyApp/root"

    fastcgi.server = (
        "" => (
            "MyApp" => (
                "socket"      => "/tmp/myapp.socket",
                "check-local" => "disable"
            )
        )
    )

Static mode

    server.document-root = "/var/www/MyApp/root"
    
    fastcgi.server = (
        "" => (
            "MyApp" => (
                "socket"       => "/tmp/myapp.socket",
                "check-local"  => "disable",
                "bin-path"     => "/var/www/MyApp/script/myapp_fastcgi.pl",
                "min-procs"    => 2,
                "max-procs"    => 5,
                "idle-timeout" => 20
            )
        )
    )

Note that in newer versions of lighttpd, the min-procs and idle-timeout values are disabled. The above example would start 5 processes.
Non-root configuration

You can also run your application at any non-root location with either of the above modes. Note the required mod_rewrite rule.

    url.rewrite = ( "myapp\$" => "myapp/" )
    fastcgi.server = (
        "/myapp" => (
            "MyApp" => (
                # same as above
            )
        )
    )

For more information on using FastCGI under Lighttpd, visit http://www.lighttpd.net/documentation/fastcgi.html
IIS

It is possible to run Catalyst under IIS with FastCGI, but we do not yet have detailed instructions.
SEE ALSO ^

Catalyst, FCGI.
AUTHORS ^

Catalyst Contributors, see Catalyst.pm
THANKS ^

Bill Moseley, for documentation updates and testing.
COPYRIGHT ^

This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.
mod_perl не захотел работать

в логах такае

Код: Выделить всё

[Sun Mar 01 11:13:43 2009] [error] [client .81.18] client denied by server configuration: /home/x0/data/www/MyApp/root/
в каталисте:

Код: Выделить всё

[debug] "GET" request for "error/HTTP_FORBIDDEN.html.var" from ".81.18"
[debug] Arguments are "error/HTTP_FORBIDDEN.html.var"
[debug] No template specified for rendering
официальная документация
http://search.cpan.org/~agrundma/Cataly ... e2/MP20.pm

Код: Выделить всё

# Set up your Catalyst app as a mod_perl 2.x application in httpd.conf
    PerlSwitches -I/var/www/MyApp/lib
    
    # Preload your entire application
    PerlModule MyApp
    
    <VirtualHost *>
        ServerName    myapp.hostname.com
        DocumentRoot  /var/www/MyApp/root
        
        <Location />
            SetHandler          modperl
            PerlResponseHandler MyApp
        </Location>
        
        # you can also run your app in any non-root location
        <Location /some/other/path>
            SetHandler          perl-script
            PerlResponseHandler MyApp
        </Location>         
    </VirtualHost>
я постаивл так

Код: Выделить всё

PerlSwitches -I/home/x0/data/www/MyApp/lib
PerlModule MyApp
    
<VirtualHost *:80>
DocumentRoot /home/x0/data/www/MyApp/root
 
 ErrorLog /home/x0/data/www/MyApp/error.log
  ServerName x0.org.ua
   
  
  <Location />
            SetHandler          modperl
            PerlResponseHandler MyApp
        </Location>
        
        # you can also run your app in any non-root location
   </VirtualHost>
suexec реагирует на mod_perl?
в гугле конкретно ничего...
какие варианты?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: fastcgi vs catalyst

Непрочитанное сообщение zg » 2009-03-01 16:29:03

ProFTP писал(а):права стоят на пользователя www www 750
обычно нада 755
ProFTP писал(а):client denied by server configuration:
второй апач по дефолту запрещает всё и вся

Код: Выделить всё

#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
поэтому нада псоле Deny добавить разрешающее правило

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: fastcgi vs catalyst

Непрочитанное сообщение ProFTP » 2009-03-01 16:37:32

Код: Выделить всё

chmod 755 myapp_fastcgi.pl

Код: Выделить всё

FastCgiServer /home/x0/data/www/MyApp/script/myapp_fastcgi.pl -processes 3
Alias /MyApp/ /home/x0/data/www/MyApp/script/myapp_fastcgi.pl
    
<VirtualHost *:80>
DocumentRoot /home/x0/data/www/MyApp/root

 ErrorLog /home/x0/data/www/MyApp/error.log
  ServerName x0.org.ua

        <Directory /home/x0/data/www/MyApp>
            Options +ExecCGI
                AllowOverride None
    Order deny,allow
    Deny from all
        </Directory>
        
        # you can also run your app in any non-root location
</VirtualHost>

я заметил что при любой конфигурации fast-cgi и modp_perl пишет:

Код: Выделить всё

    [Sun Mar 01 11:13:43 2009] [error] [client .81.18] client denied by server configuration: /home/x0/data/www/MyApp/root/
авторы котоые писали инструкцию должны были придупредить возможные варианты... а так это с пушки по воробьям теперь решать проблему...

попробую владельца поменять, может из-за suexec хотя врядли, логи на суексес не ругаються...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: fastcgi vs catalyst

Непрочитанное сообщение ProFTP » 2009-03-01 16:49:41

в логах нашле еще это

Код: Выделить всё

[Sun Mar 01 15:50:05 2009] [warn] FastCGI: server "/home/x0/data/www/MyApp/script/myapp_fastcgi.pl" has failed to remain running for 30 seconds given 3 attempts, its restart interval has been backed off to 600 seconds

suexec пишет

Код: Выделить всё

[2009-03-01 16:11:04]: cannot run as forbidden uid (80/myapp_fastcgi.pl)
владелец не www

Код: Выделить всё

<VirtualHost *:80>
 
 SuexecUserGroup the the
пхп с этим владельце работает, он есть в групе www

Код: Выделить всё

pw groupmod my-domain -m www
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: fastcgi vs catalyst

Непрочитанное сообщение zg » 2009-03-01 19:59:57

эээ, я вообще то имел в виду, что надо вставить после Deny from all такую строчку

Код: Выделить всё

Allow from all
дай вывод

Код: Выделить всё

ls -la /home/x0/data/www/MyApp/script/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: fastcgi vs catalyst

Непрочитанное сообщение ProFTP » 2009-03-01 20:45:27

http://d.hatena.ne.jp/peppon/20070116/1168933353
http://d.hatena.ne.jp/webdoraku/20061117/p2

Код: Выделить всё

PerlSwitches -I/home/x0/data/www/MyApp/lib
PerlModule MyApp
    
<VirtualHost *:80>

DocumentRoot /home/x0/data/www/MyApp/root
 
 ErrorLog /home/x0/data/www/MyApp/error.log
   CustomLog /home/x0/data/www/MyApp/mod_access.log combined
  ServerName x0.org.ua
  
      <Directory /home/x0/data/www/MyApp>
 AllowOverride None                                                             
 Order allow,deny                                                               
 Allow from all  
      </Directory>
  
  <Location />
            SetHandler          modperl
            PerlResponseHandler MyApp
  </Location>
</VirtualHost>
mod_perl заработал

а fast_cgi может работать с php и perl на одном apache сервере?

для пхп я поставил врапер, для всех виртуалхостов

но тут надо именно для перла поставить врапер... я видел на многих хостинг не было написано что есть FastCGI...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: fastcgi vs catalyst

Непрочитанное сообщение zg » 2009-03-01 21:21:13

ProFTP писал(а):а fast_cgi может работать с php и perl на одном apache сервере?
на apache.org модуль mod_fastcgi не значится в списке модулей... :unknown:
ProFTP писал(а):http://d.hatena.ne.jp
ты свободно читаешь на японском? :shock:

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: fastcgi vs catalyst

Непрочитанное сообщение ProFTP » 2009-03-01 21:29:38

zg писал(а):
ProFTP писал(а):http://d.hatena.ne.jp
ты свободно читаешь на японском? :shock:
нет, там бывает рульные статьи, еще лучше чем на русском, все четко и точно написано....

про bind9 и т.д.
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

lykich
рядовой
Сообщения: 36
Зарегистрирован: 2007-06-26 15:10:07

Re: fastcgi vs catalyst

Непрочитанное сообщение lykich » 2013-04-29 16:11:56

It is working.

Код: Выделить всё

<VirtualHost *:80>
    ServerName catalyst.my
    ServerAlias www.catalyst.my
    DocumentRoot /home/lykich/catalyst/MyApp

     FastCgiServer /home/lykich/catalyst/MyApp/script/myapp_fastcgi.pl -processes 3
     Alias / /home/lykich/catalyst/MyApp/script/myapp_fastcgi.pl/
</VirtualHost>