Ohne langes Gerede: ich bin froh, dass ich scheinbar der Erste bin, der es geschafft hat Nginx unter Uberspace zum laufen zu bekommen. Der einzige Google Treffer hier ist leider veraltet und hat nur bedingt geholfen.

Schritt 1 - Support anschreiben:

Das Gute vom obigen Link war, dass ich gleich mit dem richtigen Schritt angefangen habe. Wie unter 3. beschrieben müsst ihr eure Domains direkt an Pound anbinden lassen. Also erstmal den Support anschreiben.

Schritt 2 - Nginx als non-root bauen

  1. wget http://nginx.org/download/nginx-1.9.9.tar.gz (besorgt euch die letzte Mainline Version, in meinem Fall die 1.9.9)
  2. tar xf nginx-1.9.9.tar.gz (package entpacken)
  3. rm nginx-1.9.9.tar.gz (danach braucht ihr es nicht mehr - löschen)

Bevor ihr nun baut empfehle ich die nginx.conf von der mainline Version gleich anzupassen, damit es nach dem bauen keine Probleme gibt. (Danke an folgenden Link)

  1. nano nginx-1.9.9/conf/nginx.conf
  2. Folgendes eintragen (USER entsprechend mit eurem ersetzen):

    daemon off;
    pid /home/USER/tmp/nginx.pid;
    error_log /home/USER/tmp/error.log;
    worker_processes 4;
    events {
        worker_connections 1024;
    }
    
    http {
        client_body_temp_path /home/USER/tmp/client_body;
        fastcgi_temp_path /home/USER/tmp/fastcgi_temp;
        proxy_temp_path /home/USER/tmp/proxy_temp;
        scgi_temp_path /home/USER/tmp/scgi_temp;
        uwsgi_temp_path /home/USER/tmp/uwsgi_temp;
    
        set_real_ip_from  127.0.0.1;
        set_real_ip_from  ::1;
        real_ip_header    X-Forwarded-For;
    
        fastcgi_buffers 8 16k;
        fastcgi_buffer_size 32k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    
        client_header_buffer_size 64k;
        large_client_header_buffers 4 64k;
        server_tokens off;
    
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
    
        include /etc/nginx/mime.types;
    
        log_format   main '$remote_addr - $remote_user [$time_local] $status '
        '"$request" $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"';
    
        default_type application/octet-stream;
    
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    
        server {
                listen 63777;
                server_name deine-domain.de;
                return 301 https://www.deine-domain.de$request_uri;
                port_in_redirect off;
        }
    
        server {
                listen 63777;
                server_name deine-domain.de;
    
                port_in_redirect off;
    
                access_log /home/USER/tmp/access.log;
                error_log /home/USER/tmp/error.log;
    
                index index.html index.php;
                root /var/www/virtual/USER/html;
    
                location / {
                        proxy_set_header  Host $host;
                        proxy_set_header X_FORWARDED_PROTO https;
                        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header  X-Url-Scheme $scheme;
                        proxy_redirect    off;
                        proxy_max_temp_file_size 0;
                        try_files $uri $uri/ /index.php?$args;
                }
    
                location ~ \.php$ {
                        try_files $uri =404;
                        fastcgi_split_path_info ^(.+\.php)(/.+)$;
                        fastcgi_pass unix:/home/USER/etc/php5-fpm.sock;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        fastcgi_index index.php;
                        fastcgi_param HTTPS on;
                        include fastcgi_params;
                }
        }
    }

    Zusammengefasst passiert folgendes:

    • daemon off ist wichtig, damit wir es später als daemontools verwalten lassen können
    • die .../tmp/... Angaben sind dafür da damit nginx auf Orte zugreifen kann auf denen ihr Zugriffsrechte habt
    • port_in_redirect off ist ein kleines aber wichtiges Detail, damit eure URLs keinen Port mitbekommen
    • buffer, gzip und sonstiges Zeug vor dem server Block sind meine persönlichen tweaks
    • der erste server Block ist für euch nur relevant wenn ihr wie ich von deine-domain.de auf https://www.deine-domain.de umleiten wollt.
    • denkt dran alle USER durch euren auszutauschen
    • set_real_ip_from usw. braucht ihr um reale UPs in den Logs / Zugriffsstatistiken sehen zu können
    • im location Block braucht ihr zwingend try_files $uri $uri/ /index.php?$args; wenn ihr z.B. WordPress oder sonstige PHP basierte Webandwendungen laufen lassen wollt
    • die proxys sind meine settings die ihr nicht zwingend braucht
    • wichtig wird es nun in der php Location. Im Gegensatz zu Apache ist dies eure Anbindung zu PHP. Die muss sitzen!
    • zu fastcgi / php-fpm komme ich gleich, aber hier schon mal wichtig: fastcgi_pass unix:/home/USER/etc/php5-fpm.sock; und fastcgi_param HTTPS on; wenn ihr https für euer Web nutzt

Jetzt endlich bauen:

  1. cd nginx-1.9.9/
  2. ./configure --prefix=$HOME/nginx --with-http_realip_module --with-ipv6 --with-http_ssl_module (mit ssl Modul bauen für https)
  3. make
  4. make install
  5. ln -s ~/nginx/sbin/nginx ~/bin (um später leichter drauf zugreifen zu können)

Schritt 3 - PHP

Solltet ihr einfache html Websiten betreiben seid ihr nun schon fertig. Wer PHP Websiten (WordPress, Typo, usw.) betreibt muss nun Nginx dazu bringen mit PHP zu kommunizieren. Dafür sind folgende Schritte notwendig:

  • belest euch erstmal im Wiki zu der PHP Struktur bei Uberspace (schadet nie)
  • dort habt ihr (dank mir :)) schon das Paket /package/host/localhost/php-5.6.16 die wichtige PHP Version, bei der php-fpm mit gebaut wurde, dass ihr erstmal zu euch rüber konfiguriert:
    1. cp /package/host/localhost/php-5.6.16/sbin/php-fpm /home/$USER/bin/(kopiert die php-fpm zu euch Zwecks Rechte)
    2. cp /package/host/localhost/php-5.6.16/etc/php-fpm.conf.default /home/$USER/etc/php-fpm.conf (kopiert die php-fpm.conf zu euch Zwecks Rechte)
    3. chmod +x ~/bin/php-fpm (macht php-fpm ausführbar)
    4. Ändere in der php-fpm.conf den Pfad zum error log zwecks Rechte: error_log = /home/USER/tmp/php-fpm.log (USER durch deinen user Namen austauschen)
    5. Ändere in der php-fpm.conf listen = /home/USER/etc/127.0.0.1:9000 in listen = /home/USER/etc/php5-fpm.sock oder kommentiert es aus
    6. Ändere in der php-fpm.conf daemonize = yes in daemonize = no damit wir es gleich als daemontools nutzen können
    7. legt euch eine leere php5-fpm.sock Datei in etc an nano ~/etc/php5-fpm.sock (leerzeichen > STRG+X + Y + Enter)

Schritt 4 - Daemontools

Um das ganze nun starten / stoppen / neustarten zu können legen wir uns die Daemontools von Uberspace an (wir nehmen die leichte Variante):

#### Nginx
uberspace-setup-service nginx ~/bin/nginx -c ~/nginx/conf/nginx.conf

#### PHP
uberspace-setup-service php-fpm /package/host/localhost/php-5.6.16/sbin/php-fpm --fpm-config ~/etc/php-fpm.conf

Das müsste es gewesen sein. Versucht eine index.php in /var/www/virtual/$USER/html mit dem Inhalt <?php phpinfo(); ?> aufzurufen.

Sollte eine 502 kommen liegt es an PHP, bei einer 404 an einer falschen Verzeichnis Zuweisung und bei diesen oder sonstigen Fehlern könnt ihr mir oder dem hervorragenden Uberspace Support gern eine Mail schreiben:
[email protected]
[email protected] (danke noch mal an Moritz!)

Nächster Beitrag Vorheriger Beitrag