首页 > 解决方案 > 带有 Nginx 和 Rails 的 Docker:无法访问此站点

问题描述

我遇到了一个我无法解决的问题。我有包裹在 docker 容器和 nginx 中的 Rails 项目,它是位于 VPS(digitalocean)上的 Rail 的 puma 服务器的代理。我启动我的 docker-compose,一切都在正常运行,但是当我尝试打开一个站点时,我收到错误:“无法访问此站点”。我怎么能调试这个?我不知道...该域可供我使用 ping 命令。

/web/nginx.conf

upstream app {
  server 'app:3000';
}
server {
  listen 80;
  server_name localhost;
  # ~2 seconds is often enough for most folks to parse HTML/CSS and
  # retrieve needed images/icons/frames, connections are cheap in
  # nginx so increasing this is generally safe...
  keepalive_timeout 5;
  # path for static files
  root /app/public;
  access_log /app/log/nginx.access.log;
  error_log /app/log/nginx.error.log info;
  # this rewrites all the requests to the maintenance.html
  # page if it exists in the doc root. This is for capistrano's
  # disable web task
  if (-f $document_root/maintenance.html) {
    rewrite  ^(.*)$  /maintenance.html last;
    break;
  }
  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    # If the file exists as a static file serve it directly without
    # running all the other rewrite tests on it
    if (-f $request_filename) {
      break;
    }
    # check for index.html for directory index
    # if it's there on the filesystem then rewrite
    # the url to add /index.html to the end of it
    # and then break to send it to the next config rules.
    if (-f $request_filename/index.html) {
      rewrite (.*) $1/index.html break;
    }
    # this is the meat of the rack page caching config
    # it adds .html to the end of the url and then checks
    # the filesystem for that file. If it exists, then we
    # rewrite the url to have explicit .html on the end
    # and then send it on its way to the next config rule.
    # if there is no file on the fs then it sets all the
    # necessary headers and proxies to our upstream pumas
    if (-f $request_filename.html) {
      rewrite (.*) $1.html break;
    }
    if (!-f $request_filename) {
      proxy_pass http://app;
      break;
    }
  }
  # Now this supposedly should work as it gets the filenames with querystrings that Rails provides.
  # BUT there's a chance it could break the ajax calls.
  location ~* \.(ico|css|gif|jpe?g|png|js)(\?[0-9]+)?$ {
     expires max;
     break;
  }
  # Error pages
  # error_page 500 502 503 504 /500.html;
  location = /500.html {
    root /app/current/public;
  }
}

然后

/web/nginx.DockerFile

FROM nginx
RUN apt-get update -qq && apt-get -y install apache2-utils
ENV RAILS_ROOT /app
WORKDIR $RAILS_ROOT
RUN mkdir log
COPY public public/
COPY ./docker/web/nginx.conf /tmp/docker.nginx
RUN envsubst '$RAILS_ROOT' < /tmp/docker.nginx > /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD [ "nginx", "-g", "daemon off;" ]

标签: ruby-on-railsnginxdocker-compose

解决方案


推荐阅读