Sie selbst entwickeln oder konfigurieren Nginx-Proxys für Apache Tomcat unter Ubuntu in 5 Minuten mit https und Firewall



Ich bin kein Administrator, aber manchmal gibt es Aufgaben, die einfacher (und interessanter) zu lösen sind, als an jemanden zu delegieren.

Gelegentlich müssen wir den Servlet-Container (meistens Apache Tomcat) "anheben" und Proxy für ihn konfigurieren, SSL-Terminierung (oder einfach https) und alles mit einer Firewall abdecken (wobei nur SSH und http / https ausgelassen werden).

So kam es, dass ich dieses Problem in der letzten Woche dreimal gelöst habe (als Sterne wurden und davor - vor zwei Jahren) und diese Erfahrung in dieses kleine Werk umgewandelt wurde.

Angesichts des Ubuntu-Servers 18.04 oder 16.04 (wahrscheinlich haben Sie keine Probleme mit früheren Versionen 14.04 oder so). Wenn Sie keinen Ubuntu-Server haben, können Sie ihn schnell "abholen", z. B. bei Digital Ocean (mein Empfehlungslink). Nachdem ich den Artikel geschrieben hatte, bemerkte ich, dass DO für neue Konten 60 Tage lang 100 US-Dollar gibt, um es zu versuchen, wenn Sie einen Kredit angeben.

DNS


Für ein einfaches Schema zum Abrufen eines kostenlosen https-Zertifikats von Let's Encrypt benötigen wir Zugriff auf den DNS-Server. Wir schreiben darin die IP-Adresse unseres Ubuntu-Servers mit dem Namen xyz. Nehmen wir zur Sicherheit an, Sie haben mydomain.com, d. H. Der DNS-Name unseres Servers lautet xyz.mydomain.com

Installation


Installieren Sie Apache Tomcat (ich werde Version 8 verwenden)

apt install tomcat8 

Und jetzt Nginx

 apt install nginx-core 

Anpassung


Nginx


Konfigurieren Sie Nginx, das zuvor im DNS-Servernamen registriert war (Datei / etc / nginx / sites-available / default ).

 server_name xyz.mydomain.com; 

Wir registrieren den Link zum installierten Apache Tomcat (wenn Sie nichts geändert haben, "lebt" er auf Port 8080). Wir müssen den Upstream- Block zum Serverblock hinzufügen.

 upstream tomcat { server 127.0.0.1:8080 fail_timeout=0; } server { ... 

Nehmen Sie Änderungen am Standortblock vor und leiten Sie den gesamten Datenverkehr an Apache Tomcat um

 server { ... location / { # try_files $uri $uri/ =404; include proxy_params; proxy_pass http://tomcat/; } 

Wir überprüfen, ob alles korrekt eingegeben wurde

 service nginx configtest 

und starten Sie nginx neu

 service nginx restart 

Apache Kater


Im Prinzip ist dieser Teil optional. Wenn es für Sie nicht wichtig ist, dass die tatsächlichen IP-Adressen, Ports, das Schema, für das die Anforderung eingeht (ich spreche von https), und der angeforderte Server an Tomcat gesendet werden, kann dieser Schritt weggelassen werden. In einigen Fällen ist dieser Schritt jedoch erforderlich (z. B. für Java Web Start, auch bekannt als JNLP-Technologie).

Fügen Sie der Datei /etc/tomcat8/server.xml im Block <Host /> hinzu .

 <Host> ... <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" remoteIpProxiesHeader="x-forwarded-by" protocolHeader="x-forwarded-proto" /> </Host> 

Tomcat neu starten

 service tomcat8 restart 

HTTP-Zertifikat


Ein https-Zertifikat mit Überprüfung über http hilft uns, den Certbot-Bot oder dessen Modifikation für nginx'a - python-certbot-nginx zu erhalten

Führen Sie unter Ubuntu 18.04 zum Installieren von certbot einfach aus

 apt install python-certbot-nginx 

Für Ubuntu 16.04 müssen Sie mit dem Hinzufügen von Repositorys usw. basteln (siehe die ausführliche Anleitung für den Link ).

Wir starten

 certbot --nginx 

Geben Sie dabei Ihre E-Mail-Adresse an, akzeptieren Sie die Lizenzvereinbarung, erlauben Sie uns nicht, unsere Daten mit Let's Encrypt zu "fummeln", bestätigen Sie den DNS-Namen, für den das Zertifikat ausgestellt wird, und stimmen Sie zu, dass der Bot selbst nginx "konfiguriert".

Voila :)

Für alle Fälle prüfen wir, ob die Erneuerung des Zertifikats problemlos verläuft (das Zertifikat wird für 90 Tage ausgestellt und kann danach auf unbestimmte Zeit für denselben Zeitraum verlängert werden).

 certbot renew --dry-run 

Und für interne Paranoia überprüfen wir, ob die Cron-Datei vorhanden ist

 ls -al /etc/cron.d/certbot 

Firewall


Wir stoppen und machen ein Backup (Snapshot) der virtuellen Maschine.

 ufw allow ssh ufw allow http ufw allow https ufw default allow outgoing ufw default deny incoming ufw show added 

Bete!
 ufw enable ufw status 

Wir überprüfen, ob alles geklappt hat - die Site ist über https zugänglich, der http-Verkehr wird umgeleitet und andere als die oben aufgeführten Ports und ssh sind sicher geschlossen.

PS Ich hoffe aufrichtig, dass dieser Text für jemanden nützlich sein kann und freue mich über konstruktive Kritik.

PPS Oder sagt mir das allwissende ALL den Ersatz von certbot für Windows? Sie müssen das erste Zertifikat erhalten (idealerweise aktualisieren Sie es gemäß dem Zeitplan oder im Allgemeinen dem schicken Glanz). Ich habe nginx selbst konfiguriert. Ja, ich verstehe, dass Sie wahrscheinlich das Tool für die Verschlüsselung + IIS verwenden und in meinem Skript verwenden können, aber plötzlich gibt es ein fertiges "Ideal"?

Source: https://habr.com/ru/post/de434010/


All Articles