Express와 작동하도록 nginx를 구성하는 방법은 무엇입니까?


12

proxy_pass노드 앱에 요청 하도록 nginx를 구성하려고 합니다. StackOverflow에 대한 질문은 /programming/5009324/node-js-nginx-and-now에서 많은 찬사를 받았으며 거기에서 구성을 사용하고 있습니다.

(그러나 질문은 서버 구성에 관한 것이므로 ServerFault에 있어야합니다)

다음은 nginx 구성입니다.

server {
  listen 80;
  listen [::]:80;

  root /var/www/services.stefanow.net/public_html;
  index index.html index.htm;
  server_name services.stefanow.net;

  location / {
    try_files $uri $uri/ =404;
  }

  location /test-express {
    proxy_pass    http://127.0.0.1:3002;
  }    

  location /test-http {
    proxy_pass    http://127.0.0.1:3003;
  }
}

일반 노드 사용 :

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3003, '127.0.0.1');

console.log('Server running at http://127.0.0.1:3003/');

효과가있다! 확인 : http://services.stefanow.net/test-http

급행 사용하기 :

var express = require('express');
var app = express(); //

app.get('/', function(req, res) {
  res.redirect('/index.html');
});

app.get('/index.html', function(req, res) {
  res.send("blah blah index.html");
});

app.listen(3002, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3002/');

작동하지 않습니다 :( 참조 : http://services.stefanow.net/test-express


나는 무슨 일이 일어나고 있다는 것을 알고 있습니다.

a) test-express가 실행되고 있지 않습니다 여기에 이미지 설명을 입력하십시오

b) text-express가 실행 중입니다

여기에 이미지 설명을 입력하십시오

(그리고 서버에서 ssh하는 동안 명령 줄을 통해 실행되고 있음을 확인할 수 있습니다)

root@stefanow:~# service nginx restart
 * Restarting nginx nginx                                                                                  [ OK ]

root@stefanow:~# curl localhost:3002
Moved Temporarily. Redirecting to /index.html

root@stefanow:~# curl localhost:3002/index.html
blah blah index.html

여기에 설명 된대로 헤더를 설정하려고했습니다 .http : //www.nginxtips.com/how-to-setup-nginx-as-proxy-for-nodejs/ (여전히 작동하지 않습니다)

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;

나는 또한 '127.0.0.1'을 'localhost'로 바꾸고 그 반대도 시도했습니다.


조언 부탁드립니다. 나는 분명한 세부 사항을 놓치고 더 많은 것을 배우고 싶다고 확신합니다. 감사합니다.


의 모든 로그 nginx오류 로그?
masegaloeh

이 설정에서 Express 애플리케이션을 어떻게 실행하고 있습니까? 프로세스 를 실행 forever하거나 pm2실행 하는 별도의 프로세스가 필요 nginx합니까?
문법

나는 정확하게 기억할 수 없다 ... 나는 받아 들여진 대답이 나를 위해 일한 것을 기억한다.
화성 로버트슨

답변:


22

경로를 제공하도록 구성되어 /index.html있지만 필요합니다 /test-express/index.html. 프록시 된 요청에서 /test-express/index.htmlnginx를 제거하거나 제공하도록 express를 구성하십시오 /test-exress. 후기는 추가가 슬래시를 후행 한 간단하다 location하고 proxy_pass.

location /test-express/ {
  proxy_pass    http://127.0.0.1:3002/;
}

자세한 내용은 http://nginx.org/r/proxy_pass 를 참조하십시오.


2
Q : "나는 분명한 세부 사항을 놓치고 있다고 확신합니다" A : "후행 슬래시를 추가하는 것만 큼 간단합니다"(감사합니다, 문자 그대로 고착되었습니다)
Mars Robertson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.