Hits : 5114

Yaws :: yet another web server


yaws


http://yaws.hyber.org/


http://yaws.hyber.org/yman.yaws?page=yaws.conf


Το πρόγραμμα yaws είναι υψηλής απόδοσης διακομιστής HTTP & HTTPS, ειδικά προσαρμοσμένο για διαδικτυακές εφαρμογές δυναμικού περιεχομένου.


Yaws is a HTTP high perfomance 1.1 webserver particularly well suited for dynamic-content webapplications.


top


Linux Installation


Μία πολύ απλή εγκατάσταση μπορεί να γίνει με τις παρακάτω εντολές:


$ wget -c http://yaws.hyber.org/download/yaws-1.88.tar.gz
$ tar zxvf yaws-1.88.tar.gz
$ cd yaws
$ ./configure
$ make
$ make install


Με τις παραπάνω εντολές έχουμε καταφέρει να εγκαταστήσουμε τον web server μας.
Οι προκαθορισμένες διαδρομές των καταλόγων, που ορίζονται από την παραπάνω εξ' ορισμού εγκατάσταση, είναι οι εξής:


Αρχεία Ρυθμίσεων:

etc files went into        /usr/local/etc


Εκτελέσιμα αρχεία:

executables went into      /usr/local/bin


Βιβλιοθήκες:

library files went into    /usr/local/lib/yaws


Αρχεία log και διάφορα άλλα (pid file):

var files went into        /usr/local/var


Προκαθορισμένος κατάλογος ενός διαδικτυακού ιστότοπου:

default docroot went into  /usr/local/var/yaws/www


Φυσικά με την εντολή:


./configure --help


Μπορεί να δει κανείς το πλήθος των επιλογών που μπορεί να ορίσει, όπως παράδειγμα να ορίσει τον κατάλογο εγκατάστασης.


top


Windows Installation


Κι όμως υπάρχει και Windows πρόγραμμα εγκατάστασης:


fileYaws-1.88-windows-installer.exe


top


Check


Για να δούμε την έκδοση του προγράμματος


# /usr/local/bin/yaws -v
Yaws 1.88


Για να δούμε περισσότερες πληροφορίες:


/usr/local/bin/yaws --help


Ένα πλήρες output της παραπάνω εντολής είναι το εξής:


usage:  
 
 
       yaws -i | --interactive       — interactive (no daemon) mode
       yaws -w | --winteractive      — cygwin interactive (werl) 
       yaws --daemon                 — daemon mode
 
 
       Auxiliary flags for the daemon: 
            --id Id —  set system id --debug             —  debug mode
            --nodebug           —  turn off debug mode
            --conf File         —  set config file
            --tracetraf         —  trace traffic
            --tracehttp         —  trace http traffic
            --traceout          —  trace output to stdout
            --version           —  print version
            --pa path           —  add load path
            --mnesiadir dir —  start Mnesia in dir
            --proto_dist Mod —  use Mod for distrib
            --sname xxx —  start with sname xxx --name xxx —  start with name xxx --runmod mod —  call mod:start/0 at startup
            --heart             —  auto restart yaws if it crashes
            --heart-restart=C,T —  allow C heart restarts in T seconds
            --erlarg X —  pass argument X to /usr/bin/erl
            --setcookie X —  set an erlang cookie
            --run_erl X —  use run_erl with pipe-id X --to_erl X —  connect to pipe-id X --disable-kpoll     —  pass +K false to erlang
 
ctl functions ... 
        yaws --hup [--id ID]                 — hup the daemon, reload conf
        yaws --stop [--id ID]                — stop the daemon 
        yaws --debug-dump [--id ID]          — produce a debug dump 
        yaws --status [--id ID]              — query the daemon status 
        yaws --load Modules                  — load modules 
        yaws --ls                            — list Yaws nodes and their status
        yaws --ctltrace traffic|http         — toggle trace of running daemon
        yaws --check YawsFile [IncDirs]      — test compile File 
        yaws --wait-started[=secs] [--id ID] — wait for daemon to be ready
        yaws --stats [--id ID]               — show daemon statistics

top


Configuration


Αφού ολοκληρώσουμε την εγκατάσταση είμαστε έτοιμοι να δούμε ότι όλα είναι δουλεύουν σωστα.


Το αρχείο ρυθμίσεων του yaws βρίσκεται κάτω από τον κατάλογο της εγκατάστασης:


/usr/local/etc/yaws/yaws.conf


ένα τυπικό παράδειγμα του αρχείου ρυθμίσεων είναι το εξής:


logdir = /usr/local/var/log/yaws
ebin_dir = /usr/local/lib/yaws/examples/ebin
ebin_dir = /usr/local/var/yaws/ebin
include_dir = /usr/local/lib/yaws/examples/include
max_connections = nolimit
trace = false
use_old_ssl = false
copy_error_log = true
log_wrap_size = 1000000
log_resolve_hostname = false
fail_on_bind_err = true
auth_log = true
pick_first_virthost_on_nomatch = true
use_fdsrv = false
<server myarch>
        port = 80
        listen = 0.0.0.0
        docroot = /usr/local/var/yaws/www
        appmods = <cgi-bin, yaws_appmod_cgi>        
</server>
<server localhost>
        port = 80
        listen = 0.0.0.0
        docroot = /tmp
        dir_listings = true
        statistics = true
        <auth>
                realm = foobar
                dir = /
                user = foo:bar
                user = baz:bar
        </auth>
</server>
<server myarch>
        port = 443
        docroot = /tmp
        listen = 0.0.0.0
        dir_listings = true
        <ssl>  
                keyfile = /usr/local/etc/yaws/yaws-key.pem
                certfile = /usr/local/etc/yaws/yaws-cert.pem
                depth = 0
        </ssl>
</server>

Εξαιρετικά απλό και straight forward.


# /usr/local/bin/yaws


Και στην συνέχεια στον firefox πληκτρολογούμε την εξής ηλεκτρονική διεύθυνση:


http://myarch/

Το οποίο θα μας επιστρέψει την αρχική σελίδα του yaws.


ΠΡΟΣΟΧΗ: Μην μπερδευτείτε, το myarch είναι το hostname του μηχανήματός μου! Εσείς θα βάλετε το δικό σας.


top


Παράρτημα


O yaws έχει την δυνατότητα να συνδεθεί με την php ώστε να υποστηρίζει δυναμικά site.
Ο τρόπος με τον οποίο γίνεται αυτό είναι μέσω της χρήσης του fastcgi.


Περισσότερα για το fastcgi μπορεί κανείς να βρει στα παρακάτω urls:


http://wiki.nginx.org/NginxHttpFcgiModule
http://www.fastcgi.com
http://en.wikipedia.org/wiki/FastCGI

php 


http://php.net/


PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML.


Τυπική εγκατάσταση php (από την έκδοση 5.3.0 και μετά, η εγκατάσταση της php είναι εξ' ορισμού fast-cgi)

$ wget -c http://gr2.php.net/distributions/php-5.3.2.tar.bz2
$ tar jxvf php-5.3.2.tar.bz2
$ cd php-5.3.2
$ ./configure
$ make
$ make install


top



Υπάρχουν δύο, παρόμοιοι μεν – διαφορετικοί δε, τρόποι για να συνδέσουμε την Php με τον Yaws.
Ο ένας είναι μέσω του CGI, ο άλλος μέσω του Fast-Cgi.
Κι ενώ ακούγονται και λειτουργούν περίπου με τον ίδιο τρόπο το configuration μας στην κάθε περίπτωση είναι διαφορετικό.

CGI 


Φαινομενικά ο ευκολότερος (και πιο παραδοσιακός) τρόπος.
Εάν το εκτελέσιμο του php-cgi είναι σε αυτή την διαδρομή:

/usr/bin/php-cgi

τότε δεν χρειάζεται να πειράξουμε καθόλου το yaws.conf μας.


Αρκεί να τροποποιήσουμε μία μόνο μεταβλητή στο php.ini μας.


cgi.force_redirect = 0


Αλλιώς θα χρειαστεί να δηλώσουμε το path του php-cgi στο yaws.conf.
Παράδειγμα:


php_exe_path = /usr/local/bin/php-cgi


ΠΡΟΣΟΧΗ: Το php.ini πρέπει να βρίσκεται στην σωστή τοποθεσία!
Πληκτρολογήστε την παρακάτω εντολή για να βρείτε το σωστό path, στο οποίο έχετε ή πρέπει να τοποθετήσετε το php.ini


echo '<?php phpinfo(); ?>' | php | grep 'php.ini'


top


Fast-Cgi


Ο εναλλακτικός τρόπος (μιας και η php το υποστηρίζει) είναι να τρέξουμε την php σε μία TCP πόρτα
στην οποία θα ακούει τα αιτήματα του web server μας για να εξυπηρετεί τις σελίδες php που έχουμε


Πχ.


/usr/local/bin/php-cgi -b 3000


top


yaws.conf

Τώρα θα πρέπει να δηλώσουμε στον yaws μας όλες τις php σελίδες μας να τις στέλνει στην fast-cgi php 
για να μεταφράζονται σε html.


Οπότε προσθέτουμε το εξής στο αρχείο ρυθμίσεων:


fcgi_app_server = localhost:3000


Ναι τόσο απλό είναι!


ΠΡΟΣΟΧΗ: Η προσθήκη πρέπει να γίνει στο αντίστοιχο virtual host μας, στην δική μου περίπτωση ολόκληρο το configuration είναι ως εξής:


<server myarch>
        port = 80
        listen = 0.0.0.0
        docroot = /usr/local/var/yaws/www
        appmods = <cgi-bin, yaws_appmod_cgi>
        # ebal
        fcgi_app_server = localhost:3000
</server>

top


php files

Πολύ μεγάλη προσοχή στο εξής:


Ο yaws by default υποστηρίζει τις εξής καταλήξεις αρχείων:


.yaws
.php
.cgi
.fcgi


αλλά τα αρχεία PHP, θα προσπαθήσει να τα στείλει στο php-cgi πρόγραμμα.
Γεγονός που είναι λάθος, καθώς το php-cgi είναι το fast-cgi της php και δεν παίζει σε interactive mode!


Άρα θα πρέπει για να κάνετε χρήση της php over fast-cgi να αλλάξετε την κατάληξη των αρχείων από php σε fcgi !!!


Ορίστε ένα αρχείο δοκιμής:


/usr/local/var/yaws/www/p.fcgi


<?php
	phpinfo();
?>


Και στον firefox γράφουμε το εξής:


http://myarch/p.fcgi


για να δούμε ότι λειτουργεί άψογα.


ΥΓ: Μόλις βρω πως μπορεί να παίξει χωρίς την αλλαγή της κατάληξης – θα το προσθέσω εδώ!



top