【问题标题】:Rails Nginx: multiple applicationsRails Nginx:多个应用程序
【发布时间】:2016-07-10 10:03:09
【问题描述】:

我有两个应用程序的 nginx 配置:

1) Rails 应用程序

upstream app {
  server unix:/home/deploy/railsapp/shared/tmp/sockets/puma.sock fail_timeout=0;
}

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

  root /home/deploy/railsapp/current/public;

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

  location / {
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Connection '';
    proxy_pass http://app;
  }

  location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

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

2) 静态 html/js 应用程序

server {
  listen 81;
  server_name  client.example.com;
  root /home/deploy/clientapp;

  location / {
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Connection '';
   # proxy_pass http://app;
  }

  location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }
}

问题是两个地址api.example.comapi.example.com打开同一个应用程序(对于api.example.com

【问题讨论】:

  • @PeterS 这只是一个没有原始地址的例子。两个地址都是子域

标签: ruby-on-rails ruby-on-rails-4 nginx puma


【解决方案1】:

一些关于nginx配置的基础教程; https://www.digitalocean.com/community/tutorials/how-to-configure-the-nginx-web-server-on-a-virtual-private-server。您应该在 Rails 应用程序中使用代理而不是在静态 html 应用程序中使用。

server {
  listen 80; #should also be 80
  server_name  client.example.com;

  root /home/deploy/clientapp;
  index index.html index.htm;

  location / {
     try_files $uri $uri/ /index.html;
  }

  location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }
}

要测试配置,您可以执行nginx -t 并且应该使用nginx -s reload 重新加载以使用新配置?如前所述,这个问题与rails无关,只是nginx配置而已。

server_name 表示请求返回哪个网站,如果没有default_server,它将返回最后一个加载到 nginx 配置中的网站。

【讨论】:

  • 我尝试监听同一个端口 (80)。在这种情况下,两个地址都打开应用程序/home/deploy/clientapp,它应该只在client.example.com
  • @PavelBabin 那是因为代理与您的静态网站配置无关!您是否在启用站点的目录中链接了这两个配置?它应该始终是端口 80,因为这是运行 Web 应用程序的地方。
  • 我有两个独立的后端和客户端配置文件。我从客户端配置中删除了代理设置,结果是一样的
  • 两个配置文件都链接在/etc/nginx/sites-enabled/ 中。如果您重新加载了配置nginx -s reload 还是有错误nginx -t
  • 1) 两个配置都在/etc/nginx/sites-enabled/。 2) 是的,我正在像sudo service nginx restart 一样重新加载 nginx。 3) 不,没有错误,语法没问题
猜你喜欢
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 2013-08-10
  • 1970-01-01
  • 2011-10-24
相关资源
最近更新 更多