FREEDOM. FRIENDS. FEATURES. FIRST.
페도라 한국 사용자 모임

Fedora 33 Nginx PHP MySQL 연동

게시판 Tech/Tip Fedora 33 Nginx PHP MySQL 연동

  • This topic has 0개 답변, 1명 참여, and was last updated 2 weeks, 6 days 전에 by 태랑. This post has been viewed 76 times
  • 만든이
    게시글
  • #21405
    태랑
    키 마스터
    • 게시글207
    • 댓글878
    • 총합1085
    • ★★
    @admin

    안녕하세요 운영자 태랑(정현호) 입니다.

     

    이번에는 Fedora33 버전에서 LEMP 구성을 진행 해보도록 하겠습니다.

    LEMP 는 Linux + Nginx + PHP + MySQL(MariaDB) 의 약자 입니다.

    웹 서버를 구축하고 PHP 로 작성된 웹 어플리케이션을 구동하기 위해 이전부터 많이 사용해온 스택 입니다.

     

    PHP 를 구동 하기 위한 서버 스택의 구성은 여러가지 방식으로 할 수 있습니다.

      - Apache + PHP(mod_php) + MySQL 나 MariaDB
      - Apache + PHP-FPM + MySQL 나 MariaDB
      - Nginx + PHP-FPM + MySQL 나 MariaDB

    이번 글에서는 dnf(패키지)으로 Nginx + PHP-FPM + MySQL 기술 하도록 하겠습니다.

     

    설치 환경

     - OS: Fedora Linux 33 (5.8.18-300)
     - Nginx 1.19.6 + PHP 7.4.13 + Mysql 8.0.22

    nginx mysql php 순으로 설치 하겠으며, 프롬프트는 user$  입니다.

     

     

    1.Nginx 설치

     

    Nginx 에서 HTTP/2 적용 과 HTTPS TLS v1.3 를 사용하기 위해서는 일정 이상의 버전이 필요합니다.

      - HTTP/2 : nginx 1.9.5 이상 , OpenSSL 1.0.2
      - HTTPS TLS v1.3 : nginx 1.13.0 이상, OpenSSL 1.1.1

     

    Fedora 33 버전의 기본 repository 로 설치 가능한 버전

    user$ nginx -V
    nginx version: nginx/1.18.0
    built by gcc 10.2.1 20200723 (Red Hat 10.2.1-1) (GCC)
    built with OpenSSL 1.1.1g FIPS 21 Apr 2020 (running with OpenSSL 1.1.1i FIPS 8 Dec 2020)
    TLS SNI support enabled

    => TNS v1.3 을 사용하기에 nginx 버전이 충족하지 않습니다.

     

     

    Nginx 는 Mainline 버전과 Stable 버전이 있습니다.

    새로운 특징, 기능, 버그 패치 등은 Mainline 버전에서 작업하고 그 이후에, 새로운 기능이 추가되지 않고 버그 패치만 하는 게 Stable 버전입니다.

     

    버전 선택에 관련해서 NGINX 의 공식 입장은 다음과 같습니다.

    We recommend that in general you deploy the NGINX mainline branch at all times.
    The main reason to use the stable branch is that you are concerned about possible impacts of new features, such as incompatibility with third-party modules or the inadvertent introduction of bugs in new features.

    기본적으로 Mainline 버전을 택하고 지속적으로 업데이트 하기를 권장하고 있으며, Stable 버전은 3rd party(서드 파티) 모듈과 호환성 문제 또는 New Feature 로 인한 문제로 인하여 업데이트가 불가능한 상황에서 사용하면 된다고 합니다.

    그래서 nginx의 Mainline 버전으로 하여 최신버전을 설치 하도록 하겠습니다.

     

     

    사전 필요 패키지 설치

    user$ sudo dnf install -y dnf-utils curl gnupg2 \
    git wget gcc gcc-c++ make cmake \
    openssl-devel libxml2-devel libxslt-devel \
    gd-devel perl-ExtUtils-Embed GeoIP-devel \
    pcre-devel rpm-build

     

     

    Nginx Repository 설정

    Nginx 에서의 Fedora repository가 없기 때문에 Centos8 용으로 설정후 설치하도록 하겠습니다.

    suer$ sudo vi /etc/yum.repos.d/nginx.repo

    아래 내용으로 입력 합니다.

    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/8/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true

    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/8/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true

     

     

    기존에 nginx 가 설치 되어있다면 삭제 합니다

    user$ sudo dnf -y remove nginx

     

     

    Nginx 를 설치 합니다.

    user$ sudo dnf -y install nginx

    ===============================================
    패키지 아키텍처 버전 리포지터리
    ===============================================
    설치 중:
    nginx x86_64 1:1.19.6-1.el8.ngx nginx-mainline

    트랜잭션 요약
    ===============================================
    설치 1 패키지

     

     

    버전 확인

    user$ nginx -V
    nginx version: nginx/1.19.6
    built by gcc 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC)
    built with OpenSSL 1.1.1c FIPS 28 May 2019 (running with OpenSSL 1.1.1i FIPS 8 Dec 2020)
    TLS SNI support enabled

     

     

     

    2. MySQL

     

    * 설치후 mysql 계정과 mysql 그룹은 자동 추가가 됩니다

     

    mysql repository 설치

    user$ sudo rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

    user$ sudo dnf clean all

     

     

    mysql community 버전 설치

    user$ sudo dnf -y install mysql-community-server \
    mysql-community-devel mysql-community-server-debug

     

     

    root 패스워드 변경

    user$ sudo systemctl start mysqld

    * mysql 를 처음 시작 하고 로그에서 임시 비밀번호를 확인 할 수 있습니다.

    user$ sudo cat /var/log/mysqld.log | grep "temporary password"
    [Note] A temporary password is generated for root@localhost: RTZwovJ#r8*:

    user$ mysql -uroot -p
    Enter password: <==위에서의 비밀번호 입력, RTZwovJ#r8*:

     

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '변경할 패스워드';
    <-- 패스워드는 복잡도를 고려 해야 합니다.

     

    mysql> commit;
    mysql> flush privileges;
    mysql> exit;

     

     

    기본적인 mysql 파라미터 추가

    user$ vi /etc/my.cnf

    [mysqld] <-- 절에 아래 내용을 추가로 입력해 줍니다.
    user=mysql
    server-id=1
    log_bin = binlog
    expire_logs_days=10
    innodb_buffer_pool_size = 384M
    innodb_file_per_table=TRUE
    bind-address=0.0.0.0
    log_timestamps=SYSTEM
    character-set-client-handshake=OFF
    skip-character-set-client-handshake
    max_allowed_packet=500M
    init_connect=SET collation_connection = utf8mb4_general_ci
    init_connect=SET NAMES utf8mb4
    character-set-server = utf8mb4
    collation-server = utf8mb4_general_ci

     

     

    MySQL 를 재시작 합니다.

    [root]# systemctl restart mysqld

     

     

    MySQL 파라미터 관련해서는 아래글에서 더 참조하시면 됩니다.

    https://hoing.io/archives/359

     

     

     

    3. PHP 설치 

     

    설치 진행

    user$ dnf -y install php php-common \
    php-fpm php-gd \
    php-devel php-pecl-mcrypt \
    php-mysqlnd php-opcache \
    php-mbstring php-pdo \
    php-pecl-imagick-devel \
    php-pecl-zip php-bcmath build \
    curl curl-devel php-pecl-imagick \
    libpng libpng-devel libwebp libwebp-devel \
    libXpm libXpm-devel openssl openssl-devel \
    autoconf zlib zlib-devel freetype freetype-devel \
    gd gd-devel libmcrypt libmcrypt-devel \
    libtool-ltdl-devel libxml2-devel \
    libxml2 libcurl libcurl-devel

     

     

    버전 확인

    user$ php -v
    PHP 7.4.13 (cli) (built: Nov 24 2020 10:03:34) ( NTS )
    Copyright (c) The PHP Group
    Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.13, Copyright (c), by Zend Technologies

     

     

    PHP 파라미터 수정

    user$ vi /etc/php.ini

    아래 5개는 주석 제거 및 내용 수정
    date.timezone = Asia/Seoul
    expose_php = Off
    post_max_size = 500M
    upload_max_filesize = 200M
    memory_limit = 512M

     

     

     

    4. PHP-FPM 설정

     

    php-fpm.conf 파일 수정

    user$ sudo vi /etc/php-fpm.conf

    include=/etc/php-fpm.d/*.conf
    --> 주석이 해제 되어 있는지 확인

    daemonize = yes
    -> 주석으로 되어 있다면 주석을 해제 합니다.

     

    ; Log level
    ; Possible Values: alert, error, warning, notice, debug
    ; Default Value: notice
    ;log_level = notice

    -> PHP-FPM 데몬의 Log level Default 는 notice 입니다.
    -> 문제에 대한 분석이나 초기 설정 후 확인 등이 필요하다면 debug 레벨로 변경하여 사용해도 됩니다.

     

     

    www.conf 파일 수정

    user$ cd /etc/php-fpm.d/
    user$ sudo vi www.conf

    ; pool name ('www' here)
    [www]

    -> PHP Pool 이름을 지정하는 항목 입니다.
    -> 프로그램명이나 사이트 명이나, 업무가 있다면 업무명 등을 입력 하여도 됩니다.
    -> Pool 혹은 Container 의 식별, 이름 입니다 기본으로 www 지정되어 있습니디.
    -> Pool은 conf 파일 별로 여러개의 Pool을 만들 수 있습니다. 이때는 Pool 별로 이름을 지정하여 겹치지 않게 해야 합니다

     

    = 아래 내용과 같이 되어 있는지 확인 및 주석이 되어 있다면 주석을 해제 합니다.
    user = nginx
    group = nginx
    listen.acl_users = apache,nginx

     

    listen = /run/php-fpm/www.sock
    => 이부분은 접속을 받는 방식을 설정하는 부분으로 Socket(UDS) 방식으로 사용 하거나 IP 방식으로 사용하거나 둘 중 하나를 선택하여 설정해야 합니다.

     

    => IP 방식으로는 아래와 같이 지정 할 수 있습니다.
    listen = 123.123.123.123.123:9000
    listen = 127.0.0.1:9000
    listen = 9000 <== 이와 같이 IP 없이 포트만 기재하면 모든 주소에서 접속이 가능한 상태 입니다
    (listen on a TCP socket to all addresses)

     

    소켓 방식은 아래와 같이 파일명을 지정해주면 됩니다.
    listen = /run/php-fpm/www.sock

     

    같은 서버에서 apache 와 php-fpm 사용 하는 설정으로 할 것임으로 socket 을 지정하여 설정하도록 하겠습니다
    같은 서버내 라도 IP를 사용 할 수 있고 사용하여도 됩니다.

     

     

    프로세스 수 조정

    프로세스 수와 관련된 pm 으로 시작하는 파라미터

    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 5
    pm.min_spare_servers = 5
    pm.max_spare_servers = 40
    pm.max_requests = 500

    * 위의 설정값은 예시입니다.

     

    pm.max_children 는 설정된 PHP Pool(여기서는 www) 내에서 가동할 수 있는 최대 자식 프로세스 수를 의미 합니다

    pm.start_servers 는 php-fpm 을 실행할 때 초기에 생성하는 자식 프로세스의 개수입니다

    pm.min_spare_servers 는 idle 상태의 자식 프로세스 개수가 이 개수보다 작으면 자식 프로세스를 생성합니다

    pm.max_spare_servers 는 idle 상태의 자식 프로세스의 최대 개수를 의미 합니다.

     

    pm.max_requests 는 각 프로세스가 최대 request를 처리하면 수 입니다.

    500 으로 설정되어 있다면 500번 request 후 프로세스를 다시 생성 합니다
    프로세스가 점진적인 메모리 증가에 대한부분을 방지 할 수 있습니다.

    apache 에서 유사한 설정으로는 MaxRequestsPerChild 있습니다.

     

     

    [참고] PHP-FPM 메모리 사용현황 및 세션 계산

    아래 명령어를 이용하면 현재 fork된 php-fpm 프로세스 당 메모리 사용량을 확인 할 수 있습니다.

    user$ ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

    시스템에 가용한 메모리나 사용 할 정도에서 프로세스당 사용메모리를 나누어서 최대 자식프로세스 개수를 산정 해도 되겠습니다

    ex) PHP에 6GB 를 사용 하려고 함 , PHP-FPM이 현재 사용중인 메모리량이 대략 60MB 임
    6000MB / 60MB = 자식 프로세스 개수 100개 로 설정

    이와 같이 각 시스템 마다 메모리 상황을 고려하여 적절한 pm.max_children 값을 선정하여 설정하면 되겠습니다.

     

     

    로그 관련 설정 변경

    로그 관련된 파라미터의 주석 해제와 변경을 합니다.

     

    access.log = /var/log/php-fpm/$pool.access.log
    -> 주석 해제 및 경로 지정

    access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
    --> 주석제거

    slowlog = /var/log/php-fpm/$pool.slow.log
    --> 주석제거, 파일명 변경

    request_slowlog_timeout = 5
    --> 주석제거, 내용변경
    --> 단위는 초로 5는 예시 입니다. 해당 시간은 선택해서 변경 하시면 됩니다.

    catch_workers_output = yes
    -> 주석 제거
    -> main error log 파일에 worker 의 에러 로그가 같이 기록 되게 됩니다.

     

    php_admin_value[error_log] = /var/log/php-fpm/www-error.log
    php_admin_flag[log_errors] = on
    -> 주석 제거

     

     

    PHP Opcache 파라미터

     

    [참고] PHP 5.5 버전 부터 기본에 포함되었으며 이전에는 zend optimizer 를 별도로 설치 및 plugin 하여 사용 하였습니다.

    사용 용도는 컴파일 / 실행 / 결과 의 순으로 처리되는 PHP에 대해서 Opcache(예전의 Zend Optimizer)를
    이용하여 컴파일된 PHP 코드를 메모리에 Cache 해서 접속요청에 더 빠르게 응답을 줄수 있는 기능 입니다

    php7.x 버전부터 Opcache 의 기본 메모리가 128M 입니다.
    메모리를 변경하거나 다른 파라미터를 조정 하고자 한다면 10-opcache.ini 에서 설정할 수 있습니다.

    user$ cd /etc/php.d
    user$ sudo vi 10-opcache.ini

    10-opcache.ini 파일에는 opcache 의 활성화 내용부터 해서 기본적으로 사용 될수 있는 파라미터는 주석이 해제되어 활성화가 되어 있는 상태 입니다.

    opcache의 파라미터의 간략한 설명은 아래와 같습니다.

    opcache.enable=1 - Zend Opacache 활성화 여부 결정 , 1일때 활성화 됨
    opcache.enable_cli=1 - PHP CLI 버전에서(명령행 버전에서도) Zend Opcache 활성화 여부 결정
    opcache.memory_consumption - 캐쉬에 사용할 메모리 크기. 7.0부터 기본 크기는 128M
    opcache.interned_strings_buffer=8 - 메모리에서 interned 문자열을 위해 사용할 메모리량
    opcache.fast_shutdown=1 - 활성화 시 accelerated code 에 대해서 사용되어짐
    opcache.interned_strings_buffer - Opcache 가 사용하는 내부 스트링( class name 이나 file등)을 저장하기 위한 메모리의 크기.

    opcache.max_accelerated_files - Opcache 가 캐쉬할 최대 파일 갯수.

    opcache.validate_timestamps - Default 1 / 0(off)이 아닐 경우 opcache.revalidate_freq 에 설정된 시간마다 코드와 캐쉬의 변경 여부를 체크한다.

    validate_timestamps 가 꺼져 있을 경우 코드의 변경 여부를 체크하지 않으므로 PHP 소스가 수정되어도 반영되지 않는다.

    그러므로 변경 사항을 반영하려면 httpd 를 재기동하거나 httpd 에 SIGUSR2 시그널을 전송해야 한다.

    opcache.file_cache_only=1 - makes sure that the in-memory opcache is disabled and only files are used, which is what you want for CLI.
    1 로 설정할 경우 in-memory opcache 사용이 안됨 = php-fpm 에서 사용할수 없음

    그래서 메모리 관련하여 수정이 필요 할 경우 아래와 같이 용량을 늘려서 사용 할 수 있습니다.
    opcache.memory_consumption=256
    -> 입력의 예시 이며 단위는 MB 입니다
    -> 이부분(메모리 변경) 은 필수는 아닙니다.

     

     

    php-fpm 재시작

    user$ systemctl restart php-fpm

    * PHP-FPM 설치 후 자동으로 기동되어 있음

     

     

    프로세스 및 포트 오픈 확인

    user$ ps -ef| grep php
    root 62849 1 0 11:26 00:00:00 php-fpm: master process (/etc/php-fpm.conf)
    nginx 62850 62849 0 11:26 00:00:00 php-fpm: pool www
    nginx 62851 62849 0 11:26 00:00:00 php-fpm: pool www
    nginx 62852 62849 0 11:26 00:00:00 php-fpm: pool www
    nginx 62853 62849 0 11:26 00:00:00 php-fpm: pool www
    nginx 62854 62849 0 11:26 00:00:00 php-fpm: pool www

     

    listen을 Unix Socket 으로 사용 할 경우

    user$ ls -al /run/php-fpm
    srw-rw----+ 1 root root 0 11월 29 11:35 www.sock

     

    listen을 IP 으로 사용 할 경우

    user$ netstat -antp | grep 9000
    tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 6389/php-fpm: master

     

     

     

    5. Nginx 설정

     

    Nginx 설정 및 proxy pass 설정을 하도록 하겠습니다.

     

    Nginx 설정 홈 디렉토리는 /etc/nginx 입니다.

     

    nginx 최근버전에서는 /snippets /sites-enabled , /sites-available 같은 디렉토리 없이 conf.d 디렉토리만 존재 하고 nginx.conf 파일에서는 모든 conf 파일을 include 하여 사용하게 됩니다.

     

    user$ cd /etc/nginx

    user$ cat nginx.conf | grep conf
    include /etc/nginx/conf.d/*.conf
    => /etc/nginx/conf.d/ 아래에 .conf 파일은 자동으로 include 되어 적용 되게 됩니다.

     

    nginx.conf 수정

    user$ cd /etc/nginx
    user$ sudo vi nginx.conf

    user nginx;
    <== nginx 에서 사용할 OS로 유저로 nginx 로 사용하면 무난합니다.

    #master_process ON; # ON is default
    <== 엔진엑스는 하나의 메인 프로세스(마스터 프로세스)와 여러 개의 작업자 프로세스를 시작할 수 있습니다 (ON)
    ON 이 default 이고 off 로 해제하면 단인 프로세스로 동작하게 됩니다.
    해당 옵션은 기재가 되어있지는 않습니다 내용 참고를 위해 기재 한 것 입니다

     

    worker_processes 4;
    or
    worker_processes auto;

    접속을 받고 처리하는 worker process의 수 이며 정한 수만큼 기동시 프로세스가 생성됩니다.
    보통 CPU Core 나 CPU Count 와 상관되어 결정되며 설정 이후 CPU의 사용률이 높지 않다면 올려서 사용 할 수 있습니다.

    혹은 auto 로 nginx 알아서 생성되게 할 수도 있습니다.
    저는 일단 4로 설정하고 사용 하도록 하겠습니다.

     

    error_log /var/log/nginx/error.log notice;

    로그 파일명과 경로, 로깅 레벨을 설정 할 수 있습니다.
    로깅 레벨은 warn, error crit, alert, and emerg 설정 할 수 있습니다.

    기동 과 중지 시 로그를 받을 수 있도록 notice 를 기본으로 사용 하면 됩니다.
    문제 파악이나 설정시 테스트를 위해서는 debug를 사용하면 됩니다.

     

    events {
    use epoll;
    worker_connections 1024;
    }

    worker_connections 는 woker 당 가능한 접속수를 의미 합니다.
    위에서 worker 4로 지정 하였으면 4*1024 하여 4096 Connection이 가능하게 됩니다.

     

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;
    main 명칭의 로그 포팻으로 설정된 정보가 있고 설정된 main 포맷 Access 로그에서 사용 하고 있습니다
    log_format main 을 수정하여 사용하거나 별도의 log format을 생성 후 access 로그에서 변경하여 사용 할 수 있습니다

     

    log_not_found off;
    index index.php index.htm index.html;

    위의 2개 라인을 추가 해줍니다.

     

    ### deflate ### <== 내용 추가 합니다.
    gzip on;
    gzip_disable "msie6";
    gzip_comp_level 6;
    gzip_min_length 500;
    gzip_buffers 16 8k;
    gzip_proxied any;
    gzip_vary on;
    gzip_types text/plain text/css text/js text/xml text/javascript application/javascript application/x-javascript application/json application/xml application/rss+xml image/svg+xml image/png;

     

    [참고] gzip 설명

    gzip(deflate) 는 HTTP 압축으로 HTTP 데이터는 서버로부터 전송되기 전에 압축됩니다.
    nginx.conf 파일에 설정 하였기 때문에 모든 server block 에 공통으로 적용 되게 됩니다.

    gzip on;
    이 line을 통해 gzip을 사용할 것이라고 알려주는 것입니다.

    gzip_disable "msie6";
    IE 6이하에는 적용시키지 않습니다.

    gzip_comp_level
    압축의 정도를 설정하는 부분으로 높을수록 압축율이 높습니다
    그대신 서버에서의 CPU 사용률이 올라가거나 압축에 더 시간이 소요될 수 있어서 적절한 값을 사용하는 것이 좋습니다.

    gzip_types
    압축을 할 대상 Source 파일의 종류를 지정 하는 것입니다.

     

     

    그리고 gzip_types 아래 내용도 추가적으로 입력 합니다.

    keepalive_timeout 65;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    aio on;
    sendfile_max_chunk 512k;
    directio 4m;
    server_tokens off;
    client_max_body_size 50M;
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 16k;
    http2_max_concurrent_streams 512;

     

     

    default.conf 파일 수정

    이제 각 서버 설정 파일을 수정 하도록 하겠습니다
    [참고] -> , => , ==> 는 모두 설명 입니다

     

    user$ cd /etc/nginx/conf.d
    user$ sudo cp -rp default.conf default.conf.ori
    => 먼저 default 값으로 설정된 파일은 백업 후 설정을 변경 하여 사용하겠습니다.

     

    user$ sudo vi default.conf

    server {
    listen 80 default_server;
    ==> 사용할 포트 번호입니다.
    default_server는 server 절이 여러개 있을 때 IP로 접속 하거나 없는 서브도메인 등으로 접속시 default 로 접속을 하게 되는 sever 절을 의미 합니다.
    server { } 중에서 한곳만 사용 할 수 있습니다

     

    server_name localhost;
    ==> IP나 /etc/hosts에 설정된 호스트네임 , 도메인이 있다면 도메인명을 기재해 줍니다.
    도메인이 없다면 localhost 로 지정하시면 됩니다.

    charset utf-8;
    ==> character set 설정입니다.

     

    access_log /var/log/nginx/localhost.access.log main;
    error_log /var/log/nginx/localhost.error.log;
    ==> Access , Error 로그는 기본적으로는 주석처리 되어 있습니다.
    주석을 해제하고 서버명이나 도메인명 등을 추가하여 로그를 확인 할 때 파일명으로 쉽게 찾을수 있도록 명시적으로 지정하는 것이 좋습니다.

    root /usr/share/nginx/html;
    ==> html이나 php 파일을 읽을 디렉토리를 지정합니다.

     

    ## location / 절을 아래와 같이 수정 합니다
    location / {
    try_files $uri $uri/ =404;
    }

    ## PHP Proxy_Pass 설정
    location ~ \.php$ {
    fastcgi_pass php-fpm;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    proxy_redirect off;
    fastcgi_intercept_errors on;
    fastcgi_read_timeout 20;
    fastcgi_send_timeout 20;
    proxy_send_timeout 20;
    proxy_read_timeout 20;
    proxy_connect_timeout 20;
    }

    ## location 주석해제
    location ~ /\.ht {
    deny all;
    }

     

     

    [참고] upstream php-fpm 의 내용은 별도의 파일에 기록되어 있습니다.

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

    # PHP-FPM FastCGI server
    # network or unix domain socket configuration

    upstream php-fpm {
    server unix:/run/php-fpm/www.sock;
    }

     

     

    6.Nginx 재시작 및 PHP 테스트

     

    먼저 OS 방화벽을 오픈 해줘야 합니다.

     

    # 80 포트 추가
    user$ firewall-cmd --permanent --add-port=80/tcp

    # 80 포트 삭제(참고)
    user$ firewall-cmd --permanent --remove-port=80/tcp

    # 정책 재반영 및 방화벽 정책 확인
    user$ firewall-cmd --reload;firewall-cmd --list-all

     

     

    그다음 /var/www/html 에 아래 내용으로 phpinfo.php 파일을 생성 합니다

    user$ cd /var/www/html
    user$ sudo vi phpinfo.php

    <?php
    phpinfo();
    ?>

     

     

    # Nginx 재시작

    user$ sudo systemctl restart nginx

     

    브라우저에서 phpinfo.php 파일이 잘 로드 되는지 확인 해 봅니다.

     

     

     

    원문 출처

    Fedora 33 Nginx PHP MySQL - LEMP 구성

     

     

    오픈소스를 응원합니다 Blog https://hoing.io
    Senior Database Administrator(Mysql, Oracle)

    사이트 이용 문의 사항은 댓글이나 admin@fedoralinux.or.kr 로 메일주세요

  • 답변은 로그인 후 가능합니다.