본문 바로가기

Oracle Cloud Infrastructure(OCI)

nginx + php (ubuntu 22.x)

$ sudo service nginx reload
$ sudo service php8.1-fpm restart

1. 설치 환경

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy
ubuntu 22 환경에 nginx 와 php를 설치토록 한다
 

2. nginx 설치

$ sudo apt update
$ sudo apt install nginx
 

3. 방화벽 설정

 
3.1 IPtables(패킷필터링 방식의 리눅스 기본 방화벽)
제어가 필요한 port를 아래와 같이 등록하여 준다
$ sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
 
3.2 ufw
   nginx가 제대로 설치가 완료되면 자동으로 방화벽에 등록이 되며 아래와 같이 확인할 수 있다.
$ sudo ufw app list
Available applications:
  Apache
  Apache Full
  Apache Secure
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
 
필요하면 등록하면 된다
$ sudo ufw allow http https mysql


# 포트를 직접 명시하여 등록할 수도 있다
$ sudo ufw allow 3306/tcp

** 서버가 Cloud와 같은 환경에 있다면, Cloud의 VCN 설정 등 그에 따른 네트워크 정책도 설정하여야 한다.

 
  3.3 서비스 재기동
$ sudo systemctl restart ufw
$ sudo service nginx restart

 

5. PHP 설치

  5.1 엔진 설치

$ sudo apt install php

# 설치 확인
$ php -v
PHP 8.1.2 (cli) (built: Aug 8 2022 07:28:23) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

 

  5.2 PHP-FPM(PHP-FPM (FastCGI Process Manager) 설치

웹서버 프로그램과의 통신을 하기 위한 모듈을 설치한다.

$ sudo apt install php-fpm

# 또는 아래와 같이 장인정신으로 한 땀, 한 땀 정성으로 모아 설치할 수 있다.
$ sudo apt install -y php8.1-fpm php8.1-gd php-json php8.1-mysql php8.1-curl php8.1-mbstring php8.1-intl php-imagick php8.1-xml php8.1-zip

  5.3 php / php-fpm 환경 설정

 

아래 파일에서 설정하면 된다.

- /etc/php/8.1/fpm/php.ini

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

 

6. nginx 와 php 연결하기

  6.1 php-fpm 설정

 

/etc/php/8.1/fpm/pool.d/www.conf 파일에서

"listen :" 부문을 찾아서

listen : 127.0.0.1:9000 으로 설정한다.

 

  6.2 nginx 설정 파일 변경

 

  설정 파일들은 /etc/nginx 폴더에 있으며 메인 설정파일에서 각 설정파일을 include하는 형식으로 구성되어 있다

이 중 /etc/nginx/sites-available/default 파일을 편집하여 설정하면 된다.

# 중략

# index 부분에 index.php를 추가한다.
index index.php index.html index.htm index.nginx-debian.html;

# 중략
# location ~ \.php$ 블럭을 추가하고
# include snippets/fastcgi-php.conf; 부분의 커멘트를 제거하고
# fastcgi_pass를 php에서 설정한 값으로 세팅한다
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # 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/php7.4-fpm.sock;
                # With php-cgi (or other tcp sockets):
                fastcgi_pass 127.0.0.1:9000;
        }

  6.3 서비스 재기동

# php-fpm 재기동
# apt install php-fpm로 설치하여도 버전명이 포함된 버전으로 설치된다
$ sudo service php8.1-fpm restart

# nginx의 환경 설정만을 반영하고자하는 경우 reload를 사용할 수 있다.
$ sudo service nginx restart

 

7. html / html 확장자도 php 처럼 인식하게 하기

 

7.1 nginx 설정(/etc/nginx/sites-available/default) 수정

server{
      location ~ \php$ {


      }
}

# 아래와 같이 php -> (php|htm|html) 으로 수정한다
server{
      location ~ \.(php|htm|html)$ {

     }
}

 

7.2 fpm 설정(/etc/php/8.1/fpm/pool.d/wwww.conf )수정

;security.limit_extensions = .php .php3 .php4 .php5 .php7

# 세미콜론(';')을 제거하고 .html과 .htm을 아래와 같이 추가한다 
security.limit_extensions = .html .htm .php .php3 .php4 .php5 .php7

 

7.3 서비스 재기동

$ sudo service nginx reload
$ sudo service php8.1-fpm restart