วิธีกำหนดค่า nginx เพื่อให้ทำงานกับ Express ได้อย่างไร


12

ฉันพยายามกำหนดค่า nginx ดังนั้นจึงproxy_passขอให้แอปโหนดของฉัน คำถามเกี่ยวกับ StackOverflow มี upvotes มากมาย: /programming/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) การทดสอบด่วนไม่ทำงาน ป้อนคำอธิบายรูปภาพที่นี่

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

ในการตั้งค่านี้ - คุณใช้แอพพลิเคชั่นด่วนอย่างไร? คุณจำเป็นต้องมีกระบวนการที่แยกออกมาอย่างนั้นforeverหรือpm2เรียกใช้จากนั้นก็nginxแค่ดำเนินการกับผู้รับมอบฉันทะหรือไม่?
ไวยากรณ์

ฉันจำไม่ได้ว่า ... ฉันจำได้ว่าคำตอบที่ยอมรับนั้นใช้ได้ผลสำหรับฉัน
Mars Robertson

คำตอบ:


22

คุณสามารถแสดงการกำหนดค่าที่จะให้บริการเส้นทางแต่คุณต้อง/index.html /test-express/index.htmlทั้งกำหนดค่าด่วนเพื่อให้บริการ/test-express/index.htmlหรือทำให้ nginx เพื่อดึง/test-exressจากคำขอพร็อกซี หลังเป็นง่ายๆเป็นทับเพิ่มต่อท้ายไปและlocationproxy_pass

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

ดูhttp://nginx.org/r/proxy_passสำหรับรายละเอียด


2
ถาม: "ฉันค่อนข้างแน่ใจว่าฉันพลาดรายละเอียดบางอย่างที่ชัดเจน" A: "ง่ายเหมือนการเพิ่มเครื่องหมายสแลช" (ขอบคุณคุณติดอยู่ตามตัวอักษรอย่างแท้จริง)
Mars Robertson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.