在 Mac OS X(10.6.1)上使用 Nginx/Passenger 时出现 502 Bad Gateway 错误

在 Mac OS X(10.6.1)上使用 Nginx/Passenger 时出现 502 Bad Gateway 错误

经过几个小时与这个异常的斗争,我终于承认失败了。如果这里有人能帮助我,我将不胜感激!


摘要:

我的 Nginx 错误日志中有此错误:

2009/11/09 02:49:59 [error] 90#0: *7 connect() to unix:/tmp/passenger.54/master/helper_server.sock
failed (61: Connection refused) while
connecting to upstream, client:
127.0.0.1, server: test.local, request: "GET / HTTP/1.1", upstream:
"passenger://unix:/tmp/passenger.54/master/helper_server.sock:",
host: "test.local"

完整详细信息如下。


我在本地机器上安装了 Nginx 和 Passenger,打算用它进行本地开发。我之前运行的是 Apache 和 Passenger,但遇到了一些错误,所以我决定切换。

我顺利安装了 Passenger Nginx 扩展/usr/本地/nginx

并在其中配置 Nginx/usr/local/nginx/conf/nginx.conf

为了完整起见,这里是 nginx.conf 的内容:

worker_processes  2;
pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    passenger_root /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.5;
    passenger_ruby /usr/local/bin/ruby;
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
     listen 80;
     server_name test.local;
     root /Users/i0n/Sites/test/public;
     passenger_enabled on;
     rails_env development;
     client_max_body_size 10M;
     client_body_buffer_size 128k;
     }
}

然后我又补充道在 /usr/local/nginx/sbin 中添加到我的路径变量中。到目前为止一切顺利。如果我使用 sudo nginx 从终端启动 Nginx,则不会遇到任何问题,我可以在http (冒号)//test.local正如预期的那样。

当我尝试配置系统以在启动时加载 Nginx 时,问题出现了。我按照 Nginx wiki 中的说明进行操作(针对不同的路径做了一些调整)

我在以下位置创建了一个 plist 文件: /系统/库/LaunchDaemons/nginx.plist

其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key><string>nginx</string>
    <key>Program</key><string>/usr/local/nginx/sbin/nginx</string>
    <key>KeepAlive</key><true/>
    <key>NetworkState</key><true/>
    <key>StandardErrorPath</key><string>/usr/local/nginx/logs/error.log</string>
    <key>LaunchOnlyOnce</key><true/>
  </dict>
</plist>

然后我跑sudo launchctl load -F /System/Library/LaunchDaemons/nginx.plist

如果我重新启动系统并转到http://测试.local在浏览器中,我看到一个页面,上面写着:

502 错误网关 nginx/0.7.61

如果我查看 Nginx 错误日志(位于 /usr/local/nginx/logs/error.log)

我看到记录了以下错误:

2009/11/09 02:49:59 [error] 90#0: *7 connect() to unix:/tmp/passenger.54/master/helper_server.sock
failed (61: Connection refused) while
connecting to upstream, client:
127.0.0.1, server: test.local, request: "GET / HTTP/1.1", upstream:
"passenger://unix:/tmp/passenger.54/master/helper_server.sock:",
host: "test.local"

如果我手动停止然后使用 sudo 从终端启动 Nginx,它就会开始工作。老实说,这个问题让我很困惑,它可能真的很简单,但我现在看不懂。任何想法或建议都会得到感激。感谢您花时间阅读这篇文章!

伊恩

答案1

您需要设置“守护进程关闭”。launchctl 假定它产生的进程不会成为守护进程,否则它就无法知道何时重新启动一个进程。http://almosteffortless.com/2009/09/16/passenger-with-nginx-on-mac-os-x/

相关内容