同一ec2实例上的静态网站和节点服务器

时间:2015-10-18 13:40:03

标签: node.js nginx amazon-ec2

我可以提供静态网站内容并在同一个ec2实例上运行节点服务器。 我的ec2实例是t2.micro ubuntu 14.04 Image。 完成的任务: Nodejs,已安装npm。已安装Nginx已配置。设置../../www/目录以通过nginx提供内容。

我有一个域名xyz.com将其@值指向与该实例关联的弹性IP。

将网站文件上传到目录。所以现在如果我访问xyz.com,我会通过nginx获取我的网站内容。 凉。

但节点应用无法访问。 我的节点应用程序正在端口3000上运行。

尝试添加

server {

root /var/www;
index: example.js

server_name _; 

location / {
    proxy_pass http://127.0.0.1:3000;
    expires 30d; # not required
    access_log off;
}

}

/ etc / nginx / sites-可用于指向节点服务器。

酷。现在xyz.com运行我的节点应用程序。但是现在没有网站内容可访问: ( 如果我尝试点击任何在我的Express路由中定义路由的API,那么服务器端就没有日志。只有一个nginx 404错误 例如:

  

xyz.com/myroute -404 nginx错误,适用于localhost:3000 / myroute
  xyz.com/ - 返回/

的默认路由集      

xyz.com:3000 - 不会命中节点服务器。没有日志。

许多在线资源建议重新路由安全区域中的端口80,以便通过运行该节点的端口提供内容。我可以通过这种方式运行节点应用程序,但是整个网站必须通过节点提供服务。

我想单独运行它们。

xyz.com - 为我提供网站

xyz.com:3000 - 允许我点击我的节点服务器我应该将应用和网站分成两个不同的实例吗?他们怎么能被路由?

1 个答案:

答案 0 :(得分:0)

您好我正在运行类似的设置但使用Jetty服务器而不是Node。

以下是我的配置;

server {
    listen 80;

    root /var/www/html/;
    index index.php index.html index.htm;

    server_name my_domain;

    location / {
            try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
            try_files $uri /index.php =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name                                ;
            include fastcgi_params;
    }

    location /app {
            proxy_pass    http://localhost:8080;
            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_pass指向正确的端口。

另一种方法是在子域上代理传递,在nginx中有2个虚拟服务器,例如app.mydomain.com和app2.mydomain.com。对于那种设置看看; nginx reverse proxy multiple backends

我相信你正在寻找我上面的那种设置。祝好运。