O Nginx funciona como um servidor front-end, que nesse caso proxies as solicitações para um servidor node.js. Portanto, você precisa configurar um arquivo de configuração nginx para o nó.
Isto é o que eu fiz na minha caixa do Ubuntu:
Crie o arquivo yourdomain.com
em /etc/nginx/sites-available/
:
vim /etc/nginx/sites-available/yourdomain.com
Nele você deve ter algo como:
# the IP(s) on which your node server is running. I chose port 3000.
upstream app_yourdomain {
server 127.0.0.1:3000;
keepalive 8;
}
# the nginx server instance
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
access_log /var/log/nginx/yourdomain.com.log;
# pass the request to the node.js server with the correct headers
# and much more can be added, see nginx config options
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://app_yourdomain/;
proxy_redirect off;
}
}
Se você deseja que o nginx (> = 1.3.13) também lide com solicitações de websocket, adicione as seguintes linhas na location /
seção:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Depois de definir essa configuração, você deve ativar o site definido no arquivo de configuração acima:
cd /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/yourdomain.com yourdomain.com
Crie o aplicativo do servidor do nó em /var/www/yourdomain/app.js
e execute-o emlocalhost:3000
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
Teste para erros de sintaxe:
nginx -t
Reinicie o nginx:
sudo /etc/init.d/nginx restart
Por fim, inicie o servidor do nó:
cd /var/www/yourdomain/ && node app.js
Agora você deve ver "Olá mundo" em seudominio.com
Uma última observação em relação à inicialização do servidor do nó: você deve usar algum tipo de sistema de monitoramento para o daemon do nó. Há um tutorial incrível no nó com upstart e monit .
location / { proxy_pass http://127.0.0.1:3000; }
? Por que você precisa de todo oupstream
bit de configuração?sites-enabled
esites-available
dentro dele/etc/nginx
. Se a sua versão veio sem esses dois diretórios, provavelmente ela possui um únicoconf.d
diretório. Nesse caso, seguir estas instruções não terá efeito, a menos que você modifique ainclude
instrução dentro do arquivonginx.conf
para apontar para emsites-enabled
vez do padrãoconf.d
. Espero que isso faça sentido. Deve tornar-se auto-explicativo quando você ver ainclude
declaração em questãonginx.conf
.Você também pode configurar vários domínios com nginx, encaminhando para vários processos node.js.
Por exemplo, para obter estes:
Essas portas (4000 e 5000) devem ser usadas para escutar as solicitações de aplicativos em seu código.
/ etc / nginx / sites-enabled / domain1
Em / etc / nginx / sites-enabled / domain2
fonte
http://example.com
é automaticamente302
necessáriohttp://www.example.com
. Por que é que?proxy_set_header Host $host
para evitar o redirecionamento HTTP 302.Você também pode ter diferentes URLs para aplicativos em uma configuração de servidor:
Em / etc / nginx / sites-enabled / yourdomain :
Reinicie o nginx:
Iniciando aplicativos.
nó app1.js
nó app2.js
fonte
Procuro aplicativos Node Express independentes por meio do Nginx.
Assim, novos aplicativos podem ser facilmente montados e também posso executar outras coisas no mesmo servidor em locais diferentes.
Aqui estão mais detalhes sobre minha instalação com o exemplo de configuração do Nginx:
De: http://skovalyov.blogspot.dk/2012/07/deploy-multiple-node-applications-on.html
fonte
Node.js com configuração do Nginx.
adicione a seguinte configuração para que o Nginx, que atua como um proxy, redirecione para o tráfego da porta 3000 do servidor quando viermos de "subdomínio.seu_domínio.com"
fonte
respondendo sua pergunta 2:
Eu usaria a opção
b
simplesmente porque consome muito menos recursos. com a opção 'a', todo cliente fará com que o servidor consuma muita memória, carregando todos os arquivos que você precisa (mesmo que eu goste de php, este é um dos problemas). Com a opção 'b', você pode carregar suas bibliotecas (código reutilizável) e compartilhá-las entre todas as solicitações de clientes.Mas lembre-se de que, se você tiver vários núcleos, deverá ajustar o node.js para usar todos eles.
fonte
Eu criei um repositório no Github que você pode clonar, vagrant-node-nginx-boilerplate
basicamente, o aplicativo node.js
/var/www/nodeapp
ée a configuração nginx em
/etc/nginx/sites-available/
éfonte
Você também pode usar o node.js para gerar arquivos estáticos em um diretório servido pelo nginx. Obviamente, algumas partes dinâmicas do seu site podem ser veiculadas por nó e outras por nginx (estático).
Ter alguns deles servidos pelo nginx aumenta seu desempenho.
fonte
Podemos configurar facilmente um aplicativo Nodejs, usando o Nginx como um proxy reverso.
A configuração a seguir assume que o aplicativo NodeJS está sendo executado em 127.0.0.1:8080,
na configuração acima, seu aplicativo Nodejs irá,
HTTP_HOST
cabeçalho no qual você pode aplicar a lógica específica do domínio para servir a resposta. "Seu aplicativo deve ser gerenciado por um gerente de processo como pm2 ou supervisor para lidar com situações / reutilizar soquetes ou recursos etc.
Configure um serviço de relatório de erros para obter erros de produção, como sentinela ou barra de rolagem
NOTA: você pode configurar a lógica para entregar rotas de solicitação específicas do domínio, criar um middleware para o aplicativo expressjs
fonte
O Nginx pode atuar como um servidor proxy reverso, que funciona como um gerente de projeto. Quando recebe uma solicitação, ela a analisa e encaminha a solicitação para o upstream (membros do projeto) ou se auto-administra. O Nginx tem duas maneiras de lidar com uma solicitação com base em como ela é configurada.
encaminhar a solicitação para outro servidor
}
Servidor da solicitação
encaminhar a solicitação para outro servidor
Quando você executa o servidor node.js na porta 8000, o nginx encaminha a solicitação para o node.js. Escreva a lógica node.js e manipule a solicitação. É isso que você tem no servidor nodejs executando atrás do servidor nginx.
Se você deseja executar qualquer outro serviço que não seja o nodejs, execute outro serviço como Django, flask, php em portas diferentes e configure-o no nginx.
fonte
Você pode executar o nodejs usando o pm2 se desejar gerenciar cada meio de microsserviço e executá-lo. O nó estará sendo executado em uma porta, apenas configure-a no nginx (/etc/nginx/sites-enabled/domain.com)
Verifique se o host local está sendo executado ou não usando o ping.
E
É melhor e, como você disse, mais fácil também
fonte
A melhor e mais simples configuração com o Nginx e o Nodejs é usar o Nginx como um balanceador de carga HTTP e TCP com o proxy_protocol ativado. Nesse contexto, o Nginx poderá fazer proxy de solicitações de entrada para nodejs e também finalizar conexões SSL com os servidores Nginx de back-end, e não com o próprio servidor proxy. (Passagem SSL)
Na minha opinião, não faz sentido dar exemplos não SSL, pois todos os aplicativos da Web estão (ou deveriam estar) usando ambientes seguros.
Exemplo de configuração para o servidor proxy, em /etc/nginx/nginx.conf
Agora, vamos lidar com o servidor da web de back-end. /etc/nginx/nginx.conf :
Agora, vamos configurar o host virtual com esta configuração habilitada para SSL e proxy_protocol em /etc/nginx/sites-available/example.com-https.conf :
E, finalmente, uma amostra de 2 servidores web nodejs : Primeiro servidor:
Segundo servidor:
Agora tudo deve estar funcionando perfeitamente e com balanceamento de carga.
Há um tempo atrás, escrevi sobre Como configurar o Nginx como um balanceador de carga TCP no Docker . Confira se você estiver usando o Docker.
fonte