Linux (WSL)에서 특정 버전의 PHP를 설치하고
Nginx를 사용해서 서버 구성하기
단계는 다음과 같다.
1. 특정 버전의 php를 설치하기 위한 준비
2. php 설치 (7.4 기준으로 설명)
- php와 관련 설치도 포함 (+ php-fpm, php-cli ...)
3. nginx 설치 & 실행
- apache로 인해 실행이 안되면 '5. nginx 실행' 으로 진행
4. apache 제거
- php를 설치하니 apache가 따라온다.
- 나는 원하지 않으니 apache를 제거하고 nginx를 사용
5. nginx 실행
- 3에서 apache의 80 포트 사용으로 실패시 다시 실행
* FastCGI server 설정 활성화
PHP 설치 준비
1. php 설치 준비
sudo apt update
2. PPAs(Personal Package Archives) 관리를 위한 패키지 설치
sudo apt install software-properties-common -y
3. 여러 버전의 PHP를 포함하는 PPA repository 추가
sudo add-apt-repository ppa:ondrej/php
4. 패키지 리스트 다시 업데이트
sudo apt update
PHP 설치
1. PHP 7.4 설치
sudo apt install php7.4 -y
2. PHP 추가 모듈 설치
sudo apt install php7.4-fpm php7.4-cli php7.4-common php7.4-mbstring php7.4-xml php7.4-mysql php7.4-zip php7.4-gd php7.4-curl -y
(3. PHP 버전 확인: php -v)
Nginx 설치 & 실행
1. 설치
sudo apt install nginx -y
2. 사용 가능하도록 설정
sudo systemctl enable nginx
3. nginx 실행
sudo systemctl start nginx
위와 같이 실행해서 오류가 날수 있다.
PHP 설치로 apache가 실행되어 있고, apache의 포트가 80번 포트를 사용하고 있기 때문이다.
이제 apache를 사용하지 않을 것이니 삭제하자
Apache 제거
Apache 프로세스 중단 및 제거
sudo systemctl stop apache2
sudo systemctl disable apache2
sudo apt remove apache2 -y
sudo apt purge apache2 -y
sudo apt autoremove -y
5. nginx 재실행
sudo systemctl restart nginx
브라우저에서 localhost로 접속하여 확인
(Apache 제거 전에는 Apache관련 웹페이지를 볼수 있는데, Nginx 연결 후에는 Welcome to nginx!를 볼 수 있다.)
* PHP 성능을 올리기 위해 FastCGI 설정을 활성화하자.
Nginx 설정 파일을 열자
nging.conf에 별도로 설정하기 전에는 /etc/nginx/sites-available/default 를 수정하면 된다.
sudo nano /etc/nginx/sites-available/default
# pass PHP scripts to FastCGI server 로 주석이 되어 있는 부분 아래에 다음과 같은 설정이 모두 주석처리 되어있다.
php-fpm을 사용할 것이므로 fastcgi_pass unix:/run/php/php7.4-fpm.sock; 부분의 주석을 풀어주자
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;
}
그리고 nginx를 reload 하자 (restart도 가능)
sudo systemctl reload nginx
* Nginx의 기본 index.html이 아닌, 특정 repository를 다운받아서 설정을 바꿔준 경우에,
아래와 같은 에러를 만나게 될 수 있다.
2024/12/05 11:17:45 [crit] 32776#32776: *7 stat() "/home/taltal/git/15sir/" failed (13: Permission denied), client: ::1, server: _, request: "GET / HTTP/1.1", host: "localhost"
위와 같은 permission 오류의 경우 ChatGPT는
1. chmod를 통해 실행 권한을 부여하고
2. chown을 통해 nginx를 실행하는 user, group으로 디렉토리의 소유권을 변경하라고 한다.
일반적으로 1만 하면 되는 경우가 대부분인 것 같은데, 2의 방법을 함께 기재는 해두겠다.
1. chmod 755로 (x) 실행 권한 주기
실행하려는 project가 다음과 같은 경로에 있다고 하자.
/home/taltal/git/15sir
Nginx가 15sir까지 접근하기 위해서는 x의 실행권한이 있어야 되는데, 15sir에만 필요한게 아니라
/home, /home/taltal, /home/taltal/git, /home/taltal/git/15sir에 모두 x 권한이 있어야 한다.
ls -ld /home, ls -ld /home/taltal ... 등과 같이 확인하여 x권한이 있는지 확인하고 없으면 부여하자.
2. chown 을 통해 www-data 지정 (참고)
nginx는 기본적으로 www-data 라는 nginx를 실행하는데,
www-data는 해당 프로젝트에 소유권이 없어서 permission denied 오류가 발생한다.
아래 명령어를 통해 프로젝트 디렉토리의 권한을 확인해보자
ls -ld /home/taltal/git/15sir
보다시피 www-data로 되어있지 않다.
(실행 권한의 경우는 rwx r-x r-x가 되어있으므로 755 권한이 부여되어 있는데, 위와 같이 되어 있지 않은 경우
sudo chmod 755 /home/taltal/git/15sir 을 통해서 권한을 부여하자.)
nginx에서 www-data라는 user를 기본적으로 사용하고 있는 것은 nginx.conf에서 확인 가능하다.
sudo nano /etc/nginx/nginx.conf
스크립트 최상단에 아래와 같이 기재되어 있음을 확인할 수 있다.
user www-data;
Ubuntu에서 Nginx는 www-data를 기본적인 user, group으로 실행된다.
Nginx를 실행하는 user가 어떻게 되고 있는지 확인해보자.
ps aux | grep nginx
www-data가 Nginx를 실행하고 있음을 확인 가능
프로젝트의 user, group을 www-data로 변경
sudo chown -R www-data:www-data /home/taltal/git/15sir/
'PHP' 카테고리의 다른 글
PHP: log monitoring # access.log # error.log # php-fpm.log (1) | 2024.12.06 |
---|---|
PHP / 그누보드5: 설치 in Mac # composer # api (1) | 2024.11.09 |
Web: Session # 세션 공유 # PHP, Nginx 예제 (0) | 2024.07.09 |
PHP: 세션 id를 검증 - Nginx를 활용하여 접근 허용/비허용 하는 예제 (0) | 2024.07.05 |
PHP: php 설치, php-fpm 설치, nginx 연결 (0) | 2024.07.04 |