====== Apache - Εξυπηρετητής ιστοσελίδων ====== ===== Εγκατάσταση apache2 ===== Για να εγκαταστήσουμε τον apache aptitude install apache2 Για να ελέγξουμε ότι εγκαταστάθηκε σωστά δοκιμάζουμε στην συνέχεια από έναν browser την διεύθυνση http://localhost Η εκκίνηση/τερματισμός και η επανεκκίνηση του apache γίνεται όπως και σε όλες τις υπηρεσίες στο debian linux.Π.χ. gia την επανεκκίνηση /etc/init.d/apache2 restart (start/stop για εκκίνηση/τερματισμό) Εάν μας βγάλει το παρακάτω μήνυμα Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName βλ.[[el:linux:debian:server:networking]] ===== Εγκατάσταση πρόσθετων modules ===== ==== php ==== Για να εγκαταστήσουμε php aptitude install php libapache2-mod-php Εάν έχουμε και βάση δεδομένων mysql στο σύστημά μας θα χρειαστούμε την δυνατότητα επικοινωνίας της php με αυτή aptitude install php-mysql Για να ελέγξουμε ότι λειτουργεί η php δημιουργούμε ένα αρχείο /var/www/html/phpinfo.php Το ελέγχουμε με http://localhost/phpinfo.php Για να εγκαταστήσουμε επίσης τον php debugger ώστε να έχουμε την δυνατότητα να καλέσουμε την php από command line (και να δούμε για παράδειγμα την έκδοση) aptitude install php-db ==== apc ==== aptitude install php-apc Τροποποιούμε το αρχείο /etc/php5/apache2/php.ini προσθέτωντας την παρακάτω γραμμή apc.rfc1867 = 1 Τέλος επανεκκινούμε τον apache2 /etc/init.d/apache2 restart ==== PECL uploadprogress library ==== aptitude install php5-dev make pecl install uploadprogress Τροποποιούμε το αρχείο /etc/php5/apache2/php.ini προσθέτωντας την παρακάτω γραμμή extension=uploadprogress.so Τέλος επανεκκινούμε τον apache2 /etc/init.d/apache2 restart === Ρυθμίσεις php === Για να μπορούμε να κάνουμε upload μεγάλα αρχεία πάνω από 2MB (π.χ. το component virtuemart στο joomla) θα πρέπει να ανέβάσουμε το όριο ασφαλείας που έχει η php. Τροποποιούμε το αρχείο /etc/php5/apache2/php.ini ; Maximum allowed size for uploaded files. upload_max_filesize = 4M ==== ioncube ==== Κατεβάζουμε τον loader από http://www.ioncube.com/loaders.php cd /tmp/ wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz Αποσυμπιέζουμε στον φάκελο tmp tar xvfz ioncube_loaders_lin_x86-64.tar.gz cd ioncube/ mkdir /usr/local/lib/ioncube Μας ενδιαφέρει ο loader για την έκδοση της php που έχουμε php -v Εάν έχουμε π.χ. την php 5.3 mv ioncube_loader_lin_5.*.so /usr/local/lib/ioncube/ chown www-data.www-data -R /usr/local/lib/ioncube/ Προσθέτουμε στις πρώτες γραμμές του αρχείου /etc/php5/apache2/php.ini να φορτώνει τον ioncube loader zend_extension=/usr/local/lib/ioncube/ioncube_loader_lin_5.3.so Ελέγχουμε ότι τα αρχεία ρυθμίσεων του apache είναι ok apache2ctl -t Επανεκκινούμε τον apache2 /etc/init.d/apache2 restart Εάν υπάρχει πρόβλημα cp /tmp/ioncube/loader-wizard.php /home/weballdesign/public_html/www chown weballdesign.weballdesign /home/weballdesign/public_html/loader-wizard.php lynx wwww.weballdesign.gr/loader-wizard.php Μόλις λυθεί rm /home/weballdesign/public_html/loader-wizard.php ==== perl ==== Για να εγκαταστήσουμε την perl και το module της στον apache2 aptitude install perl libapache2-mod-perl2 /etc/init.d/apache2 restart ===== Εξυπηρέτηση site ===== Θα ρυθμίσουμε αρχικά τον apache να προβάλλει ένα συγκεκριμένο site όταν ανοίγουμε την διεύθυνση http://localhost. Ήδη είναι ρυθμισμένος να εμφανίζει το περιεχόμενο του φακέλου /var/www/apache2-default κάνωντας ανακατεύθυνση όταν ανοίγουμε την διεύθυνση http://localhost στην διεύθυνση http://localhost/apache2-default. Η ρύθμιση αυτή είναι στο αρχείο /etc/apache2/sites-available/default. Υπάρχουν πολλοί τρόποι να ρυθμιστεί ο apche να εξυπηρετεί sites. Ο τρόπος που επιλέγει η διανομή debian είναι αρκετά καλά δομημένος. Διαφέρει όμως από τους τρόπους ρύθμισης άλλων διανομών linux και συνήθως δεν υποστηρίζεται από εξωτερικά εργαλεία ρύθμισης του apache. Για το λόγο αυτό θα ακολουθήσουμε έναν πιο γενικό τρόπο ρύθμισης. Όλα τα sites θα τα καταγράψουμε στο αρχείο /etc/apache2/httpd.conf Πριν ξεκινήσουμε θα πρέπει να απενεργοποιήσουμε το site που ήδη εξυπηρετείται a2dissite 000-default /etc/init.d/apache2 restart Αυτό διαγράφει τον συμβολικό δεσμό στο /etc/apache2/sites-enabled/000-default που δείχνει στο διαθέσιμο site /etc/apache2/sites-available/default. Η λογική αυτή υπάρχει και για τα modules και οι εντολές που ενεργοποιούν απενεργοποιούν sites και modules είνα αντίστοιχα: a2ensite, a2dissite, a2enmod, a2dismod (πατήστε TAB μετά από καθεμία για να δείτε τα διαθέσιμα sites/modules) Μετά από κάθε αλλή σε configuration file του apache είναι καλό να τρέχουμε πρώτα την παρακάτω εντολή πριν κάνουμε επανεκκίνηση. Θα ελέγξει την ορθότητα των configuration files, ώστε να αποφύγουμε την αποτυχία επανεκκίνησης του apache. apache2ctl -t ==== Προκαθορισμένο ριζικό site==== Αντιγράφουμε τα περιεχόμενα ενός site σε έναν φάκελο π.χ. στον /var/www/mysite. Στην συνέχεια προσθέτουμε στο αρχείο /etc/apache2/httpd.conf τις παρακάτω γραμμές. (Αφήνουμε και τις απενεργοποιημένες γραμμές που ξεκινούν με σχόλιο #, θα μας χρειαστούν αργότερα NameVirtualHost *:80 #ServerName myserver.mydomain.com #ServerAlias mydomain.com DocumentRoot /var/www/mysite Options Indexes IncludesNOEXEC FollowSymLinks allow from all Μεγάλη Προσοχή !! Θα πρέπει να μην έχουμε πουθενά αλλού γραμμή NameVirtualHost και όλα τα VirtualHost να είναι (http.conf, apache2.conf sites-available/default κτλ). Είναι αιτία των παρακάτω λαθών _default_ VirtualHost overlap on port 80, the first has precedence και VirtualHost *:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results ===== SSL - TLS Ρυθμίσεις ===== cd /etc/apache2 Για να δημιουργήσουμε μια αίτηση πιστοποιητικού (1024bit)που θα την στείλουμε σε μία εταιρεία ώστε να μας εκδόσει πιστοποιητικό /usr/lib/ssl/misc/CA.sh -newreq Θα δημιουργηθούν τα αρχεία * newreq.pem (που θα στείλουμε στην εταιρεία) * newkey.pem (Το κλειδί μας που μαζί με το πιστοποιητικό της εταιρείας είναι μοναδικό ζεύγος) Το πιστοποιητικό που θα μας εκδοθεί μπορούμε να το σώσουμε στο αρχείο newcert.pem και το intermediate (από τον πάροχο) στο αρχείο newca.pem. Για 2048bit encryption εκτελούμε Για δημιουργία private key openssl genrsa -out newkey.pem 2048 Για δημιουργία αίτησης openssl req -new -key newkey.pem -out newreq.pem Αλλιώς για να δημιουργήσουμε ένα αυτουπογραφόμενο πιστοποιητικό /usr/lib/ssl/misc/CA.sh -newcert Θα δημιουργηθούν και τα 3 παραπάνω αρχεία Για να βγάλουμε το password cp newkey.pem newkey.pem.org openssl rsa -in newkey.pem.org -out newkey.pem Τέλος ρυθμίζουμε ανάγνωση μόνο από root chmod 400 newkey.pem newcert.pem Αλλες εντολές που μπορούμε να εφαρμόσουμε για άλλες ενέργειες /usr/lib/ssl/misc/CA.sh -newca /usr/lib/ssl/misc/CA.sh -sign ==== ssl conf directives==== Τροποποιούμε το conf αρχείο που μας ενδιαφέρει π.χ. /etc/apache2/sites-available/mydomain.gr #Always https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L,QSA] ServerName www.mydomain.gr .. #whatever http virtualhost had .. SSLEngine on SSLCertificateFile /etc/apache2/newcert.pem SSLCertificateKeyFile /etc/apache2/newkey.pem SSLCACertificateFile /etc/apache2/newca.pem ===== Προχωρημένα ===== ==== Περιορισμός bandwidth ==== Μπορεί να γίνει ανά domain Εγκαθιστούμε το module apt-get install libapache2-mod-bw Το ενεργοποιούμε a2enmod bw Εισάγουμε τα παρακάτω directives στο conf αρχείο του site ServerName download.mysite.gr BandwidthModule On ForceBandWidthModule On #400 KB/s Bandwidth all 409600 DocumentRoot /home/mysite/public_html/files ErrorLog /home/mysite/logs/error_log CustomLog /home/mysite/logs/access_log combined ==== Μη έγκυρες σελίδες ==== Σε περίπτωση που το site μας μεταφέρεται ή διάφορα αρχεία του μετονομάζονται, είναι πιθανόν συνδέσμοι από το google ranking ή από αλλού να μην είναι πλέον έγκυροι Αν θέλουμε να διατηρηθούν προσωρινά ως έγκυροι, π.χ. λόγω ranking και χωρίς να καταλαβαίνει ο χρήστης πρόβλημα κάνουμε redirect σε url ErrorDocument 404 http://www.mydomain.com Αν θέλουμε να διαγραφούν σιγά σιγά από το google και γενικά να εμφανίζεται ένα κατατοπιστικό μύνημα στον χρήστη στέλνουμε σε τοπικό αρχείο ErrorDocument 404 /404.php Παράδειγμα τέτοιου αρχείου είναι το παρακάτω 404 Error - Page not found

[404] Page not found

Sorry, the file was not found on this server.

Please ensure that you have entered the url correctly. If you did so, then probably the file was removed from the server.

You will be redirected to our homepage in 10 seconds.




[404] Δεν βρέθηκε η σελίδα

Δυστυχώς, η σελίδα δεν βρέθηκε.

Παρακαλώ σιγουρέψτε ότι εισάγατε σωστή την διεύθυνση. Εάν την έχετε εισαγάγει σωστά είναι πιθανό ότι η διεύθυνση δεν είναι πλέον έγκυρη.

Θα μεταφερθείτε στην αρχική μας σελίδα σε 10 δευτερόλεπτα..

==== mod_rewrite==== Ένα από τα πιο ισχυρά και βέβαια, από τα πιο πολύπλοκα features του apache === Αλλαγή domain.com σε www.domain.com === Αυτό μπορεί να φανεί αρκετά χρήσιμο σε πολλές περιπτώσεις. Αρκεί να προσθέσουμε τα παρακάτω RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC] RewriteCond %{HTTP_HOST} !^$ RewriteRule ^/(.*) http://www.domain.com/$1 [L,R] ==== mod_suexec ==== Για να εγκαταστήσουμε το module aptitude install apache2-suexec Για να δούμε πληροφορίες εκτελούμε /usr/lib/apache2/suexec -V Για να αλλάξουμε τον προκαθορισμένο φάκελο κάτω από τον οποίον εκτελούνται cgi και php μέσω suexec, εγκαθιστούμε το πακέτο apache2-suexec-custom αντί το apache2-suexec aptitude install apache2-suexec-custom Στην συνέχεια τροποποιούμε το αρχείο /etc/apache2/suexec/www-data αλλάζοντας την 1η γραμμή του από /var/www/ π.χ. σε /home ==== mod_fcgid ==== Σε συνδυασμό με την suexec μπορούμε να χρησιμοποιήσουμε το module fcgid το οποίο εκτελεί τα php scripts με δικαιώματα του χρήστη και όχι του apache και είναι αρκετά γρήγορο σε σχέση με τα cgi Για την εγκατάσταση apt-get install libapache2-mod-fcgid php-cgi a2dismod php a2enmod fcgi service apache2 restart Στην συνέχεια προσθέτουμε στο configuration αρχείο του apache που αφορά το domain που θέλουμε στην ενότητα public_html Directory Options Indexes IncludesNOEXEC FollowSymLinks AddHandler fcgid-script .php Options +ExecCGI FCGIWrapper /home/testdom/fcgi-bin/php5.fcgi .php allow from all AllowOverride All Δημιουργούμε τον φάκελο /home/testdom/fcgi-bin και μέσα του το αρχείο php5.fcgi: #!/bin/bash PHPRC=/etc/php5/apache2/php.ini export PHPRC umask 027 exec /usr/bin/php-cgi Του δίνουμε δικαιώματα εκτέλεσης και επανεκκινούμε τον apache chmod +x /home/testdom/fcgi-bin/php5.fcgi /etc/init.d/apache2 restart Για νέους χρήστες μπορούμε να προσθέσουμε αυτόν τον φάκελο και το αρχείο στο /etc/skel/ Τα αρχεία της εφαρμογής που εκτελούμε καθώς και το fcgi wrapper θα πρέπει να έχουν ιδιοκτήτη τον χρήστη και να μην υπάρχει η δυνατότητα εγγραφής από την ομάδα ή από τους άλλους. Ειδάλλως η suexec δεν θα τα εκτελέσει To log της suexec είναι στο φάκελο /var/log/apache2/ ==== Protected Web Dirs ==== a2enmod dav_fs dav Θα δημιουργήσουμε ένα αρχείο .htaccess (ή θα βάλουμε τις ρυθμίσεις κατευθείαν στο conf αρχείο του apache) AuthUserFile /home/testuser/.htpass AuthGroupFile /dev/null AuthName "Restricted Area, pls provide username and password" AuthType Basic require valid-user Το αρχείο .htpass θα δημιουργηθεί ως εξής : cd ~testuser htpasswd -c .htpass testuser Για προσθήκη περισσότερων χρηστών htpasswd .htpass otherusername ==== mod_status ==== Εάν θέλουμε να παρακολουθήσουμε τις συνδέσεις που γίνονται στους virtual hosts που έχουμε τότε μπορούμε να ενεργοποιήσουμε το module **mod_status** a2enmod status Στην συνέχεια τροποποιούμε το αρχείο **/etc/apache2/mods-enabled/status.conf** εισάγωντας στο Location directive τις ip από τις οποίες μπορούμε να έχουμε πρόσβαση SetHandler server-status Order deny,allow Deny from all .. Allow from 127.0.0.1 ::1 Allow from 111.222.111,222 ::1 .. Ενεργοποιούμε επιπλέον πληροφορίες με ExtendedStatus On Τέλος επανεκκινούμε τον apache service apache2 restart Μπορούμε πλέον να δούμε τις πληροφορίες από έναν browser στην διεύθυνση http://[www.mydomain.com]/server-status Πατώντας F5 ανανεώνουμε ή εάν θέλουμε αυτόματη ανανέωση http://[www.mydomain.com]/server-status?refresh=10 Εάν έχουμε πρόσβαση ssh, μπορούμε να τα δούμε και από κονσόλα με lynx localhost/server-status ===== Πηγές ===== * Παραδείγματα name-based και ip-based virtual hosts : http://httpd.apache.org/docs/2.0/vhosts/examples.html#purename * Αντιμετώπιση προβλημάτων : http://wiki.apache.org/httpd/Logs * Ασφάλεια : * http://www.petefreitag.com/item/505.cfm * DOS - brute force attacks : http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html * ssl / tls * δημιουργία certificates : http://www.modssl.org/docs/2.7/ssl_faq.html#ToC24 * virtualhost work arounds : www.switch.ch/pki/meetings/2007-01/namebased_ssl_virtualhosts.pdf * Αγορά * http://www.rapidssl.com/ssl-certificate-products/rapidssl/usd/wildcard-ssl-certificate.htm * http://www.godaddy.com/gdshop/ssl/ssl.asp?ci=8346 * mod_autoindex * http://perishablepress.com/press/2008/11/02/better-default-directory-views-with-htaccess/ * mod_rewrite : * Official : http://httpd.apache.org/docs/2.0/misc/rewriteguide.html * tutorial : * http://corz.org/serv/tricks/htaccess2.php * http://gnosis.cx/publish/programming/regular_expressions.html * Cheatsheet: http://borkweb.com/story/apache-rewrite-cheatsheet * Beginners : * http://www.ecauldron.com/web/design020.php * http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html * tips and tricks : http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html * mod_suxec * http://blog.chty.org/post/2007/10/28/Apache2-mod_fastcgi-suexec-on-debian-etch * http://www.virtualmin.com/forums/help-home-for-newbies/freebsd-6.3-problem.html * mod_fcgid * https://x10hosting.com/community/threads/debian-apache-2-2-fastcgi-php-5-suexec-the-easy-way.148894/ * http://www.virtualmin.com/node/8462 * Per user : https://www.iphouse.com/blog/2012/03/23/running-suexec-fcgid/ * bug with suexec, fcgid, userdir * https://bz.apache.org/bugzilla/show_bug.cgi?id=49439 * https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=528062 * to bypass above bug * mod_macro : http://www.cri.ensmp.fr/~coelho/mod_macro/ * mod_proxy : https://httpd.apache.org/docs/2.4/mod/mod_proxy.html * mod_proxy, mod_proxy_html : * https://stackoverflow.com/questions/14431090/proxyhtml-to-rewrite-url * https://httpd.apache.org/docs/2.4/mod/mod_proxy.html * http://wiki.uniformserver.com/index.php/Reverse_Proxy_Server:_mod_proxy_html * https://httpd.apache.org/docs/2.4/mod/mod_proxy_html.html * mod_bw : Bandwidth limit * http://linuxpoison.blogspot.de/2012/02/setup-and-configure-bandwidth-limiting.html * Protected web directories * http://www.debianhelp.co.uk/htaccess.htm * mod_status * http://askubuntu.com/questions/239631/how-can-i-watch-the-current-connections-on-my-apache-webserver * fpm multiple php versions * https://www.digitalocean.com/community/tutorials/how-to-run-multiple-php-versions-on-one-server-using-apache-and-php-fpm-on-ubuntu-20-04