윈도우에 wsl(ubuntu)를 설치하고 그 위에서 php를 쓰기 위해서 nginx위에 php-fpm을 얹어서 쓰게 됐다. nginx와 php-fpm을 연동하는 과정에서 겪은 어려움 및 내용을 정리했다.
명령어들이 Permission denied나 Operation not permitted 에러로 동작하지 않을 때는 sudo 권한으로 실행하면 된다. 관리자가 아니라면 유감...
apt
를 통해 다운apt update && apt -y upgrade && \
apt -yq install \
nginx \
vim \
php7.2-fpm
mariadb-server \
php-mysql
export DEBIAN_FRONTEND=nointeractive
apt
에서-q
: --quiet
. 로깅에 적합한 출력을 생성하고 진행률 표시기를 생략한다.-y
: --yes
. 모든 질문을 표시하지 않고 yes
로 답한다.rm /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
vi /etc/nginx/conf.d/default.conf
ln -s /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/
# default.conf
server {
server_name _;
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.nginx-debian.html index.php;
location / {
autoindex on;
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
.php
파일 자체를 다운로드 시키거나 502 Bad Gateway nginx
와 같은 에러를 냈다.webserv
프로젝트를 하면서 웹서버의 동작 과정과 cgi와 어떻게 동작하는지 알게 돼서 문제를 추적하여 해결 할 수 있었다..php
파일을 그대로 주는 경우는 cgi 프로그램 즉, php-fpm
을 서버에서 못 찾아서 생기는 문제이다. 그러므로 fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
으로 위치를 특정시켜줘서 해결하면 된다.502 Bad Gateway
는 cgi는 찾았으나 cgi 프로그램 또는 그 설정이 문제가 있어서 발생하는 오류이다. 그러므로 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
을 작성해서 해결하면 된다. 위 설정을 쓰기 전에는 cgi의 변수들을 지정해주는 include fastcgi_params;
를 꼭 작성해 줘야 한다.nginx.conf
의 설정값에 맞게 root 폴더의 owner와 권한 변경chown -R www-data /var/www/*
chmod 755 /var/www/*
service mysql start
service php7.2-fpm start
service nginx start
root 폴더에 index.php
를 추가하고, /etc/nginx/conf.d/default.conf
의 index에 index.php
를 추가해서 잘 동작하는지 테스트해보자.
/* /var/www/html/index.php */
<?php phpinfo(); >? /* php의 정보를 보여주는 페이지를 만드는 함수 호출 */
# /etc/nginx/conf.d/default.conf
server {
...
index index.php;
...
}
service nginx reload
굿