如何从nginx访问节点文件

时间:2015-04-06 20:53:29

标签: javascript node.js nginx

所以,我有以下文件:

var sys = require('sys');
var mustache = require('mustache');

var view = {
    title: "Joe",
    calc: function() {
        return 2 + 4;
    }
};

var template = "{{title}} spends {{calc}}";

var html = mustache.to_html(template, view);

sys.puts(html);

当我使用节点nodejs mypage.js运行它时,我得到以下输出:

Joe spends 6

这太棒了!我现在的问题是,我将如何通过Nginx访问它?

所以,例如http://example.com/mypage.js

修改

以下是Nginx配置(注意我使用的是jsp而不是js,因为js已被视为文件扩展名):

server{
    listen 80 default_server;

    server_name example.com;

    root /usr/share/nginx/html/example.com;

    location ~ \.jsp$ {
        fastcgi_pass unix:/tmp/nginx.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

点击该页面会给我一个502 Bad Gateway

2 个答案:

答案 0 :(得分:3)

我知道这不是你要求的,但这是在节点中做到这一点的最基本方法。如果要构建节点服务器,那么首选标准为express

var sys = require('sys');
var mustache = require('mustache');

function handleRequest(req, res){
  var view = {
      title: "Joe",
      calc: function() {
          return 2 + 4;
      }
  };

  var template = "{{title}} spends {{calc}}";

  var html = mustache.to_html(template, view);

  res.setHeader('Content-Type', 'text/html');
  res.end(html);
}

var http = require('http');
var server = http.createServer(handleRequest):
server.listen(3000, function(err){
  console.log(err || 'Server listening on 3000');
})

答案 1 :(得分:1)

我很擅长将nginx配置为反向代理,但这就是我在本地计算机上执行此操作的方法。我有一些静态文件(图像,css等)我希望由nginx提供服务,因为它可以更快地执行此操作,对于所有其他GETPOST请求,它会将它们转发给节点

我没有完全得到你想要由nginx服务的东西,以及你想要Node做什么,但是这里有...

打开你的nginx.conf文件并尝试设置你的http块,其中的server块看起来像这样:

http {
  include       mime.types;
  default_type  application/octet-stream;

  #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  #                  '$status $body_bytes_sent "$http_referer" '
  #                  '"$http_user_agent" "$http_x_forwarded_for"';

  #access_log  logs/access.log  main;

  sendfile        on;
  #tcp_nopush     on;

  #keepalive_timeout  0;
  keepalive_timeout  65;


  map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
  } 
  server {
     listen       80;
     #if localhost doesn't work, try 127.0.0.1 !!!
     server_name  localhost;

     location / {
        #note the port number below! You'll have to enter the 
        #port that Node uses!! (it's usually 3000)
        proxy_pass http://127.0.0.1:3000;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
     }  


    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
  }
}

这告诉nginx将GET请求从127.0.0.1:80转发到127.0.0.1:3000。 现在,假设您有一个img文件夹,您可以在其中存储图像,并且您希望nginx为这些文件提供服务,而不是节点(这是非常常见的情况),您需要在其中设置另一个location块你的server块......它看起来像这样:

location /img {
# /yourProjectLocation folder should contain the img folder-
# if not, then go down until you reach the containing subfolder:
# /yourProjectLocation/subfolder1/sub2/......./folderContainingImg;
        root   /yourProjectLocation;
        index  index.html index.htm;
    }

这将处理所有GET /img/myPic.jpg个请求,而不是将它们转发到节点。

您可能需要考虑将问题标题重新定义为更广泛的内容,以帮助人们针对类似问题进行谷歌搜索。