2013-07-05 3 views
2

Я хотел бы передать определенные параметры nodejs над nginx.nginx to node.js - pass params

Хотя я до сих пор используется FastCGI, я мог бы сделать это таким образом:

fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name; 
fastcgi_param PATH_INFO    $fastcgi_script_name; 

И теперь я в основном поиске точно такую ​​же функциональность, для Node.js

Это будет моя текущая конфигурация :

server { 
    # ... other stuff ... 

    location/{ 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 

     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; 

     proxy_pass http://node; 
     proxy_redirect off; 

     # pass any parameter here 
    } 

} 

upstream node { 
     server 127.0.0.1:8080; 
} 

Как это сделать? - И как я могу прочитать переданное значение в node.js?

ответ

4

Короткий ответ, который бы прямо на ваш вопрос, в вашем Nginx конфигурации, добавьте такие строки это:

proxy_set_header X-My-Custom-Param-1 $whatever_variable_you_want_to_pass; 

И читать это в вашем экспресс-путеводителе functio п,

req.get('X-My-Custom-Param-1'); 

Однако, если вы объяснить большую проблему, которую вы пытаетесь решить, и конкретное значение (ы) вы думаете, что нужно пройти, мы можем дать конкретную помощь, если. Вероятно, вы плохо решаете проблему. Я не видел реального случая использования, когда такая настройка была необходима.

+0

Я думаю, что это поможет. Сценарий заключается в том, что я передаю разные пути конфигурационного файла на сервер, так как конфигурационные файлы arent хранятся в/var/www /, но в/etc /. Конфигурация NGINX сама позаботится об этом, так что у меня могут быть разные dev configs (dev, staging и т. Д.) - и прямо управляйте ими через NGINX conf. – user169099

+0

Черт, я просто подумал, что с узлом это не имеет особого смысла. В PHP это делалось, поскольку каждый вызов был всем процессом, но с узлом я должен был просто запустить его с параметрами. – user169099

+0

Да, в узле соглашение должно использовать только простой файл конфигурации (.js или .json) или переменные окружения. –

0

Любые параметры будут переданы по умолчанию, и все, что вам нужно, это обработать маршрутизацию в узле.

Пожалуйста, проверьте express.js, так как он позволяет определять очень гибкие маршруты с регулярным выражением (при необходимости).
Имейте в виду, что params в экспресс отличается от query данных ($ _GET в PHP). Как query данные идут после вопросительного знака в URL, но params определены в маршрутах.
Например:

app.get('/user/:id', function(req, res, next) { 
    res.send({ 
    params: req.params 
    query: req.query 
    }); // will respond with json object with 'id' 
}); 

Затем протестировать его, с URL: http://example.com/user/23?foo=bar&hello=world
Это будет:

{ 
    params: { 
    id: 23 
    }, 
    query: { 
    foo: 'bar', 
    hello: 'world' 
    } 
} 
+0

Вы имеете в виду параметры GET, верно? Я действительно не говорил о параметрах GET, но о «внутренних» параметрах - если я использую неправильную формулировку, я этого не знал. Я ссылаюсь на записи файла конфигурации NGINX. (например, определенный путь и т. д.) – user169099

+0

Параметры GET: 'query' – moka

+0

Обновлен ответ. – moka