Ubuntu

使用 nginx 在同一域的不同子 URI 下執行多個 Rails 應用程序

  • November 16, 2018

我能夠成功配置 nginx 和乘客 phusion。我現在有以下配置

server {listen 80  server_name **sub1.example.com** root /home/user/app1/public }    
server {listen 80  server_name **sub2.example.com** root /home/user/app2/public }

現在,我想將其更改為以下配置

server {listen 80  server_name **dev.example.com/example1** root /home/user/app1/public }
server {listen 80  server_name **dev.example.com/example2** root /home/user/app2/public }

我嘗試使用 location 指令,但沒有成功。我什至不確定這是否可能。任何幫助將不勝感激。謝謝。

以下是我的 nginx.conf 設置

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

location = /app1/ {
  root /home/rails/app1/public/; 

  passenger_enabled on;
  rails_env development;
}
location /app2/ {
  root /home/rails/app2/public/; 
  passenger_enabled on;
  rails_env development;
}
}

這可以通過使用Passenger Phusion 的passenger_base_uri指令來實現。讓我們假設我的域是www.example.com

現在我想為以下 URI 執行多個 rails 應用程序

www.example.com - 載入 Rails App1

www.example.com/app2- 載入 Rails App2

這就是我在 nginx.conf 中的伺服器塊的樣子:

server {
     listen 80;
     server_name  www.example.com;
     root /var/www/app1/public;   
     passenger_enabled on;
     passenger_base_uri /app2;
}

查看 root 是如何指向 app1 的公用文件夾的。並查看passenger_base_uri指令。

現在我們需要執行最後一步 - 將 app2 的公用文件夾符號連結到/var/www/app1/public/app2,這是通過執行以下命令來完成的:

ln -s /var/www/app2/public /var/www/app1/public/app2

創建此連結後,重新啟動 nginx,您就可以在同一個域上為不同的 Rails 應用程序提供服務。

參考: 將 Passenger Phusion 部署到子 URI

上一個答案:

server_name dev.example.com/example1 

是錯的。我了解到您希望 dev.example.com 轉到 dev.example.com/example1。對於這種情況,您需要進行 URL 重寫,如下所示

location = / { rewrite ^ http://dev.example.com/example1 ; }

評論後回复:

從您的評論中,我了解到您想在同一個 URI/域中提供多個 Rails 應用程序。

server {
   listen 80;
   server_name dev.example.com;
   root /home/user/app1/public;
   passenger_enabled on;
   passenger_base_uri /app2;
   passenger_base_uri /app3;
   ....truncated...
   rails_spawn_method smart;
   rails_env production;
}

引用自:https://serverfault.com/questions/357145