Làm cách nào để định cấu hình nginx để nó hoạt động với Express?


12

Tôi đang cố gắng định cấu hình nginx để nó proxy_passyêu cầu các ứng dụng nút của tôi. Câu hỏi trên StackOverflow có nhiều upvote: /programming/5009324/node-js-nginx-and-now và tôi đang sử dụng cấu hình từ đó.

(nhưng vì câu hỏi là về cấu hình máy chủ nên nó được cho là trên ServerFault)

Đây là cấu hình 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;
  }
}

Sử dụng nút trơn:

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

Nó hoạt động! Kiểm tra: http://service.stefanow.net/test-http

Sử dụng nhanh

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

Nó không hoạt động :( Xem: http://service.stefanow.net/test-express


Tôi biết rằng một cái gì đó đang xảy ra.

a) test-express KHÔNG chạy nhập mô tả hình ảnh ở đây

b) text-express đang chạy

nhập mô tả hình ảnh ở đây

(và tôi có thể xác nhận nó đang chạy qua dòng lệnh trong khi ssh trên máy chủ)

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

Tôi đã thử đặt tiêu đề như được mô tả ở đây: http://www.nginxtips.com/how-to-setup-nginx-as-proxy-for-nodejs/ (vẫn không hoạt động)

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;

Tôi cũng đã thử thay thế '127.0.0.1' bằng 'localhost' và ngược lại


Xin tư vấn. Tôi khá chắc chắn rằng tôi bỏ lỡ một số chi tiết rõ ràng và tôi muốn tìm hiểu thêm. Cảm ơn bạn.


Bất kỳ đăng nhập nhật ký nginxlỗi?
masegaloeh

Trong thiết lập này - bạn đang chạy ứng dụng express như thế nào? Bạn có cần phải có một quy trình riêng như thế foreverhay pm2chạy nó, sau đó nginxchỉ ủy nhiệm cho nó?
ngữ pháp

Tôi không thể nhớ chính xác ... Tôi nhớ câu trả lời được chấp nhận đã làm việc cho tôi.
Mars Robertson

Câu trả lời:


21

Bạn thể hiện cấu hình để phục vụ đường dẫn /index.html, nhưng bạn yêu cầu /test-express/index.html. Hoặc cấu hình express để phục vụ /test-express/index.htmlhoặc làm cho nginx thoát /test-exresskhỏi yêu cầu ủy quyền. Latter đơn giản như thêm dấu gạch chéo vàolocationproxy_pass.

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

Xem http://nginx.org/r/proxy_pass để biết chi tiết.


2
Hỏi: "Tôi khá chắc chắn rằng tôi bỏ lỡ một số chi tiết rõ ràng" A: "đơn giản như thêm dấu gạch chéo" (cảm ơn bạn, tôi đã bị mắc kẹt theo nghĩa đen)
Mars Robertson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.