Tenho um site node.js em execução na porta 8080 do meu servidor Linux. Também tenho, no mesmo sarver, um site PHP (bugzilla) rodando na porta 80. Então minha configuração atual é:
- http://exemplo.com:8080(aplicativo node.js)
- http://example.com/bugzilla(site bugzilla)
Quero que os dois sites sejam executados na porta 80 assim:
- http://example.com/mynodejs(aplicativo node.js)
- http://example.com/bugzilla(site bugzilla)
Isso é possível?
Responder1
Em primeiro lugar, desative os dois serviços na sua máquina. em seguida, altere suas portas para algo incomum e reinicie-as, por exemplo:
Aplicação PHP ativada
6821
Aplicação NodeJS em
6822
Lembre-se de abri-los em 127.0.0.1
! você não deve abri-los em sua interface de rede.
Instale nginx
como o mais usado Reverse Proxy
. Dependendo da sua distribuição, você pode instalá-lo com um destes comandos:
Para distribuições baseadas em Debian:
$ sudo apt install nginx
Para distribuições baseadas em Arch:
$ sudo pacman -S nginx
Depende totalmente da sua distribuição novamente, este pacote pode ter seus próprios arquivos hierárquicos. então darei a você apenas nginx.conf
o arquivo de configuração principal.Lembre-se de copiar o arquivo de configuração original com o nome de sua preferência, algo como nginx.conf.origin
$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.origin
Agora, abra /etc/nginx/nginx.conf
, remova as configurações existentes e copie estas configurações dentro dele:
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;
}
}
}
Aviso: Considere que escrevi este arquivo de configuração mentalmente e, por causa disso, você provavelmente enfrentará um erro ao executar o nginx. Se sim, por favor escreva um comentário aqui, então vou testar.
Agora, basta reiniciar o seu nginx! Você conseguirá o que deseja.
Responder2
O aplicativo php pode permanecer onde não foi modificado.
Ao usar o apache como servidor web, os módulos proxy precisam estar habilitados. No Ubuntu por exemplo
a2enmod proxy
a2enmod proxy_http
E modifique seu host virtual com as linhas ProxyPass
e 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>
Reinicie o Apache /etc/init.d/apache2 restart
.