Jak*_*ake 7 ubuntu passenger nginx digital-ocean lets-encrypt
我最近将我的Ruby on Rails应用程序部署到一个简单的Ubuntu 16.04 DigitalOcean Droplet,其中包含Nginx,passenger和Let的加密.
rails应用程序只适用于乘客和Nginx,但在我安装了Let's Encrypt后,它指向"欢迎使用Nginx"页面而不是我的rails应用程序.
我可以进行更改以查看"欢迎使用Nginx!" 页面并在浏览器中查看结果.
当我将启用网站的配置中的根位置更改为我的应用程序路径而不是/ html时,我收到403 Forbidden错误.
这是我的申请表: /var/www/myapp/code/
我不知道是什么给了...当我尝试将root更改为我的app/public目录时,我不断收到"403 Forbidden nginx/1.14.0".我甚至将/html文件夹移动到myapp目录中并加载"欢迎使用Nginx!" 那里的页面.我需要做些什么才能index.html.erb在我的应用程序视图中处理我的文件,或者,我是否需要在index.html没有任何内容的情况下进行自定义ERB?
我的/ public目录中没有索引文件.我需要做什么才能让nginx指向我
root_path在rails应用程序路由中定义的内容?权限设置
root rails为(工作)"欢迎使用Nginx!" 索引路径和myapp /代码/公共路径.
我很乐意帮助,谢谢!
我/etc/nginx/sites-enabled/default(没有评论):
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
}
Run Code Online (Sandbox Code Playgroud)
我的/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;
}
Run Code Online (Sandbox Code Playgroud)
我进一步研究了我的Ruby + Rails配置并验证了安装的正确版本:
Rails -v = Rails 5.2.0
Ruby -v = ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
您描述了旅途中的多个不同问题。让我们按照它们(应该)出现的顺序来处理它们。
默认页面
您已正确识别出该服务器正在为您的根目录提供/var/www/html默认主页。如果您不想授予 nginx 对该目录的读取权限,您可以尝试将 /var/www/html 符号链接到您应用程序的公共目录。实际问题是,您正在执行基于名称的托管,并且您的域名是在默认站点上配置的,而不是在 myapp.conf 上配置的。如果将默认列出的 server_name 移动到其中的 server_name 指令myapp.conf就足够了。
Passanger 也应该接受请求:
当 Passenger 处理请求时,Nginx 将首先尝试在 public 目录中查找匹配的文件,如果找到,将直接提供服务,而不将请求传递给您的应用程序,因为许多 Web 应用程序框架默认使用此目录来存储静态文件(例如 Rails、Sinatra)。对于机架应用程序,如何使乘客独立服务 .erb 文件的输出而不是发送 .erb 文件本身?
403 禁止
成功更改虚拟主机的根目录后,nginx 可能无法读取那里的数据。这可能是由于文件权限错误造成的,即运行 nginx 的用户无法读取目录/文件。
如果您没有索引文档并且目录索引被禁用,也会发生这种情况。您可以创建索引文档或添加一些重写规则。
500
如果您tail查看 nginx 的日志文件,它应该会为您提供错误消息的更多详细信息。500是服务器端错误,所以nginx至少应该给你一个提示。我认为这是因为您的服务器部分/文件中缺少。
# Turn on Passenger
passenger_enabled on;
passenger_ruby /usr/local/rvm/gems/ruby-2.3.0/wrappers/ruby;
Run Code Online (Sandbox Code Playgroud)
把它包起来
还要确保您include /etc/nginx/passenger.conf;的 nginx.conf 中有此内容。
所以总结一下,我建议删除默认值以摆脱它。
# redirect non https traffic for the correct domains
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
}
server {
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/transverseaudio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/transverseaudio.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# server for these domains
server_name transverseaudio.com www.transverseaudio.com;
# first try to serve the erb version.
index index.html;
# 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
633 次 |
| 最近记录: |