web-dev-qa-db-ja.com

nginxをExpressで動作するように構成する方法は?

私はnginxを設定しようとしています_proxy_passノードアプリへのリクエスト。 StackOverflowに関する質問に多くの賛成票が寄せられました。 https://stackoverflow.com/questions/5009324/node-js-nginx-and-now で、そこからconfigを使用しています。

(ただし、質問はサーバー構成に関するものであるため、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が実行されていない enter image description here

b)text-expressが実行されている

enter image description here

(そして、サーバー上で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」に、またはその逆に置き換えてみました


お知らせ下さい。私はいくつかの明らかな詳細を見逃していると確信しています。もっと知りたいと思います。ありがとうございました。

12
Mars Robertson

パス/index.htmlを提供するように構成されていることを表明しましたが、/test-express/index.htmlが必要です。 /test-express/index.htmlを提供するようにexpressを設定するか、nginxがプロキシされたリクエストから/test-exressを取り除くようにします。後者は、locationおよびproxy_passに末尾のスラッシュを追加するのと同じくらい簡単です。

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

詳細は http://nginx.org/r/proxy_pass を参照してください。

22
Alexey Ten