iT邦幫忙

0

php 程式無法connect 到 TCP server, 會 permission denied.

請問先進,我寫的 PHP程式在連接tcp server時遇到Permission denied,無法透過 socket連上 tcp server,請問該如何解決?是否需要修改或設定 PHP-fpm或是 nginx權限?

問題環境描述:

  1. 在 virtual machine 上 執行 ubuntu 20.04, 執行有 nginx web server 及 自己寫的 tcp server程式.
  2. 客戶端在另一台電腦上,透過 www (javascript) 連上這台 nginx web server. 因而帶起相關的 PHP 程式.
  3. PHP 程式透過 AF_UNIX socket 向 tcp server請求資料.在 connect 階段發生錯誤.
  4. 這個 PHP 程式前一版是透過 AF_INET 方式是可以連上 tcp server (當時TCP server使用 AF_INET),沒有遇到類似問題.改成 AF_UNIX方式才出現 permission denied問題.

我的 tcp server 是從一般 user account 帶起來執行的.在 socket_connect 時出現錯誤.請問是否 nginx或 php 權限有需要修改的地方?

查看 nginx.conf:
root 1031 1 0 09:01 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 1032 1031 0 09:01 ? 00:00:00 nginx: worker process
www-data 1033 1031 0 09:01 ? 00:00:00 nginx: worker process
calvint+ 2277 2263 0 09:06 pts/0 00:00:00 grep --color=auto nginx

php 資料如下:
root 911 0.0 0.7 227544 29168 ? Ss 09:01 0:00 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
www-data 1075 0.0 0.2 227992 10920 ? S 09:01 0:00 php-fpm: pool www
www-data 1076 0.0 0.2 227992 10920 ? S 09:01 0:00 php-fpm: pool www
calvint+ 2695 0.0 0.0 9380 656 pts/0 S+ 09:31 0:00 grep --color=auto php

php 相關程式如下:

$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
if ($socket === false) {
echo "socket_create() failed: reason: "
. socket_strerror(socket_last_error($socket));
return;
}

$result = socket_connect($socket, $SERVER_PATH);

if ($result === false) {
echo "socket_connect() failed: reason: "
.socket_strerror(socket_last_error($socket));
return;
} ** // 在這裡出錯
**

2 個回答

0

chown nginx:nginx /var/run/php-fpm/php-fpm.sock

我要發表回答

立即登入回答