Node.js und PHP auf Port 80 auf demselben Server

Node.js und PHP auf Port 80 auf demselben Server

Auf Port 8080 meines Linux-Servers läuft eine node.js-Site. Auf demselben Server läuft auch eine PHP-Site (Bugzilla), die auf Port 80 läuft. Meine aktuelle Konfiguration sieht also so aus:

Ich möchte, dass beide Sites auf Port 80 wie folgt laufen:

Ist das möglich?

Antwort1

Deaktivieren Sie zunächst beide Dienste auf Ihrem Computer. Ändern Sie dann ihre Ports in etwas Ungewöhnliches und starten Sie sie neu, zum Beispiel:

  • PHP-Anwendung auf6821

  • NodeJS-Anwendung auf6822

Bitte denken Sie daran, sie zu öffnen 127.0.0.1! Sie sollten sie nicht über Ihre Netzwerkschnittstelle öffnen.


Installieren Sie es nginxals das am häufigsten verwendete Reverse Proxy. Abhängig von Ihrer Distribution können Sie es mit einem dieser Befehle installieren:

Für Debian-basierte Distributionen:

$ sudo apt install nginx

Für Arch-basierte Distributionen:

$ sudo pacman -S nginx

Hängt wieder vollständig von Ihrer Distribution ab, dieses Paket könnte seine eigene Dateihierarchie haben. Daher gebe ich es Ihnen einfach nginx.confals Hauptkonfigurationsdatei.Denken Sie daran, die ursprüngliche Konfigurationsdatei unter einem beliebigen Namen zu kopieren, etwa so: nginx.conf.origin

$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.origin

Öffnen Sie nun /etc/nginx/nginx.conf, entfernen Sie vorhandene Konfigurationen und kopieren Sie diese Konfigurationen hinein:

user nginx;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    keepalive_timeout  15;

    server {
        listen       80 default_server;
        server_name  example.com; 

        location /mynodejs {
            proxy_pass http://127.0.0.1:6822;
        }

        location /bugzilla {
            proxy_pass http://127.0.0.1:6821;
        }
    }
}

Hinweis: Bitte beachten Sie, dass ich diese Konfigurationsdatei mit meinem Verstand geschrieben habe und Sie deshalb wahrscheinlich auf einen Fehler stoßen werden, wenn Sie nginx ausführen möchten. Wenn das der Fall ist, schreiben Sie bitte hier einen Kommentar, damit ich es testen kann.

Starten Sie jetzt einfach Ihren Nginx neu! Sie erhalten, was Sie möchten.

Antwort2

Die PHP-App kann unverändert bleiben.

Wenn Sie Apache als Webserver verwenden, müssen die Proxy-Module aktiviert werden. Unter Ubuntu zum Beispiel

a2enmod proxy
a2enmod proxy_http

Und ändern Sie Ihren virtuellen Host mit den Zeilen ProxyPassund ProxyPassReverse.

<VirtualHost *:80>
        ServerName www.example.com
        DocumentRoot "/var/www/www.example.com/htdocs"
        #nodejs app
        ProxyPass /mynodejs http://127.0.0.1:8080/
        ProxyPassReverse /mynodejs http://127.0.0.1:8080/
<Directory "/var/www/www.example.com/htdocs"> 
        Options -Indexes +FollowSymLinks
        AllowOverride All 
        Order allow,deny 
        Allow from all 
</Directory>
        ErrorLog "|/usr/bin/cronolog /var/www/www.example.com/logs/%Y-%m-%d/error_log" 
        CustomLog "|/usr/bin/cronolog /var/www/www.example.com/logs/%Y-%m-%d/access_log" combined 
</VirtualHost>

Starten Sie Apache neu /etc/init.d/apache2 restart.

verwandte Informationen