我的用户帐户上安装了nginx( 乘客 )( via 自制 )。几个小时后我觉得这件事只是拒绝工作,因为我无法让任何Rails3应用程序响应一个简单的nginx声明的位置。经过深思熟虑( AKA试错法)后,我得出结论认为它确实有效,但拒绝使用80端口。
我知道,自制安装是每用户安装,因此它不应该只在root用户端口上运行(即。端口1024及以下 ),但自制的(以及网上的各种来源)表明只需通过sudo nginx
运行服务器就足以允许它使用端口80。 / p>
这些是 工作的重要配置文件:
##
# 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
#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;
}
}
当我将应用程序的服务器端口更改为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 包装器(而不是允许它使用明确的红宝石二进制文件),如这篇伟大的帖子所述:
http://everydayrails.com/2010/09/13/rvm-project-gemsets.html
感谢创建 passenger / bundler-only rvm包装,当我以 root 启动nginx时,我设法让应用程序运行。我可以指定仅限root用户和用户允许的侦听端口(即我测试了8080和81 ),即使所有 NOT 与包装二进制文件相关。然而...
......我仍然没有在80端口上得到任何东西。
答案 0 :(得分:7)
哈! 我完全忘了我的系统上安装了 pow 。在我开始玩 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
...这清楚地表明端口80上的任何IP连接都转发到20559( pow&#39> s 端口)< / p>
我们现在要做的是删除此端口-80转发信息并使用其中的其他端口。这样我们就可以轻松地为多个rails应用程序(每个都有自己的gemset和配置)托管开发服务器,并通过乘客上游代理它们。
There's a great write-up on how to achieve the first part of this task。对我来说,似乎只需手动更改 ipfw 条目就足够了,但我选择了博客条目。如果您这样做 - 请确保使用pow's manual中正确的 pow 安装/卸载脚本;例如,在安装脚本成功编译之前,我必须完全 un -install pow 。
答案 1 :(得分:0)
我认为以root身份运行会导致权限问题,导致应用无法正常工作。您是否与PassengerUserSwitching
和PassengerUser
一起尝试了PassengerGroup
选项?
编辑:错过了“无法解析地址”错误。仍尝试上述(乘客有时很奇怪),但也尝试运行netstat以查看端口是否正确绑定。