У меня есть сайт node.js, работающий на порту 8080 моего сервера Linux. У меня также есть, на том же сервере, сайт PHP (bugzilla), работающий на порту 80. Итак, моя текущая конфигурация:
- http://example.com:8080(приложение node.js)
- http://example.com/bugzilla(сайт bugzilla)
Я хочу, чтобы оба сайта работали на порту 80 следующим образом:
- http://example.com/mynodejs(приложение node.js)
- http://example.com/bugzilla(сайт bugzilla)
Это возможно?
решение1
Прежде всего, отключите обе службы на вашем компьютере, затем измените их порты на что-то необычное и перезапустите их, например:
PHP-приложение на
6821
Приложение NodeJS на
6822
Не забудьте открыть их на 127.0.0.1
! Не следует открывать их на сетевом интерфейсе.
Установить nginx
как наиболее используемый Reverse Proxy
. В зависимости от вашего дистрибутива вы можете установить его одной из этих команд:
Для дистрибутивов на базе Debian:
$ sudo apt install nginx
Для дистрибутивов на базе Arch:
$ sudo pacman -S nginx
Опять же, все зависит от вашего дистрибутива, этот пакет может иметь собственную иерархию файлов. Поэтому я приведу вам только nginx.conf
основной файл конфигурации.Не забудьте скопировать оригинальный файл конфигурации под любым именем, например: nginx.conf.origin
$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.origin
Теперь откройте /etc/nginx/nginx.conf
, удалите существующие конфигурации и скопируйте в него следующие конфигурации:
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;
}
}
}
Примечание: Пожалуйста, учтите, что я написал этот конфигурационный файл своим умом, и из-за этого вы, вероятно, столкнетесь с ошибкой, когда захотите запустить nginx. Если это так, пожалуйста, напишите комментарий здесь, и я его протестирую.
Теперь просто перезапустите свой nginx! Вы получите то, что хотите.
решение2
Приложение PHP может оставаться там, где оно не было изменено.
При использовании apache в качестве веб-сервера необходимо включить модули proxy. Например, в ubuntu
a2enmod proxy
a2enmod proxy_http
И измените свой виртуальный хост с помощью строк ProxyPass
и 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>
Перезапустите апач /etc/init.d/apache2 restart
.