Nginx不渲染puma应用程序

时间:2016-01-08 18:13:20

标签: ruby-on-rails nginx puma

我正在尝试使用Puma和Nginx来提供我的rails应用程序。当我到达页面时,它会呈现默认的nginx页面。我尝试过两种不同的配置。第一次失败,"upstream" directive is not allowed here.第二次警告Starting nginx: nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored

(1)覆盖nginx.conf

nginx.conf

upstream puma {
  server unix:///home/deploy/apps/exelon-api/shared/tmp/sockets/rails-api-puma.sock;
}
server {
  listen 80 default_server deferred;
  # server_name example.com;
  root /home/deploy/apps/rails-api/current/public;
  access_log /home/deploy/apps/rails-api/current/log/nginx.access.log;
  error_log /home/deploy/apps/rails-api/current/log/nginx.error.log info;
  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }
  try_files $uri/index.html $uri @puma;
  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://puma;
  }
  error_page 500 502 503 504 /500.html;
  client_max_body_size 10M;
  keepalive_timeout 10;
}

(2)使用网站启用

nginx.conf

user nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
  worker_connections  1024;
}
http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  access_log    /var/log/nginx/access.log;
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_requests 100;
  keepalive_timeout  65;
  gzip  on;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_proxied any;
  gzip_vary off;
  gzip_types text/plain text/css application/x-javascript text/xml application/xml application/rss+xml application/atom+xml text/javascript application/javascript application/json text/mathml;
  gzip_min_length  1000;
  gzip_disable     "MSIE [1-6]\.";
  variables_hash_max_size 1024;
  variables_hash_bucket_size 64;
  server_names_hash_bucket_size 64;
  types_hash_max_size 2048;
  types_hash_bucket_size 64;
  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
}

网站启用/导轨-api_production

upstream puma_rails-api_production { 
  server unix:/home/deploy/apps/rails-api/shared/tmp/sockets/rails-api-puma.sock fail_timeout=0;
}
server {
  listen 80;
  client_max_body_size 4G;
  keepalive_timeout 10;
  error_page 500 502 504 /500.html;
  error_page 503 @503;
  server_name localhost rails-api.local;
  root /home/deploy/apps/rails-api/current/public;
  try_files $uri/index.html $uri @puma_rails-api_production;
  location @puma_rails-api_production {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://puma_rails-api_production;
    # limit_req zone=one;
    access_log /home/deploy/apps/rails-api/shared/log/nginx.access.log;
    error_log /home/deploy/apps/rails-api/shared/log/nginx.error.log;
  }
  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }
  location = /50x.html {
    root html;
  }
  location = /404.html {
    root html;
  }
  location @503 {
    error_page 405 = /system/maintenance.html;
    if (-f $document_root/system/maintenance.html) {
      rewrite ^(.*)$ /system/maintenance.html break;
    }
    rewrite ^(.*)$ /503.html break;
  }
  if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
    return 405;
  }
  if (-f $document_root/system/maintenance.html) {
    return 503;
  }
  location ~ \.(php|html)$ {
    return 405;
  }
}

1 个答案:

答案 0 :(得分:2)

第二个错误实际上表示您有两个if(!userAnswer.matches("-?\\d*\\.?\\d*e\\^-?\\d*\\.?\\d*x") && //exponential !userAnswer.matches("-?\\d*\\.?") && //constant !userAnswer.matches("-?\\[a-zA-Z]") && //variable !userAnswer.matches("-?\\d*\\.?\\[a-zA-Z]") && //constant w/ variable !userAnswer.matches("-?\\[a-zA-Z]\\^-?\\d*\\.") && //variable w/ exponent !userAnswer.matches("-?\\d*\\.?\\[a-zA-Z]\\^-?\\d*\\."))//constant w/ variable w/ exponent {//do something} 部分定义为server(这实际上意味着listen 80其中0.0.0.0:80等于"任何地址&#34 ;)和0.0.0.0中的localhost

所以,你必须采取的行动取决于你想要达到的目标:

将其他应用设为默认

如果您希望您的应用可以通过某个主机名与您在服务器上拥有(或希望将来拥有的)其他应用一起访问,请说{{1} },您只需从添加的条目中删除server_name中的example.com即可。

在这种情况下,您必须通过localhostserver_name)中指定的名称之一访问您的应用,server_name和服务器IP

注意,如果您仍需要确保已指定的域已解析为服务器地址。

如果它位于您自己的本地计算机上,并且您希望能够访问您的应用程序以进行开发(例如,测试它如何与nginx一起使用),您可以  添加行example.com(例如,localhost)。

如果在您拥有的某个服务器上,并且您希望其他人能够通过同一个域访问应用,则必须购买/注册(如果尚未由其他人注册)然而,它发生了)并创建指向您的应用服务器IP的127.0.0.1 name.here DNS记录。

使您的应用默认

如果您希望此应用在服务器上默认,您可以:

  1. 查找使用127.0.0.1 example.com定义的其他A部分(因此,如果他们没有server或听取任何其他端口,例如8080或443,您可以放心地离开从那里删除listen 80 default; - 每个端口和IP组合只能有一个默认服务器部分。

  2. 将服务器部分中的default更改为default。这将告诉nginx您希望此服务器部分处理其他部分未捕获的所有请求。

  3. 这将允许您通过IP访问应用并将任何域指向它,而无需在listen 80;部分中指定它。您仍然需要注册或购买域名才能将其指向应用。