【发布时间】:2018-12-22 21:37:57
【问题描述】:
我最近将我的 Ruby on Rails 应用程序部署到一个普通的 Ubuntu 16.04 DigitalOcean droplet 上,使用 Nginx、passenger 和 Let's encrypt。
rails 应用程序仅适用于乘客和 Nginx,但在我安装 Let's Encrypt 后,它指向“欢迎使用 Nginx”页面,而不是我的 rails 应用程序。
我可以进行更改以查看“欢迎使用 Nginx!”页面并在浏览器中查看结果。
当我将启用站点的配置中的根位置更改为我的应用程序路径而不是 /html 时,我收到 403 Forbidden 错误。
这是我的应用程序所在的位置:/var/www/myapp/code/
我不知道是什么原因...当我尝试将根目录更改为我的应用程序的 /public 目录时,我不断收到“403 Forbidden nginx/1.14.0”。我什至将/html 文件夹移动到myapp 目录中,它会加载“欢迎使用Nginx!”页面也在那里。我需要做些什么来处理我的应用程序视图中的index.html.erb 文件,或者我是否需要在没有任何ERB 的情况下制作自定义index.html?
我的 /public 目录中没有索引文件。我需要做什么才能让 nginx 指向我在我的 rails 应用程序路由中定义的
root_path?两个(工作)的权限都设置为
root rails“欢迎来到 Nginx!”索引路径和 myapp/code/public 路径。
我很想得到一些帮助,谢谢!
我的/etc/nginx/sites-enabled/default(没有 cmets):
server {
root /var/www/myapp/code/public;
index index.html.erb index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/transverseaudio.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/transverseaudio.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.transverseaudio.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = transverseaudio.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 404; # managed by Certbot
}
我的/etc/nginx/sites-enabled/myapp.conf:
server {
listen 80;
server_name transverseaudio.com www.transverseaudio.com;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/myapp/code/public;
# Turn on Passenger
passenger_enabled on;
passenger_ruby /usr/local/rvm/gems/ruby-2.5.1/wrappers/ruby;
}
我进一步查看了我的 Ruby + Rails 配置并验证了安装的正确版本:
Rails -v = Rails 5.2.0
Ruby -v = ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
【问题讨论】:
-
听起来像是 Nginx 的问题。能否请您分享更多的Nginx配置,即服务器属性配置?
-
@HatzavWolff 感谢您提出这些问题,我用配置文件更新了我的问题。
-
@Jake 请在安装 Let's Encrypt 之前显示您的 nginx 配置。您的
/etc/nginx/sites-enabled/default中有 Certbot 的设置,它是 Let's Encrypt 的一部分。因此,当网站根据需要运行时,在 Let's Encrypt 之前看到它的版本会很棒。 -
@AlexanderUshakov 感谢您指出这一点,因为我没有使用版本控制,所以我重新制作了服务器,我的网站在没有 Let's Encrypt 的情况下运行。这是文件中没有 cmets 的 pastebin。
标签: ubuntu nginx passenger digital-ocean lets-encrypt