Nginx + Php8 설정

1. Nginx와 PHP 8 연결

nginx php8 패키지를 설치했다고 웹서버에서 php파일이 적용되는 것은 아닙니다. nginx가 php8를 서비스할 수 있도록 일부 파일의 수정이 필요합니다. 설정이 올바르지 않다면 nginx에서 php8이 제대로 작동하지 않습니다. 특히 php파일이 다운로드 되거나 phpinfo 또는 php 코드를 실행시 아무것도 나타나지 않는 문제가 생깁니다.

지금 확인하는 부분은 nginx와 php8 설정을 통해서 웹서버에서 php가 정상적으로 작동하는데 도움을 줄 것입니다.

1개의 파일 유무와 3개의 파일을 수정해야 합니다.

  1. /etc/nginx/nginx.conf 파일이 존재하는지
  2. /etc/nginx/fastcgi_params의 fastcig_param 확인 및 추가
  3. /etc/nginx/sites-available/default 설정에서 php script 추가 및 수정
  4. /etc/nginx/nginx.conf의 default_type

4번째는 수정하지 않는 경우 php파일이 실행되지 않고 다운 받아지는 문제가 생깁니다.

1) /etc/nginx/nginx.conf 확인

앞선 설치 및 진행을 따라 했다면 nginx.conf 파일은 존재합니다. 만약 없다면 다음 내용을 복사해서 파일을 생성하면 됩니다. 아래 내용을 복사해서 파일을 만든다면 4번의 단계는 생략해도 됩니다.

아래에서 php버전에 따라 설정된 user가 다를 수 있습니다. user는 sudo nano /etc/php/8.1/fpm/pool.d/www.conf의 user, group, listen.owner, listen.group 정보와 일치해야 합니다.

파일을 생성합니다.

sudo nano /etc/nginx/nginx.conf

다음 코드를 붙여넣습니다.

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
        ##
        # Basic Settings
        ##
        sendfile on;
        tcp_nopush on;
        types_hash_max_size 2048;
        # server_tokens off;
        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;
        include /etc/nginx/mime.types;
        #default_type application/octet-stream;
        default_type text/html;
        ##
        # SSL Settings
        ##
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##
        gzip on;
        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

2) /etc/nginx/fastcgi_params의 fastcig_param 확인 및 추가

편집기로 /etc/nginx/fastcgi_param을 열고 다음 내용이 없으면 추가합니다.

sudo nano /etc/nginx/fastcgi_params

첫 번째 줄에 다음 코드를 추가합니다.

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
[Step 8] fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 추가

3) /etc/nginx/sites-available/default 설정에서 php script 추가 및 수정

default 파일을 편집기로 실행하고 location 부분을 다음과 같이 수정합니다. 여기서는 8.1버전을 기준으로 수정합니다. 기존 파일에서 다음 부분을 찾아 변경하면 됩니다.

# pass PHP scripts to FastCGI server

location ~ \.php$ {
       include snippets/fastcgi-php.conf;

       # With php-fpm (or other unix sockets):
       fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
[Step 9] pass PHP scripts to FastCGI server 추가

Nginx와 php를 모두 재시작 합니다.

sudo systemctl restart nginx
sudo systemctl restart php8.1-fpm

4. PHP 8 실행 및 확인

php정보를 확인할 파일을 생성합니다. 파일은 web root 에 생성합니다.

sudo nano /var/www/html/info.php

php 코드 규칙에 따라 다음 내용을 복사해서 붙여 넣습니다.

<?php
phpinfo();
?>

웹사이트에서 localhost/info.php 또는 주소/info.php로 php 정보를 확인합니다.

[Step 10] php info 확인

이 글은 nginx 설치 이후 PHP8 셋팅에 있는 내용 중 문제해결에 대한 부분만 별도로 골라내서 작성된 글로 이전 글과 중복되어 있습니다. nginx 설치에 대해서 자세히 알고 싶다면 다음 링크를 클릭하세요

Nginx 웹서버 설치(ubuntu) – Thinknote

ubuntu의 nginx가 설치된 상태에서 php8을 설치하고자 한다면 다음 링크를 클릭하세요. php설치는 wordpress를 설치하기 위한 준비 단계로 진행됩니다.

PHP 8 설치(ubuntu) – Thinknote