我在 RasPi 上的 Arch Linux 下设置了 nginx 和 php-fpm。nginx 是在 chroot 中设置的,如维基百科php-fpm.conf
。当并nginx.conf
设置为监听127.0.0.1:9000
并且php-fpm.conf
不声明 pid 的路径时,一切运行正常。
现在我想更改设置以使用 UNIX 套接字,正如网络上所建议的那样。因此我添加了php-fpm.conf
以下内容。
pid = /srv/http/run/php-fpm/php-fpm.pid
...
[www]
chroot = /srv/http;
listen = /srv/http/run/php-fpm/php-fpm.sock
也替换fastcgi_pass
为nginx.conf
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
当我手动创建.sock
文件并重新启动 php-fpm 和 nginx 时,它可以工作。但是每当我重新启动时,php-fpm
目录和.sock
文件都会消失...
我如何在重启后保留它们?/etc/fstab
包括
tmpfs /srv/http/run tmpfs rw,noexec,relatime,size=1024k 0 0
tmpfs /srv/http/tmp tmpfs rw,noexec,relatime,size=102400k 0 0
答案1
不能。这与重启后保留 TCP 连接是一样的。套接字由侦听它(在您的例子中是php-fpm
)并nginx
连接到它的进程创建。如果您因为nginx
无法打开它而遇到问题,您很可能以错误的顺序启动了您的服务(您必须php-fpm
在启动之前启动nginx
,以便启动时套接字存在nginx
)。
答案2
tmpfiles(systemd 的一部分)将创建和删除临时/易失性目录和文件。通常这些目录和文件放在 /run 或 /tmp 中,但它可以在任何地方工作。
要在启动时创建目录 /srv/http/run/php-fpm,请在以下位置创建配置文件/etc/tmpfiles.d像这样:
d /srv/http/run/php-fpm 0755 http http -
这将为 http 用户和组(Arch 的默认 php-fpm/web 用户)创建具有权限 0755 的目录
该文件可以随意命名,但必须以 .conf 结尾。例如 (php-fpm.conf)
套接字本身是由 php-fpm 在启动时创建的,因此请确保它在 systemd 中已启用:
systemctl enable php-fpm