mac의 nginx에 php 연동하기

Dave Lee·2021년 4월 26일
2

everyHelloWorld

목록 보기
3/5
post-thumbnail

이제 nginx를 통해 static한 페이지를 서비스 할 수 있게 되었다.
(방법은 지난 글 두개 mac에 nginx 설치하기mac에 homebrew 설치하기 를 참고하자.)

php 간단 개념

php는 프로그래밍 언어의 일종으로 동적 웹페이지를 만들기 위해 나왔다. 접속하는 사람이나 시점에 따라 다른 내용을 만든다는 뜻이다. 작동방식은 이렇다. 웹서버가 우선 사용자의 요청을 받으면 FastCGI라는 프로토콜이 이를 php에 전달해준다. php는 페이지-혹은 페이지의 일부 데이터-를 생성하고 돌려주면 웹서버는 이를 사용자에게 보여준다. php는 FastCGI의 구현체인 php-fpm을 사용한다. (FastCGI는 프로토콜, 즉 하나의 규약일 뿐이다.)

from O'REILLY

설치

php는 mac에 기본적으로 설치가 되어 있다. 터미널에서 php -v 명령어로 확인해보자. big sur기준으로는 다음과 같이 나온다.

helloworld@helloworldmac ~ % php -v     
WARNING: PHP is not recommended
PHP is included in macOS for compatibility with legacy software.
Future versions of macOS will not include PHP.
PHP 7.3.24-(to be removed in future macOS) (cli) (built: Dec 21 2020 21:33:25) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.24, Copyright (c) 1998-2018 Zend Technologies

우리는 brew를 통해 7.4버전의 php를 설치해 볼 예정이다. 터미널에서 brew install php@7.4 를 입력해보자.

helloworld@helloworldmac ~ % brew install php@7.4
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
:
엄청난 스크롤
:
To have launchd start php@7.4 now and restart at login:
  brew services start php@7.4
Or, if you don't want/need a background service you can just run:
  php-fpm
helloworld@helloworldmac ~ % 

설치 확인은 처음 버전 확인과 같지 않다. 처음 버전 확인은 mac에 기본 설치된 버전을 확인하는 것인데 다시해봐도 아마 동일할 것이다. brew를 통해 설치할 때는 @7.4로 버전을 명시했으므로 이것이 잘 설치되었는지 확인해보면 된다.

helloworld@helloworldmac ~ % brew search php
==> Formulae
brew-php-switcher   php@7.2             phplint             phpunit
php                 php@7.3             phpmd
php-code-sniffer    php@7.4 ✔           phpmyadmin
php-cs-fixer        phpbrew             phpstan
==> Casks
homebrew/cask/eclipse-php                homebrew/cask/netbeans-php
helloworld@helloworldmac ~ % 

위와 같이 brew로 설치할 수 있는 가능한 항목들이 나오고, 이 중 @7.4에는 체크가 되어있음을 볼 수 있다.

nginx와 연결하기

nginx에서 php파일이 들어오면 fastcgi에게 부탁하게 해보자. 이는 nginx.conf를 수정해서 할 수 있다.

nano /usr/local/etc/nginx/nginx.conf

이미 주석처리 되어 있는 부분 중에 우리가 원하는 부분이 있다. location ~ \.php$ 로 시작하는 부분을 찾아보자.

약간 설명을 하자면,

  • .php로 끝나는 파일은
  • localhost(127.0.0.1)의 9000번 포트로 내용을 해석해달라고 보낸다.
  • 스크립트 파일명은 /scripts 폴더 내의 동일한 이름에게 그대로 요청하고,
  • 나머지 설정은 fastcgi_params를 참고한다.

이렇게 그대로 하면 아마 잘 안될 것이다. 테스트해보자. 주석만 제거하고 ctrl+x로 저장&나가기를 한 후 다음을 실행하자.

brew services restart nginx   
brew services restart php@7.4

그리고 테스트 파일도 만들어보자.

cd ~/Documents/hello_docroot 
nano index.php

아래와 같이 두줄만 작성하고 저장해보자.

그리고 브라우저에서 테스트

이것은 fastcgi가 보기에는 위치를 찾을 수 없어서 일어난 일이다. 다시 nginx.conf를 열어서 다음과 같이 수정하자.

location ~ \.php$ {
    root   /Users/helloworld/Documents/hello_docroot;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

root를 지난 글에서 정한 nginx의 root와 동일하게 맞추고, SCRIPT_FILENAME 부분을 / 없이 $document_root$fastcgi_script_name를 붙여쓴다.

테스트

저장하고 nginx만 재실행하면 다음과 같은 경고가 나온다. 지난 글과 동일한 팝업이지만 이번에는 php가 접근해도 되겠냐고 물어보는 것이다.

확인을 누르면 다음과 같은 설치된 php 정보 화면이 나온다.

profile
developer

0개의 댓글