2019-04-18 14:54 최초 작성
차기버전 개발 시작에 앞서 새로운 설치 패키지를 만들며 PHP 버전을 7.3.4로 올렸다. (기존 7.2.6)
인터넷에 떠도는 글은 많지만 대부분 7.0 혹은 7.2를 대상으로 한 글이기 때문에 7.3에는 사용할 수 없었다.
혹은 아파치 기반이라 PHP를 설치하려고 하면 의존성으로 httpd가 묶여있어 사용할 수가 없었다.
그러던 중 아래와 같은 글을 찾아서 설치 과정을 기록한다.
Nginx + PHP 7.1 연동 - https://cjwoov.tistory.com/7
PHP 7.3 Repository - https://blog.remirepo.net/post/2018/12/10/Install-PHP-7.3-on-CentOS-RHEL-or-Fedora
-
Nginx 설치.
그냥 평범하게 설치하면 된다.yum install nginx --downloadonly --downloaddir=./ rpm -ivh {rpm 경로}
-
PHP 7.3 저장소를 준비한다.
7.3 저장소 글 참고.rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-6.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
-
PHP 7.3 저장소 활성화
yum install yum-utils yum-config-manager --enable remi-php73
-
PHP 설치
Nginx + PHP 7.1 연동글에서 71을 73으로 바꿔서 실행한다.PHP 기본 모듈 모듈 RPM 다운로드
yum --enablerepo=remi,remi-php73 install php-fpm php-common --downloadonly --downloaddir=./ rpm -ivh {rpm 경로}
PHP 확장 프로그램은 알아서 받아서 설치하면 된다.
yum --enablerepo=remi,remi-php73
옵션이면 어지간한건 다 될듯.설치 시 의존성 문제 때문에 순서를 잘 맞춰줘야 한다.
다운로드 시 다운로드 받는 순서를 기본으로 잡고, 의존성 문제 생기면 의존성 RPM을 먼저 설치하는 식으로 순서를 잡으면 된다. -
Nginx 설정 파일 변경
/etc/nginx/conf.d/default.conf location / { root /usr/share/nginx/html; index index.html index.htm; }
DocumentRoot가 위와 같이 설정되어 있는데, 이걸 location 블럭 없이 설정해주면 된다.
root /home/docstory; index index.php index.html index.htm; <-- index.php 추가
Nginx default.conf 파일을 보면 fastcgi가 9000번 포트로 연동되게 되어 있는데,
하나의 장비에서 Nginx와 PHP-FPM이 운영된다면 유닉스 소켓 방식이 더 유리하다고 한다.
따라서location ~ .php$
블럭의 내용을 아래와 같이 변경한다.try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params;
-
PHP-FPM 설정
PHP가 기본 확장 프로그램으로 동작하는 아파치와 다르게 Nginx는 바로 PHP를 실행할 수 없기 때문에 PHP-FPM을 사용하여 처리를 넘겨야 한다.
PHP-FPM를 설정하기 위해서 다음 파일을 편집한다./etc/php-fpm.d/www.conf user = apache를 user = nginx로 수정 group = apache를 group = nginx로 수정 ;listen.owner = nobody를 listen.owner = nginx로 수정 ;listen.group = nobody를 listen.group = nginx로 수정 listen = 127.0.0.1:9000 를 listen = /var/run/php-fpm/php-fpm.sock로 수정
해당 부분을 한번에 변경해주는 명령어.
sed -i 's/user = apache */user = nginx/' /etc/php-fpm.d/www.conf sed -i 's/group = apache */group = nginx/' /etc/php-fpm.d/www.conf sed -i 's/;listen.owner = nobody */listen.owner = nginx/' /etc/php-fpm.d/www.conf sed -i 's/;listen.group = nobody */listen.group = nginx/' /etc/php-fpm.d/www.conf sed -i 's/listen = 127.0.0.1:9000 */listen = \/var\/run\/php-fpm\/php-fpm.sock/' /etc/php-fpm.d/www.conf
-
연동시 PHP파일만 404 오류
일반 html 파일은 잘 작동하는데 PHP 파일만 404 오류가 나는 경우가 있다.
다음과 같은 오류 로그가 기록되는 경우 아래의 방법으로 해결 가능하다.connect() to unix:/var/run/php-fpm/php-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 172.17.110.225, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:"
혹은
connection refused
/var/run/php-fpm/php-fpm.sock
파일이 없어 소켓 통신이 불가능한 문제다.systemctl restart php-fpm
명령을 통해 PHP-FPM을 재시작해주면 해결된다.
-
DocumentRoot혹은 log 폴더를 바꿀 경우 403 오류 발생.
참고 링크 - https://itzone.tistory.com/646cat /etc/nginx/nginx.conf | grep user
명령을 통해 Nginx가 실행되는 사용자 계정이 무엇인지 확인한다.
실제 경로가 있는지 확인하고, 권한 문제를 의심해봐야 한다.
namei -om {DocumentRoot}
이 명령을 통해 모든 경로에 x 권한이 있는지, 권한은 위에서 확인한 권한이 맞는지 확인.
(근데 그냥 root 권한이여도 문제는 없더라)필수적으로 확인해봐야 할 사항은 SELinux다.
setenforce 0
명령을 통해 SELinux를 끄고 테스트를 해보면 되는 경우가 많다.
아래 방법으로 SELinux에 예외처리를 해주면 된다.
ls -Z {DocumentRoot}
명령으로 해당 폴더에 걸린 SELinux 보안 상태 확인.
httpd_sys_content_t
가 있으면 read 가능httpd_sys_rw_content_t
가 있으면 read & write 가능아래 명령으로 권한을 넣을 수 있다.
chcon -Rt httpd_sys_rw_content_t {DocumentRoot}
'개발 > Backend' 카테고리의 다른 글
[Spring Boot] 작업 비동기로 실행하기 (2) | 2021.07.13 |
---|---|
[Spring Boot] html 템플릿 메일 보내기 - Thymeleaf (0) | 2021.07.13 |
Access-Control-Allow-Origin을 넣어도 POST에서 CORS 에러가 발생할때 (0) | 2020.07.09 |
Apache start, stop 시 별도 스크립트 실행 (0) | 2019.06.21 |
Apache SSL 적용 (0) | 2019.06.21 |