Nginx + PHP 최신 버전 연동

2019. 6. 21. 10:05· 개발/Backend

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

 

  1. Nginx 설치.
    그냥 평범하게 설치하면 된다.
  2. yum install nginx --downloadonly --downloaddir=./ rpm -ivh {rpm 경로}
  3. PHP 7.3 저장소를 준비한다.
    7.3 저장소 글 참고.
  4. rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-6.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
  5. PHP 7.3 저장소 활성화
  6. yum install yum-utils yum-config-manager --enable remi-php73
  7. PHP 설치
    Nginx + PHP 7.1 연동글에서 71을 73으로 바꿔서 실행한다.
    yum --enablerepo=remi,remi-php73 install php-fpm php-common --downloadonly --downloaddir=./
    rpm -ivh {rpm 경로}
    PHP 확장 프로그램은 알아서 받아서 설치하면 된다.
    yum --enablerepo=remi,remi-php73 옵션이면 어지간한건 다 될듯.
  8. 설치 시 의존성 문제 때문에 순서를 잘 맞춰줘야 한다.
    다운로드 시 다운로드 받는 순서를 기본으로 잡고, 의존성 문제 생기면 의존성 RPM을 먼저 설치하는 식으로 순서를 잡으면 된다.
  9. PHP 기본 모듈 모듈 RPM 다운로드
  10. Nginx 설정 파일 변경DocumentRoot가 위와 같이 설정되어 있는데, 이걸 location 블럭 없이 설정해주면 된다.Nginx default.conf 파일을 보면 fastcgi가 9000번 포트로 연동되게 되어 있는데,
    하나의 장비에서 Nginx와 PHP-FPM이 운영된다면 유닉스 소켓 방식이 더 유리하다고 한다.
    따라서 location ~ .php$ 블럭의 내용을 아래와 같이 변경한다.
  11. 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;
  12. root /home/docstory; index index.php index.html index.htm; <-- index.php 추가
  13. /etc/nginx/conf.d/default.conf location / { root /usr/share/nginx/html; index index.html index.htm; }
  14. PHP-FPM 설정
    PHP가 기본 확장 프로그램으로 동작하는 아파치와 다르게 Nginx는 바로 PHP를 실행할 수 없기 때문에 PHP-FPM을 사용하여 처리를 넘겨야 한다.
    PHP-FPM를 설정하기 위해서 다음 파일을 편집한다.해당 부분을 한번에 변경해주는 명령어.
  15. 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
  16. /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로 수정
  17. 연동시 PHP파일만 404 오류
    일반 html 파일은 잘 작동하는데 PHP 파일만 404 오류가 나는 경우가 있다.
    다음과 같은 오류 로그가 기록되는 경우 아래의 방법으로 해결 가능하다.혹은/var/run/php-fpm/php-fpm.sock 파일이 없어 소켓 통신이 불가능한 문제다.명령을 통해 PHP-FPM을 재시작해주면 해결된다.
  18. systemctl restart php-fpm
  19. connection refused
  20. 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:"
  21. DocumentRoot혹은 log 폴더를 바꿀 경우 403 오류 발생.
    참고 링크 - https://itzone.tistory.com/646명령을 통해 Nginx가 실행되는 사용자 계정이 무엇인지 확인한다.
     namei -om {DocumentRoot}
    이 명령을 통해 모든 경로에 x 권한이 있는지, 권한은 위에서 확인한 권한이 맞는지 확인.
    (근데 그냥 root 권한이여도 문제는 없더라)
     setenforce 0
    명령을 통해 SELinux를 끄고 테스트를 해보면 되는 경우가 많다.
     ls -Z {DocumentRoot}
    명령으로 해당 폴더에 걸린 SELinux 보안 상태 확인.아래 명령으로 권한을 넣을 수 있다.
  22. chcon -Rt httpd_sys_rw_content_t {DocumentRoot}
  23. httpd_sys_content_t 가 있으면 read 가능
    httpd_sys_rw_content_t 가 있으면 read & write 가능
  24. 아래 방법으로 SELinux에 예외처리를 해주면 된다.
  25. 필수적으로 확인해봐야 할 사항은 SELinux다.
  26. 실제 경로가 있는지 확인하고, 권한 문제를 의심해봐야 한다.
  27. cat /etc/nginx/nginx.conf | grep user
저작자표시 비영리 변경금지

'개발 > 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
'개발/Backend' 카테고리의 다른 글
  • [Spring Boot] html 템플릿 메일 보내기 - Thymeleaf
  • Access-Control-Allow-Origin을 넣어도 POST에서 CORS 에러가 발생할때
  • Apache start, stop 시 별도 스크립트 실행
  • Apache SSL 적용
HuiYa
HuiYa
8년차 Backend / Frontend 개발자의 기술 블로그
by HuiYa8년차 Backend / Frontend 개발자의 기술 블로그
HuiYa
by HuiYa
HuiYa
전체
오늘
어제
  • 분류 전체보기 (24)
    • 공지 (0)
    • 일상 (0)
    • 개발 (19)
      • Network (1)
      • Backend (9)
      • Frontend (3)
      • Electron (2)
      • 기타 (4)
    • 프로젝트 (1)
      • Penly (1)
    • IT 기기 (3)
      • 리디 페이퍼 (1)
    • 취미 (0)

인기 글

최근 글

최근 댓글

태그

  • electron
  • spring
  • 스크롤다크모드
  • natural sort order
  • 빌드
  • build
  • 엔진엑스
  • html
  • javascript
  • jjwt
  • 시놀로지
  • electron-builder
  • 인증처리
  • CVE-2021-44228
  • ds920
  • js
  • DS920+
  • SpringBoot
  • 일렉트론
  • 최소매치
  • 0.12.3
  • apache
  • nginx
  • 아파치
  • 최소일치
  • 피니아
  • synology
  • 메일
  • 핸드폰불
  • pinia
hELLO · Designed By 정상우.v4.2.2
HuiYa
Nginx + PHP 최신 버전 연동
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.