我在我的用户帐户(通过自制软件)上安装了 nginx(带 乘客)。几个小时以来,我认为这件事只是拒绝工作,因为我无法让任何 Rails3 应用程序响应一个简单的 nginx 声明的位置。经过深思熟虑(又名反复试验),我得出结论,它确实有效,但拒绝使用端口 80。
我知道,自制软件安装是按用户安装的,因此它不应该能够在仅限 root 的端口(即端口 1024 及以下)上运行,但自制软件本身(以及网络上的各种来源)建议简单地运行服务器通过sudo nginx
足以允许它使用端口 80。
这些是有效的配置的重要文件:
/etc/主机:
##
# 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
/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;
}
}
当我将应用程序的服务器端口更改为 时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,我错过了吗?如您所见,我可以使用它,因此没有其他过程。它只是不听任何东西。
有没有办法8080
在浏览器中将其视为“正常” http端口?
编辑:
正如Jan Schejbal 所建议的那样指定乘客用户并没有解决我的问题,过了一段时间我最终为乘客创建了rvm包装器(而不是允许它使用清晰的 ruby 二进制文件),如这篇精彩的帖子中所述:
http://everydayrails.com/2010/09/13/rvm-project-gemsets.html
由于创建了一个仅限乘客/捆绑程序的 rvm 包装器,当我以root身份启动 nginx 时,我设法让应用程序运行。我可以指定仅 root 和用户允许的侦听端口(即我测试了 8080 和 81 )并且即使使用与包装二进制文件无关的所有gem,应用程序也可以正常服务。然而...
...我仍然在 80 端口上一无所获。