Ótima pergunta!
Existem muitos sites e aplicativos da web gratuitos implementados em PHP que rodam no Apache, muitas pessoas o usam para que você possa misturar algo bem fácil e, além disso, é uma maneira fácil de exibir conteúdo estático. O Node é rápido, poderoso, elegante e uma ferramenta sexy com o poder bruto do V8 e uma pilha plana sem dependências embutidas.
Também quero a facilidade / flexibilidade do Apache e ainda o grunhido e a elegância do Node.JS, por que não posso ter os dois ?
Felizmente, com a diretiva ProxyPass no Apache, httpd.conf
não é muito difícil canalizar todas as solicitações em uma URL específica para o aplicativo Node.JS.
ProxyPass /node http://localhost:8000
Além disso, verifique se as seguintes linhas NÃO estão comentadas para obter o proxy e o submódulo corretos para redirecionar as solicitações http:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Em seguida, execute o aplicativo Node na porta 8000!
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Apache!\n');
}).listen(8000, '127.0.0.1');
Em seguida, você pode acessar toda a lógica do Node.JS usando o /node/
caminho no seu URL, o restante do site pode ser deixado para o Apache para hospedar suas páginas PHP existentes:
Agora, a única coisa que resta é convencer a sua empresa de hospedagem a correr com essa configuração !!!
mod_proxy_wstunnel
. Vejo que já encontraram sua resposta, para os outros com o mesmo problema, por favor consulte: serverfault.com/questions/616370/...Esta questão pertence mais à falha do servidor, mas o FWIW diria que executar o Apache na frente do Node.js não é uma boa abordagem na maioria dos casos.
O ProxyPass do Apache é incrível para muitas coisas (como expor serviços baseados no Tomcat como parte de um site) e se o seu aplicativo Node.js. está apenas desempenhando uma função pequena e específica ou é uma ferramenta interna com probabilidade de ter um número limitado de usuários pode ser mais fácil usá-lo para que você possa trabalhar e seguir em frente, mas isso não parece o caso aqui.
Se você quiser tirar proveito do desempenho e da escala, poderá usar o Node.js. - e especialmente se quiser usar algo que envolva a manutenção de uma conexão persistente como soquetes da Web - é melhor executar o Apache e o seu Nó. js em outras portas (por exemplo, Apache no localhost: 8080, Node.js no localhost: 3000) e, em seguida, execute algo como nginx, Varnish ou HA proxy na frente - e direcione o tráfego dessa maneira.
Com algo como verniz ou nginx, você pode rotear o tráfego com base no caminho e / ou host. Ambos usam muito menos recursos do sistema e são muito mais escaláveis do que usar o Apache para fazer a mesma coisa.
fonte
Instruções para executar
node server
juntoapache2(v2.4.xx) server
:Para tubo de todos os pedidos em uma determinada URL para o aplicativo Node.js criar
CUSTOM.conf
arquivo dentro/etc/apache2/conf-available
do diretório, e adicione o seguinte linha ao arquivo criado:Altere 8000 para o número da porta preferida para
node server
.Ative configurações personalizadas com o seguinte comando:
PERSONALIZADO é o seu nome de arquivo recém-criado, sem extensão, e ative
proxy_http
com o comando:deve ativar ambos
proxy
eproxy_http
módulos. Você pode verificar se o módulo está ativado ou não com:Após a configuração e os módulos ativados, você precisará reiniciar o servidor apache:
Agora você pode executar o servidor do nó. Todas as solicitações para o
URL/node
serão tratadas pelo servidor do nó.fonte
A execução do Node e do Apache em um servidor é trivial, pois não conflita. O NodeJS é apenas uma maneira de executar o servidor JavaScript. O verdadeiro dilema é acessar o Node e o Apache de fora. A meu ver, você tem duas opções:
Configure o Apache para fazer proxy de todas as solicitações correspondentes para o NodeJS, que fará o upload do arquivo e qualquer outra coisa no nó.
Tenha o Apache e o Nó em diferentes combinações de portas IP: (se o servidor tiver dois IPs, um poderá ser vinculado ao ouvinte do nó e o outro ao Apache).
Também estou começando a suspeitar que isso pode não ser o que você está realmente procurando. Se o seu objetivo final é escrever a lógica do aplicativo no Nodejs e parte da "manipulação de arquivos" que você descarrega para um contratado, então é realmente uma escolha de idioma, não um servidor da web.
fonte
Você pode usar uma abordagem diferente, como escrever um servidor proxy reverso com o nodejs para fazer o proxy do apache e de todos os outros aplicativos do nodejs.
Primeiro, você precisa executar o apache em uma porta diferente da porta 80. ex: porta 8080
Em seguida, você pode escrever um script proxy reverso com nodejs como:
O artigo a seguir descreve todo o processo para fazer isso.
EXECUTAR APACHE COM NODE JS REVERSE PROXY - USANDO REDBIRD
fonte
fonte
Combinei a resposta acima com o certbot SSL cert e o CORS access-control-allow-headers e o fiz funcionar, então pensei em compartilhar os resultados.
Apache httpd.conf adicionado à parte inferior do arquivo:
Configurações do Apache VirtualHost (a raiz do documento para PHP está em Apache e SSL com Certbot, enquanto o site node.js / socket.io é executado na porta 3000 - e usa o certificado SSL do Apache) Observe também que o site node.js usa o proxy para a pasta / nodejs, socket.io e ws (websockets):
Em seguida, meu aplicativo node.js (app.js):
Eu forço um ouvinte de ip4, mas isso é opcional - você pode substituir:
O código do aplicativo node.js (app.js) continua com:
finalmente, no lado do cliente (criado como nodejs.js):
Neste exemplo, quando o JS carregar, ele emitirá para o soquete um "evento nomeado" enviando os dados em JSON para o servidor node.js / socket.io.
Usando o io e o soquete no servidor em path / nodejs (conectado pelo cliente), recebe os dados e os reenvia como uma transmissão. Quaisquer outros usuários no soquete receberiam os dados com seu ouvinte "named-event-broadcast". Observe que o remetente não recebe sua própria transmissão.
fonte
Recentemente, me deparei com esse tipo de problema, em que preciso me comunicar entre cliente e servidor usando o websocket em um projeto codeigniter baseado em PHP.
Resolvi esse problema adicionando minha porta (aplicativo de nó em execução) nas listas
Allow incoming TCP ports
&Allow outgoing TCP ports
.Você pode encontrar essas configurações no
Firewall Configurations
painel WHM do seu servidor.fonte
Eu estava procurando a mesma informação. Finalmente encontrei a resposta no link da resposta acima por @Straseus
http://arguments.callee.info/2010/04/20/running-apache-and-node-js-together/
Aqui está a solução final para executar o site apache na porta 80, o serviço js do nó na porta 8080 e usar .htaccess RewriteRule
No DocumentRoot do site apache, adicione o seguinte:
Para o redirecionamento no nível do diretório, o link acima sugeriu a regra (. +), Que requer um ou mais caracteres após o 'nó /'. Eu tive que convertê-lo para (. *), Que é zero ou mais para minhas coisas funcionarem.
Muito obrigado pelo link @Straseus
fonte
mod_proxy
esteja ativado.ProxyPass
?Suponho que você esteja criando um aplicativo Web porque se refere ao Apache e Node. Resposta rápida - É possível - SIM. É recomendado - NÃO. O nó agrupa seu próprio servidor da Web e a maioria dos sites é executada na porta 80. Também estou assumindo que atualmente não existe um plugin Apache suportado pelo Nodejs e não tenho certeza se a criação de um host virtual é a melhor maneira de implementar isso. Essas são as perguntas que devem ser respondidas pelos desenvolvedores que mantêm o Nodejs como o pessoal da Joyent.
Em vez de portas, seria melhor avaliar a pilha de tecnologia do Node, que é completamente diferente da maioria das outras e é por isso que eu a amo, mas também envolve alguns compromissos que você deve conhecer com antecedência.
Seu exemplo é semelhante a um CMS ou um aplicativo da Web de compartilhamento e existem centenas de aplicativos prontos para uso que serão executados perfeitamente no Apache. Mesmo que você não goste de nenhuma solução pronta, você pode escrever um aplicativo da Web em PHP / Java / Python ou combiná-lo com alguns aplicativos prontos e todos eles são projetados e suportados para rodar atrás de uma única instância do Apache.
É hora de fazer uma pausa e pensar no que acabei de dizer.
Agora você está pronto para decidir em qual pilha tecnológica você usará. Se o seu site nunca usar nenhum dos milhares de aplicativos prontos que requerem Apache, vá para o Node, caso contrário, você deve primeiro eliminar as suposições que afirmei anteriormente.
No final, sua escolha do techstack é muito mais importante do que qualquer componente individual.
Concordo plenamente com o @Straseus que é relativamente trivial usar a API do sistema de arquivos node.js. para manipular carregamentos e downloads, mas pense mais sobre o que você deseja do seu site a longo prazo e escolha seu pacote técnico.
Aprender a estrutura do Nó é mais fácil do que aprender outras estruturas, mas não é uma panacéia. Com um pouco mais de esforço (que pode ser um esforço que vale a pena), você também pode aprender qualquer outra estrutura. Todos aprendemos uns com os outros e você será mais produtivo se estiver trabalhando como uma equipe pequena do que se estiver trabalhando sozinho e suas habilidades técnicas de back-end também se desenvolverão mais rapidamente. Portanto, não descarte as habilidades de outros membros de sua equipe de maneira tão barata.
Este post tem cerca de um ano e é provável que você já tenha decidido, mas espero que meu discurso retórico ajude a próxima pessoa que está passando por uma decisão semelhante.
Obrigado pela leitura.
fonte