So richten Sie eine Node.js-Anwendung für die Produktion unter CentOS 7 ein

Einführung

Node.js is an open source Javascript runtime environment for easily building server-side and networking applications. Die Plattform läuft unter Linux, OS X, FreeBSD und Windows, und ihre Anwendungen sind in JavaScript geschrieben. Node.js applications can be run at the command line but we will teach you how to run them as a service, so they will automatically restart on reboot or failure, so you can use them in a production environment.

In diesem Lernprogramm wird das Einrichten einer produktionsbereiten Node.j-Umgebung behandelt, die aus zwei CentOS 7-Servern besteht. Auf einem Server werden Node.js-Anwendungen ausgeführt, die von PM2 verwaltet werden, während auf dem anderen Server Benutzer über einen Nginx-Reverseproxy auf den Anwendungsserver zugreifen können.

Die Ubuntu-Version dieses Tutorials finden Sie unterhere.

Voraussetzungen

In diesem Handbuch werden zwei CentOS 7-Serverwith private networking (im selben Datencenter) verwendet. Private Netzwerke können beim Erstellen auf neuen Servern konfiguriert werden (im AbschnittSelect additional options). Wir werden sie mit folgenden Namen bezeichnen:

  • app: Der Server, auf dem Node.js Runtime, Ihre Node.js-Anwendung und PM2 installiert werden.

  • web: Der Server, auf dem der Nginx-Webserver installiert wird, der als Reverse-Proxy für Ihre Anwendung fungiert. Benutzer greifen auf die öffentliche IP-Adresse dieses Servers zu, um zu Ihrer Node.js-Anwendung zu gelangen.

[.note] #Note: Beziehen Sie sich aufDigitalOcean Documentation - How to Enable Private Networking on Droplets, wenn Sie einen vorhandenen Server verwenden möchten, auf dem derzeit kein privates Netzwerk konfiguriert ist.
#

Bevor Sie mit diesem Handbuch beginnen, sollten Sie einen regulären Benutzer ohne Rootberechtigung mitsudo-Berechtigungen auf beiden Servern konfiguriert haben. Dies ist der Benutzer, unter dem Sie sich bei Ihren Servern anmelden sollten. Sie können lernen, wie Sie ein reguläres Benutzerkonto konfigurieren, indem Sie unsereninitial server setup guide for CentOS 7 folgen.

Befehle, die auf dem Server vonappausgeführt werden:

an_example_command_on_app

Befehle, die auf dem Server vonwebausgeführt werden:

an_example_command_on_web

Es ist möglich, einen einzelnen Server für dieses Lernprogramm zu verwenden, aber Sie müssen unterwegs einige Änderungen vornehmen. Verwenden Sie einfach die IP-Adresse des lokalen Hosts, d. H. 127.0.0.1, wo immer die private IP-Adresse desapp-Servers verwendet wird.

Hier ist ein Diagramm, wie Ihr Setup aussehen wird, nachdem Sie diesem Tutorial gefolgt sind:

Reverse Proxy to Node.js Application

Wenn Sie über einen Domainnamen anstelle der öffentlichen IP-Adresse auf den Server Ihreswebzugreifen möchten, kaufen Sie einen Domainnamen und befolgen Sie die folgenden Tutorials:

Beginnen wir mit der Installation der Node.js-Laufzeit auf demapp-Server.

[[Schritt-1 - Installieren von Node-Js]] == Schritt 1 - Installieren von Node.js.

Wir werden die neueste LTS-Version von Node.js auf dem Server vonappinstallieren.

SSH an den Server Ihresappunter Verwendung des regulären Benutzers ohne Rootberechtigung mit den Berechtigungen vonsudo.

Verwenden Sie auf dem Server vonappcurl, um die RPM-Repository-Konfigurationsdatei vonNodeSourceherunterzuladen:

curl -L -o nodesource_setup.sh https://rpm.nodesource.com/setup_10.x

CURL verwendet das HTTPS-Protokoll, um das Setup-Skript auf Ihren Server herunterzuladen. Die Ausgabe enthält Informationen, die für den Download relevant sind:

Output  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 11109  100 11109    0     0  70128      0 --:--:-- --:--:-- --:--:-- 70757

Als Nächstes sollten Sie den Inhalt des Skripts überprüfen. Mit dem folgenden Befehl wird das NodeSource-Setup-Skript in Ihrer Serverkonsole geöffnet, das Sie dann mitNodeSource setup script (aus dem NodeSource Distributions Github-Repository) vergleichen können, um das ordnungsgemäß heruntergeladene Skript zu bestätigen:

vi nodesource_setup.sh

Wenn Sie mit der Datei zufrieden sind, beenden Sievi, indem Sie:q inquit eingeben und zur Befehlszeile zurückkehren.

Führen Sie nun das Setup-Skript aus, um das NodeSource RPM-Repository zu installieren. Auf diese Weise können wir über den Paketmanager vonyumauf das Repository von NodeSource zugreifen:

sudo -E bash nodesource_setup.sh

Das Skript gibt Informationen zum Setup für unsere Referenz aus:

Output## Installing the NodeSource Node.js 10.x repo...

## Inspecting system...

+ rpm -q --whatprovides redhat-release || rpm -q --whatprovides centos-release || rpm -q --whatprovides cloudlinux-release || rpm -q --whatprovides sl-release
+ uname -m

## Confirming "el7-x86_64" is supported...

+ curl -sLf -o /dev/null 'https://rpm.nodesource.com/pub_10.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm'

## Downloading release setup RPM...

+ mktemp
+ curl -sL -o '/tmp/tmp.2aCcULVx8n' 'https://rpm.nodesource.com/pub_10.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm'

## Installing release setup RPM...

+ rpm -i --nosignature --force '/tmp/tmp.2aCcULVx8n'

## Cleaning up...

+ rm -f '/tmp/tmp.2aCcULVx8n'

## Checking for existing installations...

+ rpm -qa 'node|npm' | grep -v nodesource

## Run `sudo yum install -y nodejs` to install Node.js 10.x and npm.
## You may also need development tools to build native addons:
     sudo yum install gcc-c++ make
## To install the Yarn package manager, run:
     curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
     sudo yum install yarn

Vor der Installation von Node.js ist es wichtig, alle zwischengespeicherten Informationen vonyum zu entfernen. Durch das Löschen des Caches wird sichergestellt, dassyum die Netzwerkverbindung verwendet, um Node.js aus unserem neuen NodeSource-Repository abzurufen (wodurch potenzielle Konflikte durch veraltete Pakete verhindert werden):

sudo yum clean all

Als nächstes werden wir alle Metadaten für die aktuell aktiviertenyum-Repos herunterladen und verwenden. Dadurch wird sichergestellt, dass unsereyum-Abfragen so schnell wie möglich abgeschlossen werden:

sudo yum makecache fast

Um native Add-Ons ausnpm zu kompilieren und zu installieren, müssen wir auch Build-Tools installieren:

sudo yum install -y gcc-c++ make

Jetzt können wir die neueste Version des Pakets Node.js installieren:

sudo yum install -y nodejs

Stellen Sie sicher, dass Node installiert ist, indem Sie die Version mit dem folgenden Befehl überprüfen:

node -v

In Ihrer Ausgabe wird die Versionsnummer angezeigt, die Sie ausführen:

Outputv10.16.3

Die Node.js-Laufzeit ist jetzt installiert und kann eine Anwendung ausführen. Lassen Sie uns eine Node.js-Anwendung schreiben.

[[Schritt-2 - Erstellen der Knoten-js-Anwendung]] == Schritt 2 - Erstellen der Node.js-Anwendung

Jetzt erstellen wir eine Hello World-Anwendung, die einfach"Hello World" an alle HTTP-Anforderungen zurückgibt. Dies ist eine Beispielanwendung, mit der Sie Node.js einrichten können, die Sie durch Ihre eigene Anwendung ersetzen können. Stellen Sie lediglich sicher, dass Sie Ihre Anwendung so ändern, dass sie die entsprechenden IP-Adressen und Ports überwacht.

Da unsere Node.js-Anwendung Anforderungen von unserem Reverse-Proxy-Server (web) bedienen soll, verwenden wir die private Netzwerkschnittstelle unseresapp-Servers für die Kommunikation zwischen Servern. Suchen Sie nach der privaten Netzwerkadresse Ihresapp-Servers.

Wenn Sie ein DigitalOcean Droplet als Server verwenden, können Sie die private IP-Adresse des Servers über den DienstMetadataabrufen. Verwenden Sie auf dem Server vonappden Befehlcurl, um die IP-Adresse jetzt abzurufen:

curl -sw "\n" http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address

Sie möchten die Ausgabe (die private IP-Adresse) kopieren, da sie zum Konfigurieren der Anwendung Node.js verwendet wird.

Als Nächstes erstellen und öffnen Sie Ihre Node.js-Anwendung zur Bearbeitung. In diesem Tutorial verwenden wirvi, um eine Beispielanwendung mit dem Namenhello.js zu bearbeiten:

vi hello.js

Fügen Sie den folgenden Code in die Datei ein und ersetzen Sie die beiden hervorgehobenenAPP_PRIVATE_IP_ADDRESS-Elemente durch die private IP-Adresse desapp-Servers. Wenn Sie möchten, können Sie auch den markierten Port8080 an beiden Speicherorten ersetzen (stellen Sie sicher, dass Sie einen Nicht-Administrator-Port verwenden, d. H. 1024 oder mehr):

hello.js

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8080, 'APP_PRIVATE_IP_ADDRESS');
console.log('Server running at http://APP_PRIVATE_IP_ADDRESS:8080/');

Speichern und beenden Sie nun, indem SieESC drücken, um den--INSERT---Modus zu verlassen, gefolgt von:wq biswrite undquit in einem einzigen Befehl.

Diese Node.js-Anwendung überwacht einfach die angegebene IP-Adresse und den angegebenen Port und gibt"Hello World" mit einem200 HTTP-Erfolgscode zurück. Dies bedeutet, dass die Anwendung nur von Servern im selben privaten Netzwerk erreichbar ist, z. B. von unseremweb-Server.

Wenn Sie testen möchten, ob Ihre Anwendung funktioniert, führen Sie diesen Befehlnode auf dem Serverappaus:

node hello.js

[.note] #Note: Wenn Sie eine Node.js-Anwendung auf diese Weise ausführen, werden zusätzliche Befehle blockiert, bis die Anwendung durch Drücken vonCTRL+C.
# beendet wird.

Es wird viel Nginx-Debugging sparen, wenn wir zuerst testen, ob unserweb-Server aufapp mit der Node.js-Anwendung kommunizieren kann.

Öffnen Sie zum Testen der Anwendung eine andere Terminalsitzung und stellen Sie eine Verbindung zum Server Ihreswebher. Da sich der Webserver im selben privaten Netzwerk befindet, sollte er in der Lage sein, die private IP-Adresse desapp-Servers mitcurl zu erreichen. Stellen Sie sicher, dass SieAPP_PRIVATE_IP_ADDRESS und den Port durch die private IP-Adresse desapp-Servers und den Port ersetzen, wenn Sie ihn geändert haben:

curl http://APP_PRIVATE_IP_ADDRESS:8080

Wenn die folgende Ausgabe angezeigt wird, funktioniert die Anwendung ordnungsgemäß und überwacht die richtige IP-Adresse und den richtigen Port:

Node Application OutputHello World

Wenn Sie nicht die richtige Ausgabe sehen, stellen Sie sicher, dass Ihre Anwendung Node.js ausgeführt wird und so konfiguriert ist, dass sie die richtige IP-Adresse und den richtigen Port überwacht.

Stellen Sie auf dem Server vonappicher, dass die Anwendung beendet wird, indem SieCTRL+C drücken.

[[Schritt-3 - Installieren und Verwenden von PM2]] == Schritt 3 - Installieren und Verwenden von PM2

Jetzt installieren wir PM2, einen Prozessmanager für Node.js-Anwendungen. PM2 bietet eine einfache Möglichkeit zum Verwalten und Dämonisieren von Anwendungen (Ausführen als Dienst).

Wir werden Node Packaged Modules (NPM) verwenden, einen Paketmanager für Node-Module, der mit Node.js installiert wird, um PM2 auf dem Server vonappzu installieren. Verwenden Sie diesen Befehl, um PM2 zu installieren:

sudo npm install pm2@latest -g

Wir werden einige grundlegende Verwendungen von PM2 behandeln.

Als erstes möchten Sie den Befehlpm2 start verwenden, um Ihre Anwendunghello.js im Hintergrund auszuführen:

pm2 start hello.js

Dadurch wird Ihre Anwendung auch zur Prozessliste von PM2 hinzugefügt, die jedes Mal ausgegeben wird, wenn Sie eine Anwendung starten:

Output┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name │ id │ mode │ pid   │ status │ restart │ uptime │ memory      │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ hello    │ 0  │ fork │ 30099 │ online │ 0       │ 0s     │ 14.227 MB   │ disabled │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘

Wie Sie sehen können, weist PM2 automatisch einApp name (basierend auf dem Dateinamen ohne die Erweiterung.js) und ein PM2id zu. PM2 verwaltet auch andere Informationen, wie z. B.PID des Prozesses, seinen aktuellen Status und die Speichernutzung.

Anwendungen, die unter PM2 ausgeführt werden, werden automatisch neu gestartet, wenn die Anwendung abstürzt oder beendet wird. Es muss jedoch ein zusätzlicher Schritt ausgeführt werden, damit die Anwendung beim Systemstart (Booten oder Neustarten) gestartet wird. Glücklicherweise bietet PM2 eine einfache Möglichkeit, dies zu tun, den Unterbefehlstartup.

Der Unterbefehlstartupgeneriert und konfiguriert ein Startskript, um PM2 und seine verwalteten Prozesse beim Serverstart zu starten. Sie müssen auch das Init-System angeben, auf dem Sie ausgeführt werden, in unserem Fallsystemd:

sudo pm2 startup systemd

Es wird die folgende Ausgabe angezeigt, die angibt, dass der PM2-Dienst installiert wurde:

Output[PM2] Generating system init script in /etc/systemd/system/pm2.service
[PM2] Making script booting at startup...
[PM2] -systemd- Using the command:
      su root -c "pm2 dump && pm2 kill" && su root -c "systemctl daemon-reload && systemctl enable pm2 && systemctl start pm2"
[PM2] Dumping processes
[PM2] Stopping PM2...
[PM2] All processes have been stopped and deleted
[PM2] PM2 stopped
[PM2] Done.

Um sicherzustellen, dass PM2 weiß, welche Anwendungen beim Booten gestartet werden sollen, müssen wir die aktuelle Prozessliste speichern. So speichern Sie die Liste:

pm2 save

Sie sehen eine Ausgabe wie die folgende, die angibt, dass die PM2-Prozessliste gespeichert wurde:

Output[PM2] Saving current process list...
[PM2] Successfully saved in /home/deployer/.pm2/dump.pm2

Jetzt sollten Ihre PM2-verwalteten Anwendungen beim Booten automatisch gestartet werden.

PM2 bietet viele Unterbefehle, mit denen Sie Informationen zu Ihren Anwendungen verwalten oder nachschlagen können. Beachten Sie, dass beim Ausführen vonpm2 ohne Argumente eine Hilfeseite angezeigt wird, einschließlich der Beispielverwendung, die die PM2-Verwendung ausführlicher behandelt als dieser Abschnitt des Lernprogramms.

Stoppen Sie eine Anwendung mit diesem Befehl (geben Sie die PM2App name oderid an):

pm2 stop example

Starten Sie eine Anwendung mit diesem Befehl neu (geben Sie PM2App name oderid an):

pm2 restart example

Die Liste der Anwendungen, die derzeit von PM2 verwaltet werden, kann auch mit dem Unterbefehllistnachgeschlagen werden:

pm2 list

Weitere Informationen zu einer bestimmten Anwendung finden Sie mit dem Unterbefehlinfo (geben Sie die PM2App name oderid an):

pm2 info example

Der PM2-Prozessmonitor kann mit dem Unterbefehlmonitaufgerufen werden. Hier werden der Anwendungsstatus, die CPU und die Speichernutzung angezeigt:

pm2 monit

[.note] #Note: Wenn Sie den Befehlmonitvon PM2 ausführen, werden zusätzliche Befehle blockiert, bis die Anwendung durch Drücken vonCTRL+C beendet wird.
#

Nachdem Ihre Node.js-Anwendung ausgeführt wird und von PM2 verwaltet wird, richten wir den Reverse-Proxy ein.

[[Schritt-4 - Einrichten eines Nginx-Reverse-Proxy-Servers]] == Schritt 4 - Einrichten eines Nginx-Reverse-Proxy-Servers

Nachdem Ihre Anwendung ausgeführt wird und eine private IP-Adresse abgehört wird, müssen Sie eine Möglichkeit einrichten, dass Ihre Benutzer darauf zugreifen können. Zu diesem Zweck richten wir einen Nginx-Webserver als Reverse-Proxy ein. In diesem Tutorial wird ein Nginx-Server von Grund auf neu eingerichtet. Wenn Sie bereits ein Nginx-Server-Setup haben, können Sie denlocation-Block einfach in den Serverblock Ihrer Wahl kopieren (stellen Sie sicher, dass der Speicherort nicht mit dem vorhandenen Inhalt Ihres Webservers in Konflikt steht).

Installieren wir auf dem Server vonwebdas Paketepel-releasemit yum:

sudo yum install epel-release

Dann installiere Nginx:

sudo yum install nginx

Öffnen Sie nun die Nginx-Konfigurationsdatei zum Bearbeiten:

sudo vi /etc/nginx/nginx.conf

Suchen Sie zunächst die Zeile, in derserver_name definiert ist, innerhalb des Standardserverblocks. Es sollte ungefähr so ​​aussehen:

nginx.conf excerpt — server_name (before)

server_name _;

Aktualisieren Sie den Servernamen, um den Unterstrich (_) durch Ihren eigenen Domainnamen für die Direktiveserver_namezu ersetzen (oder die IP-Adresse, wenn Sie keine Domain eingerichtet haben).

nginx.conf excerpt — server_name (after)

server_name your-domain;

Suchen Sie dann die Zeile, in derlocation / definiert ist (normalerweise einige Zeilen unter dem Servernamen), innerhalb desselben Standardserverblocks. Es sollte ungefähr so ​​aussehen:

nginx.conf excerpt — location / (before)

        location / {
        }

Ersetzen Sie ihn durch den folgenden Codeblock und ersetzen SieAPP_PRIVATE_IP_ADDRESSdurch die private IP-Adresse desapp-Servers. Ändern Sie außerdem den Port (8080), wenn Ihre Anwendung so eingestellt ist, dass sie einen anderen Port überwacht:

/etc/nginx/nginx.conf excerpt — location / (after)

    location / {
        proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

Dadurch wird der Server vonwebo konfiguriert, dass er auf Anforderungen im Stammverzeichnis reagiert. Angenommen, unser Server ist beiyour-domain verfügbar, würde der Zugriff aufhttp://your-domain/ über einen Webbrowser die Anfrage an die private IP-Adresse des Anwendungsservers an Port8080 senden, die von der empfangen und beantwortet wird Node.js Anwendung.

Sie können demselben Serverblock zusätzlichelocation-Blöcke hinzufügen, um Zugriff auf andere Anwendungen auf demselbenweb-Server zu erhalten. Wenn Sie beispielsweise auch eine andere Node.js-Anwendung auf demapp-Server auf Port8081 ausführen, können Sie diesen Standortblock hinzufügen, um den Zugriff überhttp://your-domain/app2 zu ermöglichen:

Nginx-Konfiguration - Zusätzliche Standorte

    location /app2 {
        proxy_pass http://APP_PRIVATE_IP_ADDRESS:8081;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

Wenn Sie die Standortblöcke für Ihre Anwendung (en) bearbeitet haben, speichern und beenden Sie sie, indem SieESC drücken, um den--INSERT---Modus zu verlassen, gefolgt von:wq biswrite undquit in einem einzigen Befehl.

Starten Sie Nginx auf dem Server vonwebneu:

sudo systemctl start nginx

Als Nächstes möchten wir sicherstellen, dass Nginx bei jedem Neustart des Servers ausgeführt wird:

sudo systemctl enable nginx

Der Befehlenable sollte die folgende Ausgabe liefern

OutputCreated symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

Sie können auch bestätigen, dass Nginx ausgeführt und aktiviert wird, indem Sie den Status vonsystemctl anfordern:

sudo systemctl status nginx

Der Statusbefehl gibt Konfigurationsinformationen für den Nginx-Dienst aus:

Output● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-10-14 09:37:23 UTC; 3min 29s ago
 Main PID: 12818 (nginx)
   CGroup: /system.slice/nginx.service
           ├─12818 nginx: master process /usr/sbin/nginx
           └─12819 nginx: worker process

Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 nginx[12814]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 nginx[12814]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 systemd[1]: Failed to read PID from file /run/nginx.pid: Invalid argument
Oct 14 09:37:23 centos-s-1vcpu-1gb-sgp1-01 systemd[1]: Started The nginx HTTP and reverse proxy server.

Geben Sie Nginx schließlich die Möglichkeit, Datenverkehr überSecurity-Enhanced Linux (SELinux) weiterzuleiten. SELinux bietet eine Sicherheitsschicht, die die obligatorische Zugriffssteuerung (Mandatory Access Control, MAC) im Linux-Kernel implementiert. Jedes Betriebssystemobjekt (Prozess, Dateideskriptor, Datei usw.) ist mit einem SELinux-Kontext gekennzeichnet, der die Berechtigungen und Operationen definiert, die das Objekt ausführen kann.

Nginx ist mit dem Kontext vonhttpd_tgekennzeichnet und weist daher eine Reihe von Konfigurationen auf, die von SELinux blockiert werden, sofern dies nicht ausdrücklich gestattet ist. Führen Sie den folgenden Befehl aus, um zu demonstrieren, dass der Nginx-Dienst mithttpd_t gekennzeichnet ist:

ps -eZ

Dieser Befehl liefert Prozessstatusinformationen und sucht nach den Nginx-spezifischen Prozessinformationen, um das Etikett anzuzeigen. Sie sehen diehttpd_t auf ähnliche Weise wie folgt:

Output...
system_u:system_r:httpd_t:s0    10208 ?        00:00:00 nginx
system_u:system_r:httpd_t:s0    10209 ?        00:00:00 nginx
...

Lassen Sie uns nun den Status der Standard-Booleschen Werte überprüfen, die sich auf das SELinux-Label vonhttpd_tbeziehen. Wir können diese Informationen anzeigen, indem Sie den folgenden Befehl ausführen:

getsebool -a

Wir interessieren uns nur für diehttpd-bezogenen Booleschen Werte für dieses Tutorial:

Output...
httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd_dbus_sssd --> off
httpd_dontaudit_search_dirs --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_graceful_shutdown --> on
httpd_manage_ipa --> off
httpd_mod_auth_ntlm_winbind --> off
httpd_mod_auth_pam --> off
httpd_read_user_content --> off
httpd_run_ipa --> off
httpd_run_preupgrade --> off
httpd_run_stickshift --> off
httpd_serve_cobbler_files --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_sys_script_anon_write --> off
httpd_tmp_exec --> off
httpd_tty_comm --> off
httpd_unified --> off
httpd_use_cifs --> off
httpd_use_fusefs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
httpd_use_openstack --> off
httpd_use_sasl --> off
httpd_verify_dns --> off
...

Die beiden besonders bemerkenswerten Booleschen Werte sindhttpd_can_network_connect undhttpd_can_network_relay. DasRedhat Documentation enthält Details zu jedem derhttpd-Booleschen Werte und der zugehörigen Funktion (falls Sie mehr über jeden Booleschen Wert erfahren möchten). Im Folgenden finden Sie jedoch die Erläuterungen zu den beiden Booleschen Werten, die sich auf dieses Lernprogramm beziehen:

...
httpd_can_network_connect: When disabled, this Boolean prevents HTTP scripts and modules from initiating a connection to a network or remote port. Enable this Boolean to allow this access.
httpd_can_network_relay: Enable this Boolean when httpd is being used as a forward or reverse proxy.
...

Da unsere Konfiguration nur Datenverkehr weiterleitet, müssen wir SELinux lediglich mitteilen, dass der Server vonhttpd, in unserem Fall Nginx, das Netzwerk verwenden kann, um Datenverkehr in der von uns eingerichteten Reverse-Proxy-Konfiguration weiterzuleiten. Wir werden das-P-Flag verwenden, um sicherzustellen, dass die Änderungen dauerhaft sind (das Weglassen dieses Flags führt dazu, dasshttpd_can_network_relay beim Neustart des Servers in den Standardzustand zurückgesetzt wird):

sudo setsebool -P httpd_can_network_relay on

Angenommen, Ihre Node.js-Anwendung wird ausgeführt und Ihre Anwendungs- und Nginx-Konfigurationen sind korrekt, sollten Sie über den Reverse-Proxy desweb-Servers auf Ihre Anwendung zugreifen können. Probieren Sie es aus, indem Sie auf die URL Ihresweb-Servers zugreifen (dessen öffentliche IP-Adresse oder Domain-Name).

[.note] #Note: Wenn Sie auch vorhatten, Ihrenweb-Server zum Hosten anderer Sites (als herkömmliche virtuelle Hosts) zu verwenden, müssen Sie auchhttpd_can_network_connect aktivieren .
#

Fazit

Sie haben jetzt Ihre Node.js-Anwendung hinter einem Nginx-Reverseproxy ausgeführt. Dieses Reverse-Proxy-Setup ist flexibel genug, um Ihren Benutzern Zugriff auf andere Anwendungen oder statische Webinhalte zu gewähren, die Sie freigeben möchten.

Wenn Sie Übertragungen zwischen Ihrem Webserver und Ihren Benutzern verschlüsseln möchten, geben Siehere is a tutorial that will help you get HTTPS (TLS/SSL) support set up an.