Bagaimana cara mengkonfigurasi nginx agar berfungsi dengan Express?

12

Saya mencoba mengkonfigurasi nginx sehingga proxy_passmeminta ke aplikasi simpul saya. Pertanyaan tentang StackOverflow mendapat banyak upvotes: /programming/5009324/node-js-nginx-and-now dan saya menggunakan konfigurasi dari sana.

(tapi karena pertanyaannya adalah tentang konfigurasi server seharusnya di ServerFault)

Berikut ini konfigurasi 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;
  }
}

Menggunakan simpul biasa:

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/');

Berhasil! Periksa: http://services.stefanow.net/test-http

Menggunakan express:

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/');

Tidak berfungsi :( Lihat: http://services.stefanow.net/test-express


Saya tahu ada sesuatu yang terjadi.

a) test-express TIDAK berjalan masukkan deskripsi gambar di sini

b) express teks sedang berjalan

masukkan deskripsi gambar di sini

(dan saya dapat mengonfirmasi sedang berjalan melalui baris perintah saat ssh di server)

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

Saya mencoba mengatur tajuk seperti yang dijelaskan di sini: http://www.nginxtips.com/how-to-setup-nginx-as-proxy-for-nodejs/ (masih tidak berfungsi)

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;

Saya juga mencoba mengganti '127.0.0.1' dengan 'localhost' dan sebaliknya


Mohon saran. Saya cukup yakin saya kehilangan beberapa detail yang jelas dan saya ingin belajar lebih banyak. Terima kasih.

Mars Robertson
sumber
Adakah login yang nginxsalah?
masegaloeh
Dalam pengaturan ini - bagaimana Anda menjalankan aplikasi ekspres Anda? Apakah Anda perlu memiliki proses terpisah seperti foreveratau pm2yang menjalankannya, kemudian nginxhanya proksi untuk itu?
tata bahasa
Saya tidak dapat mengingat dengan tepat ... Saya ingat jawaban yang diterima berhasil untuk saya.
Mars Robertson

Jawaban:

21

Anda menyatakan dikonfigurasi untuk melayani jalur /index.html, tetapi Anda membutuhkan /test-express/index.html. Mengkonfigurasi express untuk melayani /test-express/index.htmlatau membuat nginx untuk /test-exressdihapus dari permintaan proksi. Yang terakhir adalah sesederhana menambahkan garis miring ke locationdan proxy_pass.

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

Lihat http://nginx.org/r/proxy_pass untuk detailnya.

Alexey Ten
sumber
2
T: "Saya cukup yakin saya melewatkan detail yang jelas" A: "sesederhana menambahkan garis miring" (terima kasih, saya benar-benar terjebak)
Mars Robertson