簡體   English   中英

Nginx 有 1 個域,2 個應用程序。 Ror + nodejs

[英]Nginx with 1 domain, 2 apps. Ror + nodejs


嘿。
經過幾個小時的研究,我找不到任何簡單的方法來解決我的問題。

我之前編寫了一個部署在我的服務器上並且運行良好的 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) 確定您的子域(即 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 永遠不會在 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

這將顯示問題的文件和行號。

希望這可以幫助。 如果您對此有任何疑問,請發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM