You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu VPS中Nginx+PHP7.4+PostgreSQL Unix Socket配置问题咨询

问题解答:Ubuntu下Nginx+PHP7.4+PostgreSQL的Unix Socket配置

1. 各配置文件对应的Unix Socket说明

  • Nginx服务器块:必须使用PHP-FPM的Unix Socket(/run/php/php7.4-fpm.sock),这是Nginx与PHP-FPM之间的通信通道,你的当前配置是正确的。
  • PHP-FPM的www.conf:这里的listen配置是PHP-FPM自身监听的Socket,同样是/run/php/php7.4-fpm.sock,权限设置www-data组和0660模式没问题,能保证Nginx(运行用户为www-data)正常访问。
  • PostgreSQL配置(postgresql.conf、pg_hba.conf):使用PostgreSQL自身的Unix Socket,默认路径是/var/run/postgresql(目录下实际的Socket文件是.s.PGSQL.5432),不需要修改为/run/php/——改路径会导致终端psql无法找到默认Socket,你的当前设置正确。
  • PHP代码的pg_connect:需要指定PostgreSQL的Socket目录,你当前的$host缺少开头的/,正确值应为/var/run/postgresql,这是导致连接失败的关键问题之一。

2. 完整配置教程(匹配你的目标)

前置准备

先安装所需组件:

sudo apt update && sudo apt install nginx php7.4-fpm php7.4-pgsql postgresql-13

步骤1:Nginx站点配置

编辑你的站点配置文件(例如/etc/nginx/sites-available/your-site):

server {
    listen 80;
    server_name 你的域名或IP;
    root /var/www/你的站点目录;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params; # 必须添加,补充必要的FastCGI参数
    }
}

启用站点并验证Nginx配置:

sudo ln -s /etc/nginx/sites-available/your-site /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

步骤2:PHP-FPM配置

编辑/etc/php/7.4/fpm/pool.d/www.conf,确认以下配置:

listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
user = www-data
group = www-data

重启PHP-FPM:

sudo systemctl restart php7.4-fpm

步骤3:PostgreSQL配置

3.1 修改postgresql.conf

编辑/etc/postgresql/13/main/postgresql.conf:

listen_addresses = '*' # 若不需要远程TCP连接,可改为'localhost'
unix_socket_directories = '/var/run/postgresql' # 保持默认路径

3.2 修改pg_hba.conf

编辑/etc/postgresql/13/main/pg_hba.conf,设置本地认证规则:

# Unix Socket连接认证
local   all             all                                     trust
# 本地TCP连接(可选)
host    all             all             127.0.0.1/32            trust

重启PostgreSQL:

sudo systemctl restart postgresql

步骤4:PHP代码修正

调整pg_connect的参数,确保Socket路径正确:

$host = '/var/run/postgresql';
$dbname = '你的数据库名';
$user = '你的数据库用户';
$password = '你的数据库密码';

// 建立连接
$conn = pg_connect("host=$host dbname=$dbname user=$user password=$password");

// 测试连接
if (!$conn) {
    die("连接失败: " . pg_last_error());
}

步骤5:权限检查与调整

确保www-data用户能访问PostgreSQL的Socket目录:

sudo chmod 770 /var/run/postgresql
sudo usermod -aG postgres www-data

重启所有服务:

sudo systemctl restart nginx php7.4-fpm postgresql

内容的提问来源于stack exchange,提问作者astaga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:58:29