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:
- http://example.com:8080(Node.js-Anwendung)
- http://example.com/bugzilla(Bugzilla-Site)
Ich möchte, dass beide Sites auf Port 80 wie folgt laufen:
- http://example.com/mynodejs(Node.js-Anwendung)
- http://example.com/bugzilla(Bugzilla-Site)
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 auf
6821
NodeJS-Anwendung auf
6822
Bitte denken Sie daran, sie zu öffnen 127.0.0.1
! Sie sollten sie nicht über Ihre Netzwerkschnittstelle öffnen.
Installieren Sie es nginx
als 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.conf
als 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 ProxyPass
und 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
.