[Linux]Nginx と PHP の連携
公開日:2025-11-30
更新日:2025-11-30
更新日:2025-11-30
1. 概要
Nginx と PHP を連携させます。
2. Unixドメインソケットによる連携方法
nginx と php-fpm が同じサーバにある場合は、Unixドメインソケットを使用して連携することができます。
Unixドメインソケットとは、パスを I/F にして通信を行う仕組みです。
同じサーバの場合は、TCP/IP のソケット通信よりも高速に通信することができます。
Unixドメインソケットとは、パスを I/F にして通信を行う仕組みです。
同じサーバの場合は、TCP/IP のソケット通信よりも高速に通信することができます。
2.1 nginx.conf の修正
nginx.conf の server ディレクティブに .php の定義を追加します。
/etc/nginx/nginx.conf(抜粋)
修正後、設定ファイルのチェックをして、問題なければ nginx を再起動します。
/etc/nginx/nginx.conf(抜粋)
コード
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# added
location ~ \.php$ {
fastcgi_pass unix:/var/opt/remi/php85/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# added
}
修正後、設定ファイルのチェックをして、問題なければ nginx を再起動します。
コマンド
sudo nginx -t
sudo systemctl restart nginx2.2 php-fpm の www.conf の修正
php-fpm の www.conf は、
/etc/php-fpm.d/www.conf
や
/etc/opt/remi/php85/php-fpm.d/www.conf
にあります。
www.conf の各項目を下記のように変更します。
行の先頭に「;」がある場合は、コメント行になるため、「;」を削除してください。
/etc/opt/remi/php85/php-fpm.d/www.conf(抜粋)
修正後、設定ファイルのチェックをして、問題なければ php-fpm を再起動します。
/etc/php-fpm.d/www.conf
や
/etc/opt/remi/php85/php-fpm.d/www.conf
にあります。
www.conf の各項目を下記のように変更します。
行の先頭に「;」がある場合は、コメント行になるため、「;」を削除してください。
/etc/opt/remi/php85/php-fpm.d/www.conf(抜粋)
コード
user = nginx
group = nginx
listen = /var/opt/remi/php85/run/php-fpm/www.sock
listen.mode = 0660
listen.acl_users = nginx
修正後、設定ファイルのチェックをして、問題なければ php-fpm を再起動します。
コマンド
sudo /opt/remi/php85/root/usr/sbin/php-fpm -t
sudo systemctl restart php85-php-fpm
2.3 php ファイルの作成
/usr/share/nginx/html/test.php
http://localhost:8080/test.php にアクセスして、phpinfo が表示されれば OK です。
コード
<?php
phpinfo();
http://localhost:8080/test.php にアクセスして、phpinfo が表示されれば OK です。
3. TCP/IP のソケット通信による連携方法
nginx と php-fpm が異なるサーバでも連携できます。
3.1 nginx.conf の修正
Unixドメインソケットとは fastcgi_pass が異なります。
/etc/nginx/nginx.conf(抜粋)
修正後、設定ファイルのチェックをして、問題なければ nginx を再起動します。
/etc/nginx/nginx.conf(抜粋)
コード
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# added
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# added
}
修正後、設定ファイルのチェックをして、問題なければ nginx を再起動します。
コマンド
sudo nginx -t
sudo systemctl restart nginx3.2 php-fpm の www.conf の修正
/etc/opt/remi/php85/php-fpm.d/www.conf(抜粋)
修正後、設定ファイルのチェックをして、問題なければ php-fpm を再起動します。
http://localhost:8080/test.php にアクセスすると、「502 Bad Gateway」になります。
Nginx のエラーログを確認します。
これは、SELinux と言うセキュリティー機能により拒否されています。
一時的に SELinux を無効にして、http://localhost:8080/test.php にアクセスしてエラーが出なければ、原因は SELinux です。
SELinux を無効にするのはよくないため、必ず有効に戻してください。
次のコマンドを実行して、Apache と Nginx が外部のネットワークへ接続できるようにします。
http://localhost:8080/test.php にアクセスして、phpinfo が表示されれば OK です。
コード
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.mode = 0660
listen.acl_users = nginx
listen.allowed_clients = 127.0.0.1 # 接続を許可する IPアドレス
修正後、設定ファイルのチェックをして、問題なければ php-fpm を再起動します。
コマンド
sudo /opt/remi/php85/root/usr/sbin/php-fpm -t
sudo systemctl restart php85-php-fpm
http://localhost:8080/test.php にアクセスすると、「502 Bad Gateway」になります。
Nginx のエラーログを確認します。
コマンド
tail /var/log/nginx/error.log
ログ
2025/10/09 22:28:59 [crit] 19569#19569: *7 connect() to 127.0.0.1:9000 failed (13: Permission denied) while connecting to upstream,
client: 10.0.2.2, server: _, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost:8080"
「connect() to 127.0.0.1:9000 failed」となっているため、php-fpm への通信が拒否されています。これは、SELinux と言うセキュリティー機能により拒否されています。
一時的に SELinux を無効にして、http://localhost:8080/test.php にアクセスしてエラーが出なければ、原因は SELinux です。
コマンド
sudo setenforce 0 # SELinux を無効( Permissive:ポリシー違反を許可する )にする
sudo setenforce 1 # SELinux を有効( Enforcing :ポリシー違反を拒否する )にする
getenforce # SELinux のモードの確認
SELinux を無効にするのはよくないため、必ず有効に戻してください。
コマンド
sudo setenforce 1
次のコマンドを実行して、Apache と Nginx が外部のネットワークへ接続できるようにします。
コマンド
sudo setsebool -P httpd_can_network_connect 1
http://localhost:8080/test.php にアクセスして、phpinfo が表示されれば OK です。

