NGinx袜子连接Bad Gateway

 徐修林 发布于 2023-01-17 21:56

我在设置Nginx以与Puma服务器一起使用Rails 4应用程序时遇到问题.

问题似乎是在我的Nginx配置中,因为我不断收到502 Bad Gateway错误,错误日志指出如下:

*1 connect() to unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock failed 
(2: No such file or directory) while connecting to upstream, client: XX.XXX.XX.XXX, 
server: mysitename.com, request: "GET /favicon.ico HTTP/1.1", upstream: 
"http://unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock:/favicon.ico", 
host: "mysitename.com"

这是我正在使用的Nginx站点配置:

upstream mysitename {
  server unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock;
}

server {
  listen 80;
  server_name mysitename.com;
  root /srv/vhosts/rumysitename/www/mysitename/public;

  location / {
    proxy_pass http://mysitename;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location ~* ^/assets/ {
    # Per RFC2616 - 1 year maximum expiry
    expires 1y;
    add_header Cache-Control public;

    # Some browsers still send conditional-GET requests if there's a
    # Last-Modified header or an ETag header even if they haven't
    # reached the expiry date sent in the Expires header.
    add_header Last-Modified "";
    add_header ETag "";
    break;
  }
}

毋庸置疑Puma无法连接到那只袜子,因为它不存在:

rails s -e production -b unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock=> Booting Puma
=> Rails 4.1.0 application starting in production on http://unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Puma 2.8.2 starting...
* Min threads: 0, max threads: 16
* Environment: production
* Listening on tcp://unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock:3000
Exiting
/srv/vhosts/rumysitename/.rvm/gems/ruby-2.1.0/gems/puma-2.8.2/lib/puma/binder.rb:195:in `initialize': getaddrinfo: Name or service not known (SocketError)

我不是系统管理员,对Nginx没有任何经验,所以请原谅我,如果我错过了一些明显的东西.

1 个回答
  • 似乎启动rails服务器并要求它绑定到unix套接字不起作用.-b使用rails服务器的选项与该puma命令的行为不同.基本上它想绑定到IP地址:

    rails server --help
      Usage: rails server [mongrel, thin, etc] [options]
        -p, --port=port                  Runs Rails on the specified port.
                                         Default: 3000
        -b, --binding=ip                 Binds Rails to the specified ip.
                                         Default: 0.0.0.0
    

    你可以直接运行puma:

    puma -e production -b unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock
    

    套接字将通过像这样运行puma来创建.它不需要存在.您需要获得在指定位置创建它的权限,但如果不是这样,您将收到不同的错误.

    另一种方法是创建一个config/puma.rb可以包含绑定的文件:

    config/puma.rb:

    bind 'unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock'
    

    然后运行puma引用:

    puma -C config/puma.rb -e production
    

    你可以在配置文件中放入更多,而不仅仅是袜子.美洲狮示例配置文件是一个很好的起点.

    2023-01-17 22:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有