Difference between revisions of "Apache"

From Linuxintro
imported>ThorstenStaerk
imported>ThorstenStaerk
Line 57: Line 57:
  
 
= Rewrite =
 
= Rewrite =
A rewrite is that the URL presented to the visitor hides technical details. To do it with SUSE Linux add ''rewrite'' to APACHE_MODULES in /etc/sysconfig/apache.
+
Sometimes you want URLs to be rewritten, e.g. from a human-easy URL like http://www.linuxintro.org/wiki/apAche to a machine-easy URL like http://www.linuxintro.org/index.php?title=Apache. This can be done with apache's rewrite module mod_rewrite.
 +
Here is an example how to do it under SUSE Linux 12.1:
 +
 
 +
== example ==
 +
* install apache2 with php:
 +
yast -i apache2-mod_php5
 +
* add ''rewrite'' to APACHE_MODULES in /etc/sysconfig/apache.
 +
* set ''AllowOverride All'' in /etc/apache2/httpd.conf
 +
* (re)start apache2
 +
/etc/init.d/apache2 restart
 +
* in /srv/www/htdocs create a file .htaccess with the following content:
 +
Options +FollowSymlinks
 +
RewriteEngine on
 +
RewriteRule ^foo\.html$ /bar.html [R]
 +
* now you can surf to http://localhost/foo.html and will be redirected to http://localhost/bar.html
 +
 
 +
== hints ==
 
* FollowSymLinks must be allowed. Find out if it is allowed by  
 
* FollowSymLinks must be allowed. Find out if it is allowed by  
 
  /srv/www/htdocs # ln -s bar.html foo.html
 
  /srv/www/htdocs # ln -s bar.html foo.html

Revision as of 11:36, 26 August 2012

Apache is a popular http daemon. In other words it is software for web servers.

Setting up https

See set up Apache with https.

Apache needs too much memory - what to do

I have a web server at rackspace and every MB RAM costs me on a per-month base. Often, the server started swapping. Calling top and then typing M showed me the reason:

PID   USER   PR NI VIRT RES  SHR S %CPU %MEM  TIME+  COMMAND
31737 mysql  20 0 1108m 62m 6464 S    0 11.8 0:05.19 mysqld
32559 wwwrun 20 0 170m  31m 4260 S    0  6.0 0:08.69 httpd2-prefork
32562 wwwrun 20 0 165m  28m 4352 S    0  5.4 0:00.32 httpd2-prefork
 1432 wwwrun 20 0 165m  28m 3832 S    0  5.4 0:01.76 httpd2-prefork 

So I reduced Apache's memory footprint by editing /etc/apache2/server-tuning.conf. I set

StartServers 2
MinSpareServers 2
MaxSpareServers 6
ServerLimit 15
MaxClients 15

and now Apache, wikipedia, dokuwiki, mysql and php fit into 512 MB.

WebDAV under Apache2

With Apache2, the DAV module is already included. You will need to activate the two needed modules dav_fs and dav using a2enmod. Afterwards, restart apache using

/etc/init.d/apache2 force-restart

In /etc/apache2/mods-available/dav_fs.conf you should find something like:

DAVLockDB /var/lock/apache2/DAVLock

The user-account Apache is running under (www or www-data) needs read-and write privileges in this folder.

Enter into /etc/apache2/apache2.conf:

Alias /daten /var/data
<Directory /var/data/>
DAV On
ForceType text/plain
AuthType Basic 
AuthName "WebDAV Daten" 
AuthUserFile /etc/apache2/htpasswd 
Require valid-user 
</Directory>

Create "/var/data" and issue

chown www-data:www-data /var/data

Create the FIRST user with:

htpasswd -c /etc/apache2/htpasswd benutzername

For further users, leave out the -c (create).

switch off Apache - Directory-Listing

Remove

Indexes 

from the options, then the content of the folders will no longer be shown.

Alias

An alias allows you to point a URL to a file like this:

Alias /skins /srv/www/htdocs/skins

Imagine we have a home page www.myhomepage.com and have a mediawiki running on it. The URL http://myhomepage.com/skins would now be processed by mediawiki. But we want it to contain pure files. So we make this alias.

Rewrite

Sometimes you want URLs to be rewritten, e.g. from a human-easy URL like http://www.linuxintro.org/wiki/apAche to a machine-easy URL like http://www.linuxintro.org/index.php?title=Apache. This can be done with apache's rewrite module mod_rewrite. Here is an example how to do it under SUSE Linux 12.1:

example

  • install apache2 with php:
yast -i apache2-mod_php5
  • add rewrite to APACHE_MODULES in /etc/sysconfig/apache.
  • set AllowOverride All in /etc/apache2/httpd.conf
  • (re)start apache2
/etc/init.d/apache2 restart
  • in /srv/www/htdocs create a file .htaccess with the following content:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^foo\.html$ /bar.html [R]

hints

  • FollowSymLinks must be allowed. Find out if it is allowed by
/srv/www/htdocs # ln -s bar.html foo.html
  • We are using .htaccess in this example. To test if .htaccess works, use .htaccess with the following content
asdf

if you do not get an error 500, .htaccess is not evaluated at all. In this case set AllowOverride to true

Proxy

For software like shell in a box or guacamole you want apache to fetch data from another port than 80.

Set mod_proxy

You want to store a user list with passwords in /etc/apache2/.htpasswd.

root@linuxintro:/etc/apache2/mods-enabled# cat proxy.conf 
<IfModule mod_proxy.c>
        #turning ProxyRequests on and allowing proxying from all may allow
        #spammers to use your proxy to send email.

        ProxyRequests Off

        <Proxy *>
                AddDefaultCharset off
                AuthUserFile /etc/apache2/.htpasswd
                AuthName Wuhuuu
                AuthType Basic
                require valid-user
                Order deny,allow
                Allow from all
                #Deny from all
                #Allow from .example.com
        </Proxy>

        # Enable/disable the handling of HTTP/1.1 "Via:" headers.
        # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
        # Set to one of: Off | On | Full | Block

        ProxyVia On
</IfModule>

Use ProxyPass

Under Ubuntu 10.04 I go to /etc/apache2/sites-enabled and edit 000-default:

  <IfModule mod_proxy.c>
    <Location /shell>
      ProxyPass http://127.0.0.1:4200
    </Location>
  </IfModule>

See also