4

我正在 mac OSX 上开发一个 RoR 应用程序。

为了能够访问我的应用程序http://localhost,并且为了在我的测试中支持 SSL,我使用 nginx 作为我的 Webrick 端口 3000 的代理,配置如下:

server {
    listen 80;
    server_name app.mysite.com;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect off;
        proxy_pass http://127.0.0.1:3000;
    }
}

server {
    listen       443 ssl;
    server_name  secure.app.mysite.com;

    ssl                  on;
    ssl_certificate      ssl/server.crt;
    ssl_certificate_key  ssl/server.key;

    keepalive_timeout 600;
    ssl_session_timeout 10m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    location / {
        proxy_pass http://127.0.0.1:3000;
        ### force timeouts if one of backend is died ##
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
        ### Set headers ####
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        ### Most PHP, Python, Rails, Java App can use this header ###
        proxy_set_header X-Forwarded-Proto https;
        ### By default we don't want to redirect it ####
        proxy_redirect     off;
   }
}

当我在其中一个上访问应用程序http://localhost/https://localhost/ 服务器快速响应时,开销http://localhost:3000可以忽略不计。

但是,当我尝试从同一网络上的另一台计算机(例如http://10.0.1.9/)访问我的机器时,服务器的响应非常缓慢,或者根本没有响应。

在这种情况下,似乎 nginx 甚至没有向端口 3000 发送内部请求,尽管请求肯定是从外部到达 nginx 的,并且从外部对端口 3000 的请求非常快。

重要的是要注意我的应用程序在开发模式下运行,并且我的资产(相当多)没有预编译。

除了 nginx 之外,还有其他选择可以轻松地在我的网络上公开我的开发站点,即易于配置并支持 SSL?

谢谢,爱丽儿

4

3 回答 3

1

原来这是nginx的权限问题。我在 nginx 错误日志中发现错误后发现它。

解决方案可以在这里找到

https://serverfault.com/questions/235154/permission-denied-while-reading-upstream

于 2013-04-03T06:51:40.013 回答
0

我敢打赌它根本不是 nginx。很难想象 nginx 会在传递到同一服务器上的上游之前将请求保留很长时间。您能否检查两个访问日志(nginx 和 ROR)以查看请求开始时间是否不同?

你的osx是哪个版本的?是狮子还是山狮?两者都存在使用 /etc/hosts 中的条目进行慢速 dns 查找的问题。

我的同事也经历了同样的缓慢。有关讨论,请参阅Mac OSX Lion DNS 查找顺序。有点乱

于 2013-04-02T16:35:44.590 回答
0

有几个项目可以尝试,因为使用 localhost 但不能在另一台计算机上正常工作听起来很可疑。

  • 还要'netstat -na | grep 80'确保 Nginx 正在监听 0.0.0.0 或 *:80 而不是 127.0.0.1。如果 Nginx 没有监听 0.0.0.0 或 * 那么它可能是 TCP 路由问题。任何服务器都一样。这是一个很好的示例输出(我的示例是在 8000 上监听)

    tcp4 0 0 *.8000 *.* LISTEN

  • 为了好玩,在你的 Nginx 代理语句中将“127.0.0.1”更改为“localhost”和/或“0.0.0.0”(尽管路由将在它到达时完成)

另外,我建议您尝试使用 Nginx 的日志来查看是否还有其他问题。这里已经有一个关于更好的代理/上游日志记录的stackoverflow:logging proxy activity in nginx

此外,您应该打开调试日志(我已经解决了这个问题),将其放在 access_log 指令的下方/上方。这样的事情应该做的很好:

 error_log  /Users/your_name/nginx_test/logs/error.log  debug;

请注意,对于 Nginx,您必须为日志使用绝对路径。

祝你好运。

于 2013-04-02T18:23:28.923 回答