nginx(+ passenger)似乎不在端口80上运行

ell*_*lmo 1 macos homebrew passenger nginx ruby-on-rails-3

我在我的用户帐户上安装了nginx( 乘客)(通过 自制程序).几个小时后我觉得这件事只是拒绝工作,因为我无法让任何Rails3应用程序响应一个简单的nginx声明的位置.经过深思熟虑(AKA试错)我得出的结论是它确实有效,但拒绝使用端口80.

我知道,自制安装是每用户安装,因此它不应该只能在root用户端口上运行(即端口1024及以下),但自制软件本身(以及网络上的各种来源)表明只需运行服务器通过sudo nginx就足以允许它使用端口80.

这些是配置的重要文件,它们可以正常工作:

/ etc/hosts中:

##
# 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)

/usr/local/etc/nginx/nginx.conf:

#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端口上得到任何东西.

ell*_*lmo 7

正确诊断

哈!我完全忘了我曾经的战俘我的系统上安装.在我开始玩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 .