nginx konfiguration mit lets encrypt und subdomain

  • Hallo zusammen,


    ich scheitere an der Konfiguration von nginx. Ziel ist es, eine Website zu Testzwecken unter einer Subdomain zu betreiben, während die eigentliche Website über die normale Domain aufgerufen wird. Die Subdomain habe ich im CCP angelegt.

    Bis vor kurzem war Wordpress mit einem Zertifikat (Let's Encrypt, Certbot) installiert. Das Zertifikat für die Domain gibt es also und in der Default-Konfigurationsdatei (/etc/nginx/sites-available) sind einige Zeilen mit "# managed by Certbot" gekennzeichnet.


    Um zu verstehen wie nginx funktionert habe ich alle Konfigurationsdateien aus /etc/nginx/sites-enabled entfernt, das Verzeichnis ist leer. Trotzdem liefer nginx die Seite index.nginx-debian.html aus dem Verzeichnis /var/www/html aus Warum?


    Konfigurationsdateien die ich selber für die Subdomian anlege (sites-availabel, Link in sites-enabled) scheinen ignoriert zu werden. Warum?


    Es würde mich freuen, wenn mir jemand auf die Sprünge helfen kann.


    Viele Grüße

  • Um zu verstehen wie nginx funktionert habe ich alle Konfigurationsdateien aus /etc/nginx/sites-enabled entfernt, das Verzeichnis ist leer. Trotzdem liefer nginx die Seite index.nginx-debian.html aus dem Verzeichnis /var/www/html aus Warum?

    Wenn nginx keinen passenden Server Eintrag findet, geht der Request an den Default Server. Wenn du da eine Fehlerseite haben möchtest, musst du einen Default Server definieren, der eine solche ausgibt. Ist kein Default Server definiert, dann ist der erste beste Server auch der Default Server und somit werden deine Inhalte dann auch auf falschen Domainnamen ausgegeben. Siehe auch https://nginx.org/en/docs/http/request_processing.html und https://nginx.org/en/docs/http/server_names.html

    Konfigurationsdateien die ich selber für die Subdomian anlege (sites-availabel, Link in sites-enabled) scheinen ignoriert zu werden. Warum?

    nginx hat nur eine Konfigurationsdatei, der Rest läuft über includes. sites-enabled funktioniert nur, wenn in der nginx.conf die entsprechende include-Anweisung steht.


    Du kannst für jede Site, Location eigene Logdateien definieren, so kannst du ein wenig nachvollziehen, ob die Requests an der richtigen Stelle landen.


    Mit Certbot kann ich leider nicht helfen, da ich einen anderen Client nutze.

  • Vielen Dank für die Tipps, das hilft auf jeden Fall schon mal weiter. Ich habe auch noch andere Quellen gefunden und werde etwas Zeit brauchen, um mich einzulesen. Ich werde berichten ...


    > nginx hat nur eine Konfigurationsdatei, der Rest läuft über includes
    Das habe ich jetzt schon mal verstanden!

    Viele Grüße

  • Guten Morgen, Ich gehe davon aus das du deinen Server gesichert hast, den SSH Port geändert, du hast nftables installiert und alle eingehenden Ports auf "drop" gesetzt und nur diese zugelassen die du benutzt wie zb, http, https, smtp, pop3/imaps, ftp, ggfs. mysql (bei external usage). Das sieht in etwa so aus bei Debian 10/11

    # nftables Installation

    Anmerkung: Natürlich musst du noch die bereiche wie zb. SSH / FTP / Mailserver zugänge gegen Bruteforce attacken sichern, dazu benutze fail2ban. Kommen wir zu deiner zu deiner Frage wie es bei nginx aussieht, zur kurzen erklärung nginx ist weit aus besser wie Apache2, nginx verarbeitet mehrere gleiche verbindungen gleichzeitig und ist Ressourcen mässig leichter als Apache2. Mehr dazu kannst du aber im Internet nachschauen.


    # nginx Installation



    # Let's Encrypt Installation


    Code
    > apt-get update
    > apt-get install certbot
    > apt-get install python3-certbot-nginx
    > crontab -e
    
    # nginx Certbot
    5 00 * * * /usr/bin/certbot renew --quiet

    Anmerkung: nginx unterstützt certbot, also certbot bearbeitet die configs der domain dann selber und setzt die einträge.



    # PHP 8.0 Installation

    Anmerkung: PHP 8.0 ist derzeit noch in der Alpha oder Beta, viele benutzen noch PHP 7.4 jedoch kannst du PHP 8.0 und PHP 7.4 installieren und die PHP version später in der domain config festlegen in nginx.



    # PHP 7.4 Installation

    Code
    > apt-get install php7.4-fpm
    > apt-get install php7.4-{ssh2,gmp,xmlrpc,gd,xml,cli,soap,imap,mysql,cli,common,snmp,ldap,curl,mbstring,zip,gd,intl,mbstring,bcmath,opcache,readline,xml,xsl,bz2}
    > nano /etc/php/7.4/fpm/php.ini
    memory_limit = 256
    post_max_size = 512M
    upload_max_filesize = 512M
    
    > systemctl enable php7.4-fpm
    > systemctl start php7.4-fpm

    Anmerkung: PHP 7.4 wird aktuell noch von allen benutzt da es mehr kompatibilität hat als 8.0



    # MySQL (mariadb) Installation

    Code
    > apt install mariadb-server
    > mysql_secure_installation
    > mysql
    MYSQL: GRANT ALL ON *.* TO 'DEIN-NEUER-BENUTZERNAME'@'localhost' IDENTIFIED BY 'DEIN-PASSWORT-IN-PLAINTEXT' WITH GRANT OPTION;
    MYSQL: FLUSH PRIVILEGES;
    MYSQL: exit

    Anmerkung: MariaDB ist mehr "leichter" als MysqlD Server oder wie das heisst, daher verwenden sehr viele mariadb. wir führen die secure_installation aus und setzen zb. ein neues Root passwort, verbieten root zugang (nur local über ssh2) und legen einene neuen benutzer an wodrüber du später über PHPmyadmin als (admin) deine sachen verwaltest. Natürlich benutzen wir nur locale verbindungen, ist es notwendig external usage zu verwenden musst du den port in nftables freigeben und in fail2ban sichern (in fail2ban musst du dann mysql sichern + phpmyadmin)



    # phpMyAdmin Installation

    Anmerkung: Phpmyadmin wird installiert, wird mit ls (symlink) auf /home/phpmyadmin versetzt, es wird eine mysq.conf in nginx angelegt wo das rote deine domain ist und das blaue deine subdomain. Wie zb. mysql.yourdomain.de, das grüne "php8.0" ist die php version die du verwenden willst, dort kannste auch 7.4 eintragen wenn du 7.4 nutzen willst. Danach erfolgt der befehl für certbot um die subdomain für phpmyadmin SSL zu verpassen, dabei muss die subdomain auf die ip adresse deines servers schauen. certbot legt nun eigenständig das SSL certificat an und bearbeitet die mysql.conf im nginx ordner automatisch und setzt die einträge. Danach bearbeiten wir noch schnell die config.inc.php von phpmyadmin und setzen das blowfish password was ein 26 stelliger zahlencode ist der zufällig generiert wird (passwort generatoren im internet) mit groß klein buchstaben so wie zahlen. dann bearbeiten wir noch die config.default.php von phpmyadmin um "logging" zu aktivieren und setzen den path zur log datei damit fail2ban ips sperren kann die fehl-logins verursachen. Jetzt gehen wir noch in die jail.local von fail2ban und aktivieren den filter auf phpmyadmin. Jetzt erstellen wir noch die filter action in fail2ban und legen diue datei an phpmyadmin.conf und schmeissen da den regex code rein damit er auch die fehl-logins erkennt in der log datei und restarten fail2ban.

  • # Domains / Subdomains anlegen


    Anmerkung: wir erstellen eine config für die domain / subdomain im nginx ordner und setzen den server_name, log path und wo die webseite liegt (root), ich benutze als beispiel zb. einen ordner in /home der so heisst wie die domain selber. Man kann noch die Error pages definieren und die php version die man verwenden will (8.0/7.4 am ende wenn man SSL möchte lasse ich noch ein SSL cert generieren und certbot schmeisst die SSL settings auch selbst in die config.



    ----------------------------------------------------------------------------------------------------


    Den Part mit fail2ban habe ich ausgelassen, du kannst fail2ban einstellen das fail2ban mit nftables harmoniert, sprich, alles was in fail2ban landet kannste dann per firewall auch blocken automatisch blocken. Sprich da ist ein Bruteforce attack und fail2ban blockt mit nftables die ip adressen.


    Dazu kannst du wenn du das ganze weiter ausbauen möchtest dir bash datein bauen wodrüber du nginx steuerst, also start stop restart, domains anlegen + php version und das kannst du wiederrum auch erweitern mit ssh2 über php exec so das du dein eigenes interface bauen kannst wodrüber du die bash datei ansteuerst, sprich ein eigenes interface was über die bash file domains löscht / anlegt usw usw usw.


    Das ganze ist erweiterbar bis hin zum eigenen web interface :D


    ----------------------------------------------------------------------------------------------------


    Entschuldigung für das ignorieren von schreibfehler, aber so in etwa kann seine installation und betrieb mit nginx aussehen, dann sollte man noch pure-ftp als ftp server benutzen und dann kommt noch der mailserver (postfix/dovecot) dazu. ICH EMPFEHLE bei dem FTP und Mailserver gedöns die methode mit mysql virtual users, sprich man legt die FTP und Mailserver benutzer in einer MYSQL Tabelle an ohne jegliche benutzer im system hinzuzufügen.



    Ich hoffe ich konnte dir etwas helfen und nicht vergessen alles immer schön abzusichern mit nftables + fail2ban und mindestens immer 16 stellige passwörter benutzen oder höher :)

  • Wenn man die Grundlagen verstanden hat, was man wie machen muss, kann man anschließend auch etwas wie Keyhelp oder ISPConfig nehmen.

    Alternative zu pypmyadmin (was lange Zeit sehr vernachlässigt wurde) ist adminer. Einfach eine Datei ablegen und gut ist. Man müsste sich alle Funktionen von phpmyadmin anschauen ob man die alle braucht. Man kann auch an die DB im Zweifelsfall mittels VPN und weiteren Tools ran.

  • Halte ich für ein Gerücht. ;)

    NGINX performs 2.5 times faster than Apache according to a benchmark test performed by running up to 1,000 simultaneous connections. Another benchmark running with 512 simultaneous connections, showed that NGINX is about twice as fast and consumed less memory.


    Stand 07.01.2021


    Bevor man sich die Frage stellt, ob man nginx oder Apache2 wählt muss man wissen, was man möchte, nginx behandelt simultane Verbindungen in einem Prozess, dagegen startet Apache2 für jede Verbindung eigene Prozesse. Dieses wirkt sich auf die Stabilität des Systems aus und die Geschwindigkeit des Dienstes. Man sollte immer nur das verwenden und installieren, was man auch benötigt, nginx ist ein Leichtgewicht was sehr einfach zu installieren ist und Domains, Subdomains lassen sich mit einer einzigen config Datei beliebig anpassen. Apache2 enthält natürlich mehr Funktionen, Erweiterungen und Unterstützungen für andere Dienste daher ist es ein Schwergewicht. Jedoch benötigt man nicht alles von Apache2, und jeder der sich Gedanken macht, was er eigentlich benötigt trifft dem entsprechend dann seine Wahl. Ich selber fing mit Apache2 an und dann schön mit Froxlor und dann Copy Past, aber wenn man mal anfängt selbst nur das zu installieren und zu konfigurieren, was man tatsächlich benötigt ist das Endergebnis sehr besser und sauberer. Am Ende merkt man auch das es wesentlich einfacher ist alles selber zu Konfigurieren, als auf fertig Panels zuzugreifen wie Froxlor.

  • Ja, es gibt viele Infos zu dem Thema. Und wer die objektiv durchgeht erkennt, dass eine Aussage wie "nginx ist weit aus besser wie Apache2" nicht haltbar ist, weil viel zu undifferenziert.

    Nginx und Apache sind unterschiedlich, aber beide haben ihre Vor- und Nachteile, je nach Einsatzgebiet. Nicht selten werden sie sogar (über reverse proxy) zusammen eingesetzt.


    EDIT:

    Nun wurde allerdings inzwischen der vorherige Beitrag von Primeas, auf den ich mich bezog umfassend editert und relativiert.

    Somit fehlt zu meiner Replik nun leider ein wenig der Bezug. ;)

    Aber wenn ich den Beitrag hier nun auch noch ändere, bekommen wir nach und nach ein Chaos.

    Die verlängerte Bearbeitungszeit hat auch ihre Schattenseiten.

  • Nginx und Apache sind unterschiedlich, aber beide haben ihre Vor- und Nachteile, je nach Einsatzgebiet.

    Ich habe von Apache nicht wirklich viel Ahnung und mich bisher immer davor gedrückt, statt nginx auch mal Apache einzusetzen. Hier hast du mich aber neugierig gemacht: Was sind denn Vorteile von Apache ggü. nginx und in welchem Einsatzgebiet ist nginx nicht gut geeignet?

  • Ehrlich gesagt, würde ich mir jetzt hier ungern die Arbeit machen das detailliert auszuführen (faul), aber wenn man in Google "nginx vs apache" eingibt, findet man in den Links auf der ersten Trefferseite eigentlich alle Infos.

    Sehr verkürzt zusammengefasste: Flexibilität (Apache) vs Performance (Nginx)

    Ich habe von Apache nicht wirklich viel Ahnung und mich bisher immer davor gedrückt, statt nginx auch mal Apache einzusetzen.

    Bei mir war das lange genau umgekehrt. :)

  • Ja, es gibt viele Infos zu dem Thema. Und wer die objektiv durchgeht erkennt, dass eine Aussage wie "nginx ist weit aus besser wie Apache2" nicht haltbar ist, weil viel zu undifferenziert.

    Nginx und Apache sind unterschiedlich, aber beide haben ihre Vor- und Nachteile, je nach Einsatzgebiet. Nicht selten werden sie sogar (über reverse proxy) zusammen eingesetzt.

    Man kann auch beide Simultan laufen haben, man setzt einen nginx vor einem Apache2 weil nginx die simultanen verbindungen besser verarbeitet


    Ehrlich gesagt, würde ich mir jetzt hier ungern die Arbeit machen das detailliert auszuführen (faul), aber wenn man in Google "nginx vs apache" eingibt, findet man in den Links auf der ersten Trefferseite eigentlich alle Infos.

    Sehr verkürzt zusammengefasste: Flexibilität (Apache) vs Performance (Nginx)

    Bei mir war das lange genau umgekehrt. :)

    Und bei mir auch genau anders herum, von Apache2 zu nginx gewechselt aufgrund von dem was ich benötige und mir wichtig ist, da man nginx vor apache2 schalten kann fand ich es für überflüssig dann apache2 mit nginx simultan laufen zu haben daher entschied ich mich dann doch nur für nginx und bin recht zufrieden und alles läuft super :)


    ----------------------------------------------------------------------------------------------------


    Hier habe ich mal einen guten Artikel kurz gefunden der einen überblick verschafft


    # Wann sollte ich Apache statt NGINX nehmen?


    - Apache .htaccess

    NGINX unterstützt so etwas wie die .htaccess-Datei des Apache nicht. Mit Apache erhalten Sie jedoch den Vorteil, dass Sie nicht privilegierten Benutzern die Kontrolle über einige wichtige Aspekte ihrer Website geben können.

    Den Benutzern ist es natürlich nicht gestattet, die Hauptkonfiguration zu bearbeiten.

    Mithilfe von .htaccess-Dateien können Sie systemweite Einstellungen für jedes Verzeichnis außer Kraft setzen.

    Um eine optimale Leistung zu erzielen, fügen Sie diese .htaccess-Anweisungen in die Hauptkonfigurationsdatei ein.

    In einer gemeinsam genutzten Hosting-Umgebung funktioniert Apache aufgrund seiner .htaccess-Konfiguration besser.

    Für dediziertes Hosting oder VPS bleibt Nginx die beste Option.


    - Im Falle von Funktionseinschränkungen - verwenden Sie Apache

    Nginx hat einige Kernmodule, die sehr wichtig sind. Es gibt jedoch einige Funktionseinschränkungen bei Nginx.

    Falls einige Einschränkungen bestehen oder zusätzliche Module benötigt werden, die von Nginx nicht unterstützt werden, sollten Sie stattdessen Apache auswählen.


    # Wann sollten Sie NGINX statt Apache nehmen?


    - Schnelle Verarbeitung statischer Inhalte

    Nginx kann die statischen Dateien aus einem bestimmten Verzeichnis viel besser verarbeiten.

    Außerdem werden die Upstream-Server-Prozesse aufgrund der zahlreichen statischen Inhaltsanforderungen nicht blockiert, da Nginx sie gleichzeitig verarbeiten kann. Dies verbessert die Gesamtleistung von Back-End-Servern erheblich.

    Nginx versucht unablässig, seinen Nutzern ein besseres Erlebnis zu bieten. Es hat seit Jahr 2018 ein bemerkenswertes Wachstum verzeichnet.


    - Ideal für stark frequentierte Websites

    Wenn wir über die Geschwindigkeit sprechen und wie viele Clients mit hoher Last bedient werden können, wird Nginx immer als Sieger über Apache glänzen.

    Dies macht Nginx sehr leicht und eignet sich hervorragend für Serverressourcen. Aus diesem Grund bevorzugen die meisten Webentwickler Nginx gegenüber Apache.

    Insbesondere stellen die Ecommerce-Stores heute einen Magento-Entwickler ein, der weiß, wie man mit einer Website mit hohem Datenaufkommen umgeht und mit Nginx vertraut ist.

    Kurz gesagt, wenn es darum geht, eine Website mit einem hohen Verkehrsaufkommen zu bedienen, ist Nginx unschlagbar.


    # Oder verwenden Sie beide - zusammen!

    Ja, Apache und Nginx können auch Freunde sein!

    Es ist möglich, die Stärken der einzelnen Server gemeinsam zu nutzen.

    Sie können Nginx vor Apache als Server-Proxy verwenden (siehe Abbildung unten). Dies nutzt die schnelle Verarbeitungsgeschwindigkeit von Nginx und die Fähigkeit, gleichzeitig eine große Anzahl von Verbindungen herzustellen.


    # NGINX vs Apache Fakten


    - Apache wurde zuerst im Jahr 1995 veröffentlicht, dann kam Nginx im Jahr 2004 und wurde entwickelt weil Apache an seine Grenzen stieß.

    - Beide werden von den größten Firmen in der Fortune 500 auf der ganzen Welt eingesetzt.

    - Der Marktanteil von Nginx wächst seit Jahren stetig.

    - In einigen Fällen hat Nginx einen Wettbewerbsvorteil in Bezug auf die Leistung.

  • Und die These, dass nginx 2.5 mal so schnell sei wie Apache ist vermutlich ziemlich steil. Ohne die Benchmarks im Detail zu sehen, speziell die verwendeten Apache Einstellungen, bezweifle ich das jedenfalls. Ich bezweifle aber nicht, dass nginx schneller ist. Apache ist aber bestimmt auch 2x schneller als Apache ;), wenn man den ganzen Overhead mit .htaccess usw durch AllowOverride None komplett abschaltet und - wie nginx - nur noch die statischen Konfigurationsdateien benutzt, die eben nur einmal beim Start des Apache gelesen werden müssen. Dann muss er nicht mehr bei jedem Request in jeder Verzeichnisebene bis runter zum aktuellen Verzeichnis nachschauen, ob es eine .htaccess gibt, diese ggf lesen und auswerten unter Berücksichtigung der darüberliegenden .htaccess-Dateien und was auch sonst noch immer dranhängt. Dann ist er aber wahrscheinlich auch nicht mehr so furchtbar viel flexibler als nginx. Irgendwann, wenn mir mal furchtbar langweilig ist, mache ich mal den Benchmark Apache2 vs Apache2. Und nginx vs Litespeed, ... vs ..., ... Denn ich glaube keinem Test, den ich nicht selbst gefälscht habe. :D

  • „Nginx ist besser als apache“ ist ne Aussage wie „ein Porsche 911 ist besser als eine Mercedes S-Klasse“…

    Meine Minecraft-Plugins auf SpigotMC (Open Source): www.spigotmc.org/members/mfnalex.175238/#resources

    Discord: discord.jeff-media.com

  • Ganz so einfach sieht die Wahrheit einfach nicht aus. Es hat sehr gute Gründe warum NGINX "Industriestandard" ist.

    Für kleine bis mittelgroße Seiten erfüllt Apache durchaus einwandfrei seinen Dienst.


    Aber versuch mal mehrere 10.000 Verbindungen simultan mit Apache abzuwickeln. Das ist alles andere als ressourceneffizient.


    Synthetische Benchmarks sind meiner Meinung nach zu "statisch", um zu sagen der und der Webserver ist schneller.

    Dennoch - NGINX ist Apache zumindest in dem Thema Effizienz klar und eindeutig überlegen, was sich auch in den hohen Marktanteilen widerspiegelt.