Se afișează postările cu eticheta Apache. Afișați toate postările
Se afișează postările cu eticheta Apache. Afișați toate postările

marți, 25 august 2009

Apache .htaccess: how to get rid of 'RewriteEngine not allowed here'

Apache error: RewriteEngine not allowed here

A friend of mine has changed his web hosting server, and since that moment one of it's web pages stopped showing. The page displayed instead was a generic page from the Apache web server, telling that there was an internal error and to check the logs.
Here's a line from the log:
[Tue Aug 25 17:07:39 2009] [alert] [client xx.xx.xx.xx] /usr/local/www/htdocs/.htaccess: RewriteEngine not allowed here
I tried to find the answer on the net, and after a short google search and after reading a little bit of apache docs, I found the answer.


How this appeared?

My friend's web site includes a file called .htaccess, which usually is populated with directives for the apache web server. In a default apache setup, this file is read on web page access, but only if the main configuration directives (from httpd.conf or vhost configuration file) allow this. This is specified by the 'AllowOverride AuthConfig' directive. Since I've seen the error, AllowOverride AuthConfig was 'On', so the .htaccess file was processed, but some of it's content is not permitted in this context.


How to allow RewriteEngine on directive in .htaccess

All I needed to do is to modify the apache configuration file referring to htdocs directory. In my case it was the virtual host definition file, but it may be the main apache config file, httpd.conf. I've changed the <directory> section from
<Directory /path/to/htdocs/>
Options +FollowSymLinks
AllowOverride AuthConfig
Order allow,deny
Allow from all
<Directory>
to
<Directory /path/to/htdocs/>
Options +FollowSymLinks
AllowOverride AuthConfig FileInfo
Order allow,deny
Allow from all
<Directory>

And it fixed the problem.

marți, 14 iulie 2009

Instanțe apache 2 multiple pe FreeBSD

Mi s-a întâmplat de câteva ori să am nevoie să rulez mai multe instanțe de server apache pe un server. Deși metoda folosirii virtualhost este adesea suficientă, unicitatea anumitor directive din fișierul de configurare httpd.conf face necesară rularea de instanțe multiple.
Una dintre metodele de a rula mai multe servere apache concomitent este folosirea conceptului FreeBSD 'jail', care conferă o multitudine de avantaje, cum ar fi posibilitatea de a instala doar extensiile php strict necesare respectivei instanțe și izolarea mai bună față de server, dar punerea pe picioare a unui jail poate dura destul de mult.

O variantă alternativă este folosirea de profile de instanță apache distincte, care partajează același set de librării și extensii php, însă folosind fișiere de configurare diferite, lucru facilitat chiar de scriptul de pornire a serverului instalat de pachetul apache22. Pentru fiecare profil configurat, urmează a se pune în execuție câte un proces apache, cu setări specifice.
Astfel, în fișierul global de configurare a sistemului, /etc/rc.conf, directivele referitoare la apache22 se extind față de directivele uzuale:
# directive apache22 clasice, comune
apache22_enable="YES"
apache22_http_accept_load="YES"
apache22_http_accept_enable="YES"

# Directive apache22 care permit folosirea de profile
apache22_profiles="default p1"
apache22_default_enable="YES"
apache22_default_http_accept_enable="YES"
apache22_default_configfile="/usr/local/etc/apache22/httpd.conf"
apache22_p1_enable="YES"
apache22_p1_http_accept_enable="YES"
apache22_p1_configfile="/usr/local/etc/apache22/httpd-p1.conf"

Acum voi detalia semnificația directivelor suplimentare
apache22_profiles="p1 p2 p3"
indică scriptului /usr/local/etc/rc.d/apache22 să folosească instanțe multiple, instanțe identificate prin lista separată cu spații. Pentru fiecare profil, fișierul /etc/rc.conf va trebui să includă câte un set de directive de forma "apache22_profil_directiva=valoare".

Directivele specifice fiecărui profil sunt:

apache22_profil_configfile="/cale/catre/fisier/configurare/httpd.profil.conf"
apache22_profil_enable="YES|NO"
apache22_profil_flags="alte_directive_pentru_httpd_specifice_pentru_acest_profil"
apache22_profil_http_accept_enable="YES|NO"
apache22_profil_limits_enable="YES|NO"
apache22_profil_limits_args="limits_args"
apache22_profil_fib="FIB"


Este strict necesară indicarea fișierului de configurare al respectivului profil, toate celelalte directive fiind opționale. O directivă interesantă este "FIB", care nu poate avea efect decât pe FreeBSD mai recent de 7.1, care se referă la 'Forward Information Base' (FIB) asociat cu respectiva instanță apache. Începând de la versiunea 7.1, FreeBSD poate folosi multiple FIB-uri, lucru care permite folosirea de tabele de rutare diferite pentru procese diferite.

În continuare, se crează fișierul de configurare httpd-profil.conf specific respectivului profil, probabil pornind de la o versiune salvată sau de la fișierul de configurare inclus în distribuția Apache22. Va trebui să ajustați câteva setări importante: adresa IP si portul folosit de profil, amplasarea DocumentRoot, si în mod special amplasarea log-urilor, pentru a nu fi scrise în același loc cu logurile altor profile. Atenție mare și la adresa IP/port, dacă sunt mai multe servicii configurate să foloseasca acelasi IP și același port, uul dintre ele nu va putea porni.

Pentru pornirea tuturor instanțelor apache nu mai rămâne de făcut decât:
/usr/local/etc/rc.d/apache22 start

Super ofertă la eMag!

Related Posts Plugin for WordPress, Blogger...