আমি ইউনিক্স সকেটের মাধ্যমে এনগিনেক্স প্রক্সি_পাস নোড.জেএস এইচটিটিপি সার্ভারটি কীভাবে কনফিগার করব?


16

আমি ইউএনআইএক্স ডোমেন সকেটের মাধ্যমে একটি নোড.জেএস এইচটিটিপি সার্ভারের সাথে সংযোগ স্থাপনের জন্য একটি এনগিনেক্স সার্ভারটি কনফিগার করার চেষ্টা করছি।

Nginx কনফিগারেশন ফাইল:

server {
  listen 80;

  location / {
    proxy_pass http://unix:/tmp/app.socket:/;
  }
}

( http://wiki.nginx.org/HttpProxyModule#proxy_pass অনুসারে )

নোড.জেএস স্ক্রিপ্ট:

var http = require('http');

http.createServer(function(req, res) {
  console.log('received request');
  req.end('received request\n');
}).listen('/tmp/app.socket');

এখন, যখন আমি কল করার চেষ্টা করি

curl http://localhost/

আমি 502 টি খারাপ গেটওয়ে ত্রুটি পৃষ্ঠাটি কার্ল অবস্থায় পেয়েছি এবং নোড.জেএস প্রক্রিয়াতে কিছুই নেই।

আমি কি ভুল কিছু করছি?

সম্পাদনা:

কোয়ান্টার সমাধানটি চেষ্টা করার পরে, ভুলটি অবশ্যই এনগিনেক্স কনফিগারেশনের সাথে করতে হবে, যেহেতু নোড.জেএস প্রক্রিয়াটি সকেটের সাথে সংযোগটি সঠিকভাবে প্রতিষ্ঠিত করে।

আমি এনগিনেক্সকেও এভাবে কনফিগার করার চেষ্টা করেছি:

upstream myapp {
  server unix:/tmp/app.socket;
}

server {
  listen 80;

  location / {
    proxy_pass http://myapp;
  }
}

তবে এটিও কার্যকর হয়নি।

BTW আমি Nginx v1.0.6 ব্যবহার করছি।

নিগিনেক্সে ত্রুটি লগতে নিম্নলিখিতটি লেখা হচ্ছে, যখন আমি দ্বিতীয় কনফিগারেশন ব্যবহার করি

2011/09/28 13:33:47 [crit] 1849#0: *5 connect() to unix:/tmp/app.socket failed  (13: Permission denied) while connecting to upstream, client: 127.0.0.1,        server: , request: "GET / HTTP/1.1", upstream: "http://unix:/tmp/app.socket:/", host: "localhost:80"

উত্তর:


7

chmod 777 /tmp/app.socket

এটি সমাধান তবে সমাধান নয়।

আপনার সম্ভবত একই ব্যবহারকারীর এবং / অথবা একই গোষ্ঠী উভয় ওয়েবসার্ভার চালানো উচিত যাতে আপনার সকেট বিশ্বকে লেখার পাঠযোগ্য করে তুলতে হবে না। এছাড়াও আমি দেখতে পাচ্ছি না কেন সকেট কার্যকর করতে হবে। সুতরাং 6 যথেষ্ট হতে হবে। অর্থাত্: 660


ইউনিক্স অনুমতিগুলির সাথে কম পরিচিত তাদের জন্য, যদি এই স্কিমটি একই হোস্টের একাধিক অ্যাকাউন্টের জন্য ব্যবহৃত হয়, তবে প্রতিটি অ্যাকাউন্ট অন্য সকেটে লিখিত থাকতে পারে। সে কারণেই এটি কার্যকর হয় "সমাধান নয়"।
মার্ক স্টসবার্গ

5

"502 ব্যাড গেটওয়ে" এর অর্থ এনগিনেক্স আপ স্ট্রিম সার্ভার থেকে সাড়া পেতে পারে না। আপনার কোনও প্রক্রিয়া শোনার বিষয়টি নিশ্চিত করুন /tmp/app.socket:

# netstat --protocol=unix -nlp | grep app.socket

আমি শুনতে একটি প্রক্রিয়া পেয়েছি /tmp/app.socket। আমি যখন আপনার আদেশ চালনা করি তখন তা আমাকে দেয় unix 2 [ ACC ] STREAM HÖRT 29673 7029/node /tmp/app.socket। তবে আপনার পরামর্শের জন্য ধন্যবাদ এই আদেশটি বেশ কার্যকর।
pvorb

3

আমি এটি সমাধান। উপরে পোস্ট করা ত্রুটি লগ বার্তাটি আমাকে উত্তরে নিয়ে যায়।

আমি সর্বদা নোড.জেএস প্রক্রিয়াটি একটি সাধারণ ব্যবহারকারী হিসাবে শুরু করি, যখন এনগিনেক্স মূল দ্বারা শুরু হয়েছিল। নোড.জেএস শুরু করা হলে এটি সকেটটি তৈরি করেsrwxr-xr-x অধিকার । সুতরাং এনগিনেক্স সকেটে লিখতে পারেনি, এটি কেবল এটি থেকে পড়তে পারে। প্রক্রিয়াগুলি শুরু হওয়ার পরে, সবকিছু সঠিকভাবে সেট আপ করতে পারে। তবে একবার আমি একটি ওয়েব পৃষ্ঠাতে কল করলে, এনগিনেক্স বুঝতে পেরেছিল যে সকেটে অনুরোধটির প্রক্সি দেওয়ার অধিকার নেই।

সমাধান চালানো ছিল

chmod 777 /tmp/app.socket

এখন, সব ঠিক আছে।

যাহোক তোমাকে ধন্যবাদ!


2

আমি জানি আমি পার্টিতে দেরি করেছি, তবে এই পৃষ্ঠাটি এই সঠিক সমস্যার জন্য একটি গুগল অনুসন্ধানে উপস্থিত হয়েছে। শেল কমান্ড চালানো আসলেই আমার পক্ষে আদর্শ সমাধান নয় এবং আমি এটিই এর সমাধান করেছি;

ম্যানুয়ালি chmod চালানোর পরিবর্তে, সকেট তৈরি হওয়ার পরে আপনি নোডকে 'fs' লাইব্রেরি দিয়ে এটি করতে পারেন:

var fs = require('fs');

var server = http.createServer(...This varies by implementation...);

server.listen('/path/to/socket');

server.on('listening', onListening);

function onListening() {
  fs.chmodSync('/path/to/socket', '777');
}

স্পষ্টতই যদি আপনার ইতিমধ্যে আপনার তালিকার ইভেন্টে অন্য জিনিস থাকে তবে আপনার কেবলমাত্র উপস্থিত ফাংশনে chmodSync এ কলটি যুক্ত করা উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.