ell*_*lmo 1 macos homebrew passenger nginx ruby-on-rails-3
我在我的用户帐户上安装了nginx(带 乘客)(通过 自制程序).几个小时后我觉得这件事只是拒绝工作,因为我无法让任何Rails3应用程序响应一个简单的nginx声明的位置.经过深思熟虑(AKA试错)我得出的结论是它确实有效,但拒绝使用端口80.
我知道,自制安装是每用户安装,因此它不应该只能在root用户端口上运行(即端口1024及以下),但自制软件本身(以及网络上的各种来源)表明只需运行服务器通过sudo nginx就足以允许它使用端口80.
这些是配置的重要文件,它们可以正常工作:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 doomhub.local localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
Run Code Online (Sandbox Code Playgroud)
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
passenger_root /Users/ellmo/.rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.18/;
passenger_ruby /Users/ellmo/.rvm/rubies/ruby-1.9.3-p125/bin/ruby;
include mime.types;
default_type application/octet-stream;
access_log logs/access.log; #main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
server_name doomhub.local;
listen 8080;
root /Users/ellmo/rails/doomhub/public;
passenger_enabled on;
passenger_use_global_queue on;
rails_env development;
}
}
Run Code Online (Sandbox Code Playgroud)
当我将应用程序的服务器端口更改为时80,我自然会 - 在重新启动时 - 收到:
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
...但是当我sudo这样做时,错误将不会显示,该过程将root以其所有者身份开始.然而http://doomhub.local,在浏览器中打开没有返回任何东西(好吧,从技术上讲,它是"浏览器无法解析地址"错误,但我没有得到其他错误,没有nginx错误).我没有记录,也没有任何记录.
当我将侦听端口更改回8080(或其他任何东西)时,当我以普通用户身份运行它时,它就像一个魅力......但是我真的想http://doomhub.local在我的浏览器中使用而不是http://doomhub.local:8080.
是否有任何阻止OSX应用程序监听端口80的东西,我错过了?正如你可以看到我的CAN使用它,所以有一个在路上没有其他进程.它只是不听任何事.
有没有办法8080在浏览器中将其视为"普通" http端口?
如Jan Schejbal建议的那样指定乘客用户并没有为我解决问题,过了一段时间我最终为乘客创建了rvm包装器(而不是允许它使用明确的ruby二进制文件),正如这篇伟大的文章中所述:
http://everydayrails.com/2010/09/13/rvm-project-gemsets.html
感谢创建一个乘客/仅限捆绑器的rvm包装器,当我以root身份启动nginx时,我设法让应用程序运行.我只能根同时指定和用户允许的侦听端口(即我测试了8080和81)和应用程序送达罚款,甚至与所有的宝石不相关的包装二进制文件.然而...
......我仍然没有在80端口上得到任何东西.
哈!我完全忘了我曾经的战俘我的系统上安装.在我开始玩nginx之前,我知道我已经完全禁用了它,但这还不够.您可能知道pow是一个自动创建localhost域的零配置服务器工具 - 这也意味着它......"占用"端口80,如果您键入,您可以看到:
sudo ipfw list
这应该返回如下:
00100 fwd 127.0.0.1,20559 tcp from any to me dst-port 80 in
65535 allow ip from any to any
Run Code Online (Sandbox Code Playgroud)
...这清楚地表明端口80上的任何IP连接都被转发到20559(pow的 端口)
我们现在要做的是删除此端口-80转发信息并使用其他端口.这将使我们能够轻松地为多个rails应用程序(每个都有自己的gemset和配置)托管开发服务器,并通过乘客的上游代理它们.
关于如何完成这项任务的第一部分,有一篇很好的文章.对我来说,似乎只需手动更改ipfw条目就足够了,但我选择了博客条目.如果你这样做 - 确保你使用pow的手册中正确的pow安装/卸载脚本; 例如,在安装脚本成功编译之前,我必须完全卸载 pow .
| 归档时间: |
|
| 查看次数: |
1728 次 |
| 最近记录: |