- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我最近将我的 Ruby on Rails 应用程序部署到一个普通的 Ubuntu 16.04 DigitalOcean Droplet,带有 Nginx、passenger & Let's encrypt。
Rails 应用程序仅适用于 passenger 和 Nginx,但在我安装 Let's Encrypt 后,它指向“欢迎使用 Nginx”页面而不是我的 Rails 应用程序。
我可以进行更改以看到“欢迎使用 Nginx!”页面并在浏览器中查看结果。
当我将启用站点的配置中的根位置更改为我的应用程序路径而不是/html 时,我收到 403 Forbidden 错误。
这是我的应用程序所在的位置:/var/www/myapp/code/
我不知道是什么原因...当我尝试将根目录更改为我的应用程序的/public 目录时,我不断收到“403 Forbidden nginx/1.14.0”。我什至将 /html
文件夹移到了 myapp
目录中,它加载了“Welcome to Nginx!”页面也在那里。我需要做些什么才能在我的应用程序 View 中处理我的 index.html.erb
文件,或者我是否需要制作自定义 index.html
而不任何再培训局
?
I do not have an index file in my /public directory. What do I need to do for nginx to point to my
root_path
defined in my rails app's routes?The permissions are set to
root rails
for both the (working) "Welcome to Nginx!" index path and myapp/code/public path.
我需要一些帮助,谢谢!
我的/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
}
我的/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 修订版 63029)[x86_64-linux]
最佳答案
您描述了旅途中的多个不同问题。让我们按照它们(应该)出现的顺序处理它们。
默认页面
您已正确识别出服务器正在为您的根目录提供服务,该目录位于 /var/www/html
,这是默认主页。如果您不想授予 nginx 对该目录的读取权限,您可以尝试将/var/www/html 符号链接(symbolic link)到您应用程序的公共(public)目录。实际问题是,您正在进行基于名称的托管,并且您的域名是在默认站点上配置的,而不是在您的 myapp.conf 上配置的。如果将默认列出的 server_name 移动到 myapp.conf
中的 server_name 指令就足够了。
此外,Passanger 还应该接收请求:
When Passenger handles a request, Nginx will first try and find a matching file in the public directory and if it finds one will serve it directly without passing the request to your app, since many web app frameworks use this directory for static files by default (e.g. Rails, Sinatra). From For a rack app, how do I make passenger-standalone serve the output of .erb files rather of sending the .erb file itself?
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;
总结
还要确保您的 nginx.conf 中有 include/etc/nginx/passenger.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;
}
关于ubuntu - 使用 Let's encrypt "Welcome to Nginx"而不是 Rails 应用程序的 Nginx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51343190/
我正在尝试使用以下命令在远程 Ubuntu 服务器的后台运行进程: sshpass -p PASSWORD ssh root@HOST 'nohup COMMAND-THAT-BLOCKS &' 不幸
普通 Ubuntu 和 ARM Ubuntu 有什么区别。我可以运行所有应用程序吗也在 ARM Ubuntu 中的普通 Ubuntu 下运行? Ubuntu 更新会自动发生吗? Torrent 下载器
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我正在尝试预置 Xenial 图像,它工作得很好,除了分区。 cloud-init 只能增长根分区,并且在使用扩展分区内的根文件系统构建镜像时不起作用: NAME MAJ:MIN RM SIZ
我对 Ubuntu 和 OpenFoam 真的很陌生,所以尝试学习并做一些教程。我正在使用 Docker 在 Ubuntu 上使用 OpenFoam。 我将文件夹复制到特定目录,但是当我尝试使用终端访
我在使用系统启动设置运行软件时遇到问题。我有 ubuntu 20.04。我试图将这些行插入到 etc/rc.local #!/bin/bash /usr/bin/clamonacc 它不起作用。第二次
TARGETS = client server CL_OBJ = clientMain.o Controller.o UI.o List.o Movie.o Server.o Serializer.o
我有一个 ubuntu服务器系统是8.04 hardy ,我在哪里安装rabbitmq。 rabbitmq依赖于 erlang-nox (>= 1:12.b.3) ,但是在当前的 ubuntu 版本中
我有一个用于开发的 Ubuntu virtualbox 设置。当我在文件中处于 org-mode 时,org-mode 的任何热键都不起作用(例如 M-RETURN 用于创建新标题)。我该怎么做才能让
我的 SchemaCrawler(版本 15.01.03)模式图在 Ubuntu 18.04 LTS 上截断表名。看起来表格通常被画得太窄,因为“[TABLE]”符号也开箱即用。在我的 Mac 上渲染
在 Ubuntu 中,设置应用程序中有几个地方有一个非常漂亮的 ListView ,带有添加/删除按钮,包括外观、键盘布局、隐私、蓝牙等。他们使用什么小部件?我开始使用 Glade 开发我的第一个 U
需要帮助卸载 jjrofiler。没有意识到它需要许可证。通过 .sh 可执行文件安装。 最佳答案 如果您转到 jProfiler 安装目录,您将找到名为 uninstall 的可执行文件,只需从终端
我一直在寻找几天,我没有想出解决方案。我是 ruby 新手,但我想通过使用 spree 开发自己的在线商店。 我使用:rails:Rails 3.2.13 ruby :ruby-1.9.3-p42
我尝试使用以下命令从/usr/local/bin 中删除我的 python2.7 和 python3 文件夹:sudo rm -rf python2.7 和 sudo rm -rf python3。后
在 ubuntu 服务器中(使用 ssh 协议(protocol)), 如何更改因不活动而断开连接的时间? 最佳答案 你能在 .bash_profile 中加入“exec screen -R”,在 .
我使用以下配置在 /etc/apache2/site-available/mysite.local 中创建了一个虚拟主机: ServerAdmin webmaster@localhost
我为大约 210 个用户新设置了一个代理服务器。它运行 ubuntu server 2012 和 squid3。问题是在凌晨 1:30 之后,如果用户尝试打开 google.com、youtube.c
gitlab-ci-multi-runner 1.0.2 (ea19241) Using Shell executor... Running on ip-... Cloning repository.
我有一个备份服务器,它每小时接收许多 rsync 连接。由于打开太多 rsync 实例可能会导致崩溃,我想使用 Semaphore 来限制并发实例的数量。 .我的想法是这样的: ssh root@ba
我有同一个库的多个版本,我的程序动态链接到这些库。有时我想更改使用的版本。 我一直在阅读,出于安全原因,新版本的 Ubuntu 不再支持 LD_LIBRARY_PATH。我可以将路径添加到 /etc/
我是一名优秀的程序员,十分优秀!