Current time: 05-04-2024, 05:47 AM Hello There, Guest! (LoginRegister)


Post Reply 
 
Thread Rating:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[ERLEDIGT]Nginx Howto, bitte ins Wiki übernehmen...
Author Message
mad max Offline
Junior Member
*

Posts: 47
Joined: Aug 2007
Reputation: 0
Post: #1
[ERLEDIGT]Nginx Howto, bitte ins Wiki übernehmen...
So da mein Howto leider zerschossen wurde mache ich es hier nochmal neu:

Ok jetzt werde ich hier mal ein HOWTO posten, mit dem ich meinen Apache durch den Nginx enlastet habe. Es sei aber angemerkt das dieses HOWTO noch nicht vollständig ausgereift ist. Auf jeden Fall wäre es nett, wenn Leute die sich mit ispCP auskennen an der Fertigstellung/optimierung mitwirken könnten.

Also fange ich mal an:
Ich gehe davon aus das ein fertig eingerichtetes und lauffähiges ispCP System besteht. Als IP verwende ich diese 192.168.1.1 diese muß natürlich bei jedem durch seine eigene ersetzt werden.

Den Apache habe ich erstmal auf Port81 gelegt.Wir editieren /etc/apache2/ports.conf

Code:
Listen 192.168.1.1:81

Sämtliche bereits angelegten virtual hosts müssen ebenfalls angepasst werden. Ich habe die Datei /etc/apache2/sites-available/ispcp.conf mit einem Editor geöffnet. Dort alle angeleten v-hosts geändert dh. Port 80 durch 81 ersetzt.
Hier mal ein kleiner Auszug muß natülich bei jedem schon angelgtem v-host durchgeführt werden.

Code:
# httpd [192.168.1.1] virtual host entry BEGIN.

NameVirtualHost 192.168.1.1:81

# httpd [{DMN_GRP}] dmn group entry BEGIN.
# httpd [{DMN_GRP}] dmn group entry END.
# httpd [waqui2000.halle17.de] dmn group entry BEGIN.

evtl. gibt es ne möglichkeit dieses einfacher zu lösen wenn ja bitte hier posten.

So jetzt installieren wir nginx:

Code:
apt-get install nginx

Jetzt die nginx.conf Datei zu finden etc/nginx/ nginx.conf mit dieser Datei ersetzen:

Code:
user www-data;
worker_processes 2;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    server_names_hash_bucket_size   64;
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log    /var/log/nginx/access.log;

log_format  main  '$remote_addr - $remote_user [$time_local] $status '
                      '"$request" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "http_x_forwarded_for"';
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;
    
    gzip  on;
server {
    listen       192.168.1.1:80 default;
    #server_name  halle17.de;
    access_log /var/log/nginx/default.access.log  main;

    location / {
        proxy_pass http://192.168.1.1:81;
        
   }
}

    include /etc/nginx/proxy.conf;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Wie ihr seht läuft nginx auf 80 und apache auf 81!!

Dann erstellen wir eine neue Datei Namens"proxy.conf" unter /etc/nginx/
Mit folgendem Inhalt:

Code:
proxy_redirect          off;
proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    10m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffers           32 4k;

Dieser Teil der oben geposteten nginx.conf

Code:
server {
    listen       XXX.XXX.XXX.XXX:80 default;
    server_name  _;
    access_log /var/log/nginx/default.access.log main;

    location / {
        proxy_pass http://192.168.1.1:81;
        include /etc/nginx/proxy.conf;
   }
}

Wird der default Eintrag dh. ist bei nginx kein v-host angelegt wird gnadenlos alles an den apache weitergeleitet!!

Um jetzt dem nginx mitzuteilen welche v-host auf dem Server laufen. Werden so habe ich es zur Zeit am laufen pro v-host eine Datei angelegt.
In diesem Verzeichniss werden die Dateien erstellt "/etc/nginx/sites-enabled"
Der Name spielt keine rolle um den Überblick zu behalten, habe ich den Domainnamen genommen.
Der Inhalt dieser Datei/en sieht so aus:

Code:
server {
    listen 192.168.1.1:80;
    server_name  www.xxxxxxx.de xxxxxxx.de *.xxxxxxxxx.de;

    location / {
        proxy_pass http://192.168.1.1:81;
        include /etc/nginx/proxy.conf;
    }

    location ~* ^.+.(jpe?g|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|mi​di|wav|bmp|rtf|js|swf|avi|mp3)$ {
        expires 30d;
        root /var/www/xxxxxx/xxxxxx.de/htdocs;
    }
}

Server Name und root muß natürlich angepasst werden!!!

Jetzt starten wir Apache neu:

Code:
/etc/init.d/apache2 restart

Jetzt noch den Nginx starten

Code:
/etc/init.d/nginx start

Code:
/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf

Ein Nginx reload geht so:

Code:
/etc/init.d/nginx restart

Code:
kill -HUP `cat /var/run/nginx.pid`

So weit so gut bis dorthin lief auf anhieb alles Problemlos. Nur mußte ich feststellen das in den Apache Logs falsche ober besser gesagt nur noch die ip 192.168.1.1 geloggt wird und nicht mehr die tatsächliche ip. Aber auch dafür habe ich eine Lösung gefunden.

mod-rpaf war die Lösung

Code:
apt-get libapache2-mod-rpaf

Jetzt mußten nochmal die v-host configs von ispCP editiert werden.
Also nochmal /etc/apache2/sites-available/ispcp.conf mit einem editor geöffnet und bei jedem vhost diesen Teil hinzugefügt:

Code:
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 192.168.1.1

Sieht dann so aus:

Code:
# httpd [192.168.1.1] virtual host entry BEGIN.

NameVirtualHost 192.168.1.1:81



# httpd [{DMN_GRP}] dmn group entry BEGIN.
# httpd [{DMN_GRP}] dmn group entry END.
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 192.168.1.1

<IfModule mod_cband.c>
    <CBandUser waqui2000.halle17.de>
        # CBandUserLimit 0Mi
        # CBandUserScoreboard /var/www/scoreboards/waqui2000.halle17.de
        # CBandUserPeriod 4W
        # CBandUserPeriodSlice 1W
        # CBandUserExceededURL http://xxxxxxxxxxx/errors/bw_exceeded.html
    </CBandUser>
</IfModule>

So das war es alles läuft super schneller und der Serverload ist deutlich geringer geworden.

Um das jetzt weitgehend zu automatisieren dh wenn eine neue Domain angelegt wird habe ich folgende Templates editiert.

/etc/ispcp/apache/parts

-dmn_entry.tpl
-sub_entry.tpl
-vh_entry.tpl


Code:
<VirtualHost {DMN_IP}:81>

    <IfModule suexec_module>
           SuexecUserGroup {SUEXEC_USER} {SUEXEC_GROUP}
    </IfModule>

    ServerAdmin     webmaster@{DMN_NAME}
    DocumentRoot    {WWW_DIR}/{DMN_NAME}/htdocs

    ServerName      {DMN_NAME}
    ServerAlias     www.{DMN_NAME} {DMN_NAME} *.{DMN_NAME}

    Alias /errors   {WWW_DIR}/{DMN_NAME}/errors/

    RedirectMatch permanent ^/ftp([\/]?)        http://{BASE_SERVER_VHOST}/ftp/
    RedirectMatch permanent ^/pma([\/]?)        http://{BASE_SERVER_VHOST}/pma/
    RedirectMatch permanent ^/webmail([\/]?)    http://{BASE_SERVER_VHOST}/webmail/

    ErrorDocument 401 /errors/401.html
    ErrorDocument 403 /errors/403.html
    ErrorDocument 404 /errors/404.html
    ErrorDocument 500 /errors/500.html
    ErrorDocument 503 /errors/503.html

RPAFenable On
RPAFsethostname On
RPAFproxy_ips {DMN_IP}

    <IfModule mod_cband.c>
        CBandUser {DMN_GRP}
    </IfModule>

    # httpd awstats support BEGIN.
    # httpd awstats support END.

    # httpd dmn entry cgi support BEGIN.
    # httpd dmn entry cgi support END.

    <Directory {WWW_DIR}/{DMN_NAME}/htdocs>
        # httpd dmn entry PHP support BEGIN.
        # httpd dmn entry PHP support END.
        Options -Indexes Includes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    # httpd dmn entry PHP2 support BEGIN.
    # httpd dmn entry PHP2 support END.

    Include {CUSTOM_SITES_CONFIG_DIR}/{DMN_NAME}.conf

</VirtualHost>

Code:
NameVirtualHost {SUB_IP}:81

# httpd [{DMN_GRP}] dmn group entry BEGIN.
# httpd [{DMN_GRP}] dmn group entry END.

# httpd [{ALS_NAME}] als entry BEGIN.
# httpd [{ALS_NAME}] als entry END.

Code:
<VirtualHost {SUB_IP}:81>

    #
    #User {SUEXEC_USER}
    #Group {SUEXEC_GROUP}
    #

    <IfModule suexec_module>
           SuexecUserGroup {SUEXEC_USER} {SUEXEC_GROUP}
    </IfModule>

    ServerAdmin     webmaster@{DMN_NAME}
    DocumentRoot    {WWW_DIR}/{DMN_NAME}{MOUNT_POINT}/htdocs

    ServerName      {SUB_NAME}
    ServerAlias     www.{SUB_NAME} {SUB_NAME} *.{SUB_NAME}

    Alias /errors {WWW_DIR}/{DMN_NAME}/errors/

    ErrorDocument 401 /errors/401.html
    ErrorDocument 403 /errors/403.html
    ErrorDocument 404 /errors/404.html
    ErrorDocument 500 /errors/500.html
    ErrorDocument 503 /errors/503.html

RPAFenable On
RPAFsethostname On
RPAFproxy_ips {SUB_IP}

    <IfModule mod_cband.c>
        CBandUser {DMN_GRP}
    </IfModule>

    # httpd sub entry cgi support BEGIN.
    # httpd sub entry cgi support END.

    <Directory {WWW_DIR}/{DMN_NAME}{MOUNT_POINT}/htdocs>
        # httpd sub entry PHP support BEGIN.
        # httpd sub entry PHP support END.
        Options -Indexes Includes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    # httpd sub entry PHP2 support BEGIN.
    # httpd sub entry PHP2 support END.

    Include {CUSTOM_SITES_CONFIG_DIR}/{SUB_NAME}.conf

</VirtualHost>

Jetzt müßte man es nur noch hinbekommen das auch gleichzeitig hier /etc/nginx/sites-enabled/" eine neue Datei erstellt wird mit dem neuen v-host wie er oben beschrieben ist. Dann bleibt nur noch der reload von nginx damit die neue Datei geladen wird.

Achtung "libapache2-mod-rpaf " gibt es nur für Lenny!! Für alle die Etch verwenden folgt dieser Teil:

Code:
cd /usr/local/src

Code:
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz

Code:
tar xzf mod_rpaf-0.6.tar.gz

Code:
cd mod_rpaf-0.6

Compiling rpaf module:

Code:
nano /usr/local/src/mod_rpaf-0.6/makefile

Change APXS=$(shell which apxs) to APXS=/usr/sbin/apxs.

Code:
make rpaf-2.0 && make install-2.0

Diesen Teil natürlich nicht vergessen ist ja ich HOWTO beschrieben:

Code:
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 192.168.1.1


So das ganze läuft jetzt seit dem 15.01.2009 auf meinem Produktivserver ohne Probleme. Allerdings müssen die Änderungen noch per Hand erledigt werden wie zb die V-Host Einträge für den Nginx.

mfg
Mad Max
(This post was last modified: 10-10-2009 12:27 AM by ZooL.)
03-07-2009 11:36 PM
Find all posts by this user Quote this message in a reply
FISA4 Offline
Member
***

Posts: 668
Joined: Feb 2008
Reputation: 15
Post: #2
RE: Nginx Howto, bitte ins Wiki übernehmen...
Test auf einem VMWare Testsystem:
Frisch installiertes Debian Etch mit Omega 1.0.0
512MB

Folgender Fehler tritt auf:
Quote:alpha:/var/www/ispcp/gui/tools# apt-get install nginx
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut... Fertig
Die folgenden NEUEN Pakete werden installiert:
nginx
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen 185kB Archive geholt werden.
Nach dem Auspacken werden 524kB Plattenplatz zusätzlich benutzt.
Hole:1 http://ftp.de.debian.org etch/main nginx 0.4.13-2 [185kB]
Es wurden 185kB in 0s geholt (229kB/s)
Wähle vormals abgewähltes Paket nginx.
(Lese Datenbank ... 28073 Dateien und Verzeichnisse sind derzeit installiert.)
Entpacke nginx (aus .../nginx_0.4.13-2_i386.deb) ...
Richte nginx ein (0.4.13-2) ...
Starting nginx: invoke-rc.d: initscript nginx, action "start" failed.
dpkg: Fehler beim Bearbeiten von nginx (--configure):
Unterprozess post-installation script gab den Fehlerwert 1 zurück
Fehler traten auf beim Bearbeiten von:
nginx
E: Sub-process /usr/bin/dpkg returned an error code (1)
alpha:/var/www/ispcp/gui/tools#

Was kann das sein?

Gruß
FISA4
03-11-2009 11:48 AM
Find all posts by this user Quote this message in a reply
BeNe Offline
Moderator
*****
Moderators

Posts: 5,899
Joined: Jan 2007
Reputation: 68
Post: #3
RE: Nginx Howto, bitte ins Wiki übernehmen...
Was kommt für ein Fehler wenn Du ngnix jetzt starten willst ?

Greez BeNe
03-11-2009 07:01 PM
Visit this user's website Find all posts by this user Quote this message in a reply
mad max Offline
Junior Member
*

Posts: 47
Joined: Aug 2007
Reputation: 0
Post: #4
RE: Nginx Howto, bitte ins Wiki übernehmen...
Hallo ich denke es liegt daran das Apache und Nginx noch auf dem selben Port laufen. Stop mal den Apache und starte dann Nginx wenn es funzt weißt du woran es lag.


.......und dann nach dem Howto oben vorgehen. Erst alle Änderungen machen und dann Nginx starten!!

mfg
(This post was last modified: 03-11-2009 10:30 PM by mad max.)
03-11-2009 10:28 PM
Find all posts by this user Quote this message in a reply
FISA4 Offline
Member
***

Posts: 668
Joined: Feb 2008
Reputation: 15
Post: #5
RE: Nginx Howto, bitte ins Wiki übernehmen...
AUTSCH bin ich blöd...

nach dem Port ändern noch ein
Code:
/etc/init.d/apache2 restart

schon läuft die installation auch ohne fehler durch.

Bitte ins HowTo mit aufnehmen !


Gruß FISA4
(This post was last modified: 03-12-2009 12:54 PM by FISA4.)
03-12-2009 12:32 PM
Find all posts by this user Quote this message in a reply
BeNe Offline
Moderator
*****
Moderators

Posts: 5,899
Joined: Jan 2007
Reputation: 68
Post: #6
RE: Nginx Howto, bitte ins Wiki übernehmen...
Gibt es denn wirklich eine Performance verbesserung da durch ?
Kann einer Zahlen in den Raum werfen oder positive Erfahrungen von sich geben ?

Greez BeNe
Das Thema ansicht ist ja echt interessant!
nginx kann auch "irgendwie" direkt mit fast_cgi prozessen arbeiten.
--> http://wiki.nginx.org/NginxHttpFcgiModule

Zudem gibt es noch die möglichkeit es als POP3/IMAP & SMTP + SSL Proxy laufen zu lassen.
--> http://wiki.nginx.org/NginxModules#Mail_modules

Das schreit gerade nach einem Test Smile
Gibt es Anhänger ?

Greez BeNe
(This post was last modified: 07-01-2009 05:03 PM by BeNe.)
07-01-2009 04:43 PM
Visit this user's website Find all posts by this user Quote this message in a reply
Top44 Offline
Member
***

Posts: 271
Joined: Sep 2007
Reputation: 1
Post: #7
RE: Nginx Howto, bitte ins Wiki übernehmen...
Also ganz ehrlich, ich denke man sollte es nicht erst Anfangen Lighttpd versuchen zu Integrieren, sondern Nginx als Webserver nehmen.
Die Konfiguration sieht im ersten Schritt Optimal bis Perfekt aus.
Gerade die Optionalen Addons haben es mir angetan.

Grüße
07-01-2009 08:08 PM
Find all posts by this user Quote this message in a reply
mad max Offline
Junior Member
*

Posts: 47
Joined: Aug 2007
Reputation: 0
Post: #8
RE: Nginx Howto, bitte ins Wiki übernehmen...
(07-01-2009 04:43 PM)BeNe Wrote:  Gibt es denn wirklich eine Performance verbesserung da durch ?
Kann einer Zahlen in den Raum werfen oder positive Erfahrungen von sich geben ?

Greez BeNe
Das Thema ansicht ist ja echt interessant!
nginx kann auch "irgendwie" direkt mit fast_cgi prozessen arbeiten.
--> http://wiki.nginx.org/NginxHttpFcgiModule

Zudem gibt es noch die möglichkeit es als POP3/IMAP & SMTP + SSL Proxy laufen zu lassen.
--> http://wiki.nginx.org/NginxModules#Mail_modules

Das schreit gerade nach einem Test Smile
Gibt es Anhänger ?


Greez BeNe


Hallo ich hatte es vor einiger Zeit, als ich dieses HowTo gepostet hatte auf einem Liveserver am laufen.
Auf diesem Server liefen hauptsächlich 2 Browsergames und noch ca 30wbb Foren. Durch den Einsatz von nginx gab es einen mächtigen Performance schub ich konnte es selbst kaum glauben. Allerdings mußte jedesmal beim anlegen einer neuen Domain ein neuer V-Host in Nginx manuell angelegt werden. Ich hatte damals leider keine Anhänger gefunden die sich an der umsetzung beiteiligt haben. Ansonsten hätte man dieses sicherlich auch noch automatisieren können.

Der letzte Vorschlag hier im Tread, Apache komplett durch nginx auszutauschen ist wohl die beste Möglichkeit.
Ispcp mit kompletter nginx unterstützung wäre das non plus ultra :-))

mfg
Mad Max
(This post was last modified: 07-01-2009 10:07 PM by mad max.)
07-01-2009 10:05 PM
Find all posts by this user Quote this message in a reply
Top44 Offline
Member
***

Posts: 271
Joined: Sep 2007
Reputation: 1
Post: #9
RE: Nginx Howto, bitte ins Wiki übernehmen...
Im grunde sind es ja nur die Templates die dafür gebraucht werden, um in die ispcp.conf die vhosts zu erstellen. Ich denke das dies schon alles ist. Ich werde mich in der VM mal daran setzten.

Ich finde es überaus Interessant.

Grüße
07-02-2009 04:01 AM
Find all posts by this user Quote this message in a reply
grisu Offline
Junior Member
*

Posts: 64
Joined: Jun 2009
Reputation: 0
Post: #10
RE: Nginx Howto, bitte ins Wiki übernehmen...
Hi Leute

Ich habe einmal Tests mit einem TYPO3-System gemacht (auf einem sich langweilenden Server allerdings).
Per Default liess ich Apache auf Port 80 laufen und parallel nginx auf 8080. eAccelerator war aktiv in beiden Fällen.

To make a long story short: Ergebnis war ca. eine 50%ige Performance steigerung - bei Auslastung bestimmt noch mehr.

Apache - Parsing Time: ~60-80ms
Nginx - Parsing Time: ~30-40ms

ab test (500 requests)
Apache: Requests per second: 13.39 [#/sec] (mean)
Nginx: Requests per second: 27.16 [#/sec] (mean)

Alles in allem schon sehr beeindruckend... aber ob default-mässig apache2 ersetzt werden sollte, finde ich zweifelhaft. Die meisten kennen schlicht apache besser - insb. viele der apache-module. Optional wäre es bestimmt eine gute Idee.
Ich muss mich zuerst noch einarbeiten, bevor ich apache2 komplett wechseln werde... wenn überhaupt. Denn aus Performance-Gründen drängt sich das bei mir nicht auf.

LG
08-20-2009 12:31 AM
Find all posts by this user Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)