Nginx有1个域名,2个应用程序。 Ror + nodejs

时间:2015-10-20 16:03:42

标签: ruby-on-rails node.js express nginx server


嘿。
经过几个小时的研究,我找不到任何简单的解决方案来解决我的问题。

我之前写过一个RoR应用程序,它部署在我的服务器上运行得很好。现在我正在尝试部署Nodejs应用程序以与我的RoR应用程序一起运行。这两个应用程序没有任何关系 - 它们将被单独使用。

我只有一个域可以使用,我正在尝试使用Nginx。 RoR应用程序已在Unicorn + Nginx上运行。

我的第一个问题是在同一台服务器上部署两个独立应用程序的正确方法是什么? 他们应该听不同的端口吗?其他港口:80和其他:例如81? 或者我应该使用子文件夹?转到exampleDomain / app1和exampleDomain / app2?
我还读到了创建子域的选项,但是在生产中运行我的应用程序时这是否有用?

按照以下说明部署我的RoR应用: https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-unicorn-and-nginx-on-ubuntu-14-04 (注意我正在使用Digital Ocean的虚拟服务器)

目前我的Nginx文件如下所示:

upstream app {
    # Path to Unicorn SOCK file, as defined previously
    server unix:/home/deploy/appname/shared/sockets/unicorn.sock fail_timeout=0;
}

server {
    listen 80;
    server_name localhost;

    root /home/deploy/appname/public;

    try_files $uri/index.html $uri @app;

    location @app {
        proxy_pass http://app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}

这是上述RoR教程的直接副本。出于某种原因,如果我切换文件名,它会停止工作吗?即使我找不到任何地方定义的文件名。 该文件位于/ etc / nginx / sites-available /下,并命名为“default”。

我尝试按照本教程部署Nodejs应用程序: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-14-04 我用pm2运行我的应用程序。我尝试在/ etc / nginx / sites-available /中的另一个文件中编写以下代码,并且还包括现有默认文件中的代码以及RoR的代码,但它们都没有工作。

server {
    listen 80;

    server_name example.com;

    location / {
        proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Nginx日志也没有显示任何有用的内容。我跑了  sudo tail -f /var/log/nginx/error.log
几次,但原木是空的。

如果有人可以从这里给我一些指导,我会非常感激。

1 个答案:

答案 0 :(得分:2)

第一个问题“如何将两个应用程序放在同一台服务器上?”。

您提到的所有这些方法都可行,但对您和潜在用户而言,最简洁的方法可能是使用子域。为此,

1)确定您的子域(即nodejs.example.com和ror.example.com)并将这两个子域指向您的服务器。

2)在每个名称的2个ngnix文件中,将服务器名称设置为相应的子域名:

server {
  listen 80;
  server_name ror.example.com;

  # Rest of conf below (pointing to ROR project)
}

server {
  listen 80;
  server_name nodejs.example.com

  # Rest of conf below (pointing to nodejs project)
}

第二个问题:“我在哪里放置这些文件?”

要查看nginx实际使用这些文件的位置,我首先要查看主要的nginx.conf文件,通常位于:/etc/nginx/nginx.conf'。最后应该有两行告诉你nginx在哪里寻找conf文件:

http {
  # A bunch of default nginx settings

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
}

如果这是你的nginx.conf文件中的内容,那么nginx永远不会查看sites-available文件夹。 nginx实际上在哪里看是在两个文件夹中:/etc/nginx/conf.d/和/ etc / nginx / sites-enabled我建议做3件事:

1)cd进入/ etc / nginx / sites-enabled文件夹。删除“默认”文件。

2)创建2个文件,nodejs和ror,并将可靠的nginx配置放入文件夹中的这两个文件中:/ etc / nginx / sites-enabled。

3)运行:

sudo service nginx reload
sudo service nginx restart

如果重新加载失败,请运行以下命令以帮助调试配置:

sudo nginx -t

这将显示问题的文件和行号。

希望这会有所帮助。如果您遇到任何问题,请发表评论。