Node.js и PHP на порту 80 на одном сервере

Node.js и PHP на порту 80 на одном сервере

У меня есть сайт node.js, работающий на порту 8080 моего сервера Linux. У меня также есть, на том же сервере, сайт PHP (bugzilla), работающий на порту 80. Итак, моя текущая конфигурация:

Я хочу, чтобы оба сайта работали на порту 80 следующим образом:

Это возможно?

решение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.

Связанный контент