Amazon Linux 2023 + PHP で Hello World を表示させる

EC2 Amazon Linux 2023 にて PHP をインストールして、
ブラウザに hello world を表示させるまでのメモ。

環境

  • AWS
  • EC2 Amazon Linux 2023
  • Nginx 1.24.0
  • PHP 8.3.10
  • 作業ユーザーは ec2-user
  • 管理者は root

PHP のインストール

バージョン指定しなかったら最新版がインストールされるっぽい。

# 大量にでてくる
$ dnf search php

# 必要そうなものだけインストールする
# 正直どれが必須でどれが不必要か分からない
#
$ sudo dnf -y install php php-fpm php-devel php-cli php-common php-mbstring php-mysqlnd php-pdo php-bcmath php-xml php-gd php-gmp

# 確認
$ php -v
PHP 8.3.10

# php-fpm の起動、自動起動
$ sudo systemctl start php-fpm.service
$ sudo systemctl enable php-fpm.service

php-fpm の設定

Nginx で PHP を動かす時は php-fpm が必要。
変更点と確認する点のみ抜粋。

/etc/php-fpm.d/www.conf

デフォルトが apache になってる。

; Unix user/group of processes
user = nginx
group = nginx

sock ファイルの名前とパス確認。

; The address on which to accept FastCGI requests.
listen = /run/php-fpm/www.sock

権限の確認。デフォルトが nobody になってる。

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

こちらの権限も確認。

; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
listen.acl_users = apache,nginx
;listen.acl_groups =

ログの場所の確認。

; The log file for slow requests
slowlog = /var/log/php-fpm/www-slow.log

再起動

$ sudo systemctl restart php-fpm.service

Nginx の設定

/etc/nginx/conf.d/php-fpm.conf

特に必要ないから名前を変更しておく。

$ cd /etc/nginx/conf.d/
$ sudo mv php-fpm.conf php-fpm.conf.temp

/etc/nginx/default.d/php.conf

特に必要ないから名前を変更しておく。

$ cd /etc/nginx/default.d/
$ sudo mv php.conf php.conf.temp

/etc/nginx/conf.d/your-product.conf

PHP のフレームワークを導入想定。

server {
    listen       80;
    listen  [::]:80;
    # server_name  your.prod.com;
    server_name  localhost;

    root /path/to/your-product/app/public;

    index index.php index.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # using PHP
    #
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/www.sock;
        fastcgi_index /index.php;

        include /etc/nginx/fastcgi_params;

        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # using PHP Framework
    #
    try_files $uri $uri/ @rewrite;

    location @rewrite {
        rewrite ^(.*)$ /index.php?_url=$1;
    }
    location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
        root /path/to/your-product/app/public;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

再起動

$ sudo systemctl restart nginx.service

hello world

/path/to/your-product/app/public/index.php

hello world!

その他作業

確認

該当サーバーの IP アドレスにアクセスすると、 hello world が表示されている。と思う。