ruby-on-rails - 带有 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;" ]
解决方案
推荐阅读
- gradle - 我如何使用 cmd 或 gitbash 对 gradle 项目进行简单刷新
- grpc - 带有版本字段的 gRPC 消息请求版本控制
- sql - 那是多对多的sql关系吗?
- python-3.x - 查找所有 1 的最大子矩阵 - 缺少参数错误
- javascript - 我的变量更改了它设置为的变量的值
- python - 循环开始月份和开始年份到结束月份和年份python
- c# - 将 Unity C# 代码与“普通”C# 代码分离
- mysql - Mariadb 服务器不断崩溃 [错误 2013]
- c++ - 如何使用返回布尔值的函数?
- vue.js - 如何使用 Sinon.js (vue) 存根/模拟返回值以测试我的方法