【问题标题】:Nginx with 1 domain, 2 apps. Ror + nodejsNginx 有 1 个域,2 个应用程序。 Ror + nodejs
【发布时间】:2016-01-19 09:29:42
【问题描述】:


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

我之前编写了一个部署在我的服务器上并且运行良好的 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
几次,但日志是空的。

如果有人能给我一些指导,我将不胜感激。

【问题讨论】:

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


    【解决方案1】:

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

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

    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'。最后应该有 2 行告诉你 nginx 在哪里寻找 conf 文件:

    http {
      # A bunch of default nginx settings
    
      include /etc/nginx/conf.d/*.conf;
      include /etc/nginx/sites-enabled/*;
    }
    

    如果这是您的 nginx.conf 文件中的内容,那么 nginx 永远不会在站点可用文件夹中查找。 nginx 实际查找的位置在两个文件夹中:/etc/nginx/conf.d/ 和 /etc/nginx/sites-enabled 我建议做三件事:

    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
    

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

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

    【讨论】:

    • 如何将server_name nodejs.example.com 指向node app.js,就像默认的cmd 运行一样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2019-03-26
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    相关资源
    最近更新 更多