如何使用Unix套接字启动Puma

23
我遵循这个链接来配置nginx与puma,但是当我使用
bundle exec puma -e development -b unix:///var/run/my_app.sock
启动服务器时,会抛出Permission denied - "/var/run/my_app.sock" (Errno::EACCES) error错误。但是当我使用bundle exec puma -e development启动服务器时,它会在tcp://0.0.0.0:9292上启动。/var/run/中并不存在my_app.sock文件。

我该如何使用unix socket启动服务器,并通过my_app.conf文件中给定的域名访问应用程序。

请问有人可以帮助我吗?

1个回答

35

要使用套接字绑定启动puma,只需使用/tmp目录:

bundle exec puma -e development -b unix:///tmp/my_app.sock

要通过域名访问应用程序,您应该使用类似于nginx并进行配置。

在Ubuntu中安装nginx只需运行下一个命令:

sudo apt-get install nginx

运行sudo nano /etc/nginx/sites-available/my_app.conf,并将下面的配置放入此文件中(Ctrl + X,Y - 保存更改):

upstream my_app {
  server              unix:///tmp/my_app.sock;
}

server {
  listen              *:80;
  server_name         my_app.com;

  access_log          /var/log/nginx/my_app-access.log;

  location /favicon.ico {
    root              /var/www/my_app/public/assets/favicon.ico;
    gzip_static       on;
    expires           max;
    add_header        Cache-Control public;
  }

  location / {
    root              /var/www/my_app/public;
    try_files         $uri @app;
    gzip_static       on;
    expires           max;
    add_header        Cache-Control public;
  }

  location @app {
    proxy_pass        http://my_app;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto http;
    proxy_set_header  Host $http_host;
    proxy_redirect    off;
    proxy_next_upstream error timeout invalid_header http_502;
  }   
}

您应更改/var/www/my_appmy_app.com为适当的值。

在启用的站点中添加符号链接:sudo ln -fns /etc/nginx/sites-available/my_app.conf /etc/nginx/sites-enabled/

重新启动nginx:sudo service nginx restart

将您的域名链接到服务器IP(通过hosts文件或DNS提供商)。


笑,我的编辑被拒绝了。需要修改错误的协议(在request对象中将端口设置为'443',协议设置为'https://'和.ssl? True)将proxy_set_header X-Forwarded-Proto https;更改为proxy_set_header X-Forwarded-Proto $scheme; - Artem P
@2nd 感谢您的评论。已经修复了。 - Viacheslav Molokov
此外,在某些发行版(如Centos8)中,systemd units具有服务设置选项,该选项指示系统创建private temporary files,这意味着仅由同一进程访问。这也可能是一个问题。为了防止这种情况,请在服务设置文件的[Service]块中设置PrivateTmp=No - Fernando Vieira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接