[PHP] PHP5.x -> 7.0 으로 빠르게 버전 올리기

이 포스트는 AWS EC2 환경에서 nginx + php-fpm 을 사용하는 환경을 기준으로 작성되었습니다.

서버에 laravel을 설치해볼겸 기존 PHP5.6을 PHP7로 버전을 올려보려한다.

(이 블로그와 각종 개발용 사이트들 그리고 크롤러가 돌고 있는 서버에서..)

먼저 PHP7로 올렸을때 기존에 도는 웹사이트들이 영향이 가는지를 확인. 문제 없는 것으로 보인다. 그렇다면 시작!

 

+ 현재 설치되어있는 php 관련 패키지를 확인하고 php-fpm 설정을 백업한다.

설치 된 패키지 확인

php-fpm 설정 파일은 /etc/php-fpm.d/www.conf 파일이다. 잘 백업해두자.

 

+ php5.x 관련 패키지와 httpd 패키지 삭제

여기서 nginx를 쓰는데 httpd 패키지는 왜 지워? 라고 생각할 것이다. 구버전 httpd 패키지가 남아있다면 php7 패키지 설치가 되지 않는다. 나도 있는줄 몰랐는데 발견해서 삭제.

 

+ php7과 관련 모듈 설치

그 외 기존 설치되어있던 패키지를 확인하여 추가 설치한다. 엔터 쳐가면서 타이핑하기 귀찮다면 && 으로 연결해서 한번에 설치하자.

설치 후 service php-fpm restart와 service nginx reload를 하면 이상하게 에러 없이 재시작이 된다.

하지만 돌아가던 사이트는 500 bed gateway 에러를 보여줄 것이다.

당황하지 말고 nginx 에러 로그를 확인하면 php-fpm.sock 파일을 찾을 수 없단다.
그렇다. php-fpm 이 설치된 후 설정이 초기화 된 것이다.

설정 파일은 /etc/php-fpm-7.0.d/www.conf 에 존재한다. 백업해둔 기존 설정 파일을 참조하여 수정한다.

백업을 하지 않은 경우 저 에러를 해결하기 위해서는 www.conf 파일 내용 중 listen = 127.0.0.1:9000 을 listen = ‘/var/run/php-fpm.sock’ (기존 sock 파일 경로) 으로 변경해준다.
그리고 추가로 몇가지 수정해줄 것이 있다.

user = apache -> user = nginx
group = apache -> group = nginx
listen.acl_users = apache,nginx -> listen_acl_users = nginx (이건 그냥 두어도 무관하다.)

 

변경된 설정을 저장하고 service php-fpm restart와 service nginx reload 명령을 실행한다.

이제 사이트가 잘 나온다. 기존 php5.x 버전보다 속도도 빠르다!

 

정리하자면 PHP버전을 올리는데에는 기존 nginx 설정은 손댈 것이 없다.

패키지 삭제와 설치 후에 php-fpm의 소켓파일 경로만 잡아주고 재시작하기만 하면 된다.

 

간단해서 다행이다.

[nginx] 업로드 용량 초과 에러 client intended to send too large body

“client intended to send too large body”

블로그에 이미지 업로드를 하는데 업로드가 되지 않고 에러 로그를 찾아보니 위 내용이 보였다.

이미지 용량을 줄이지 않고 서버에서 업로드 용량을 늘려보기로 했다.

/etc/nginx/conf.d/my_site.conf

설정 파일을 열고 server {} 블럭안에 한 줄만 추가 해주면 된다.

난 저렇게 20메가로 설정 했다.

저장하고 빠져나온 후 아래 명령으로 리로드.

다시 업로드 해보니 자~알 된다.

[Nginx] AWS EC2에 Nginx 설치하는 방법 간단 정리

아마존 웹 서비스(AWS)에서 nginx와 mysql, 그리고 php를 구동하기 위한 php-fpm 설치 방법을 소개합니다.

yum update

Nginx + PHP FPM 설치

PHP 확장 모듈 설치

PHP APC 설치

문제 : 위 PHP APC를 설치하면 php-fpm 프로세스의 iowait (입출력 대기 부하)가 50~99% 발생하는 문제가 있습니다. 이 과정에서 PHP APC 설치는 권장하지 않습니다. 자료를 찾아보는 중에는 memcached도 비슷한 문제가 있다고 합니다.

Mcrypt 설치 (Codeigniter framework 사용 시 필요)

MySQL 설치

Nginx 기본 설정 파일 작성

default.conf 기본 내용

php-fpm 설정

www.conf 설정 (각 항목을 찾아 아래 내용과 같이 수정)

EC2 인스턴스 재 시작 시 nginx + mysql + php fpm 자동 실행 되도록 설정

Nginx + MySQL + php-fpm 서비스 시작
(MySQL은 최초 시작시 root 계정 설정과 패스워드 설정에 대한 멘트가 나오니 참고하셔서 설정해줍니다.)

웹페이지 확인
Welcome to nginx on the Amazon Linux AMI! 화면 출력되면 nginx 설치는 정상

 

세팅 과정은 여기까지 입니다. 아래부터는 세팅하는 과정에서 발생한 문제나 이슈에 대해서 정리한 내용이니 참고하세요.

 

– 추가 정보 –
1. nginx reload (Nginx는 서비스를 재시작하지 않고 reload로 무중단 재시작이 가능, 단 모듈이나 설정이 변경된 경우에는 restart 필요)

2. Nginx의 Error / Access log 기본 경로
error log : /var/log/nginx/error.log
access log : /var/log/nginx/access.log

3. 서버 타임존 설정

현재 타임존은 $ date 명령으로 확인 가능

4. FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream,.. 에러 발생 문제

이 에러는 여러 원인이 있겠지만 저의 경우
/etc/nginx/conf.d/default.conf (호스트 설정 파일)의 location / 블럭에서 index.php가 빠져있어서 에러가 발생.

5. CodeIgnighter 사용 시 mod rewrite 설정 (호스트 설정 파일 location / 블럭 안에 추가)

6. EC2 인스턴스에서는 CORS(Cross-Origin Resource Sharing) 설정 불가.  이를 해결하려면 S3를 사용하거나 외부 CDN 서비스를 사용해야함.

[Nginx] connect() to unix /var/run/php-fpm/php-fpm.sock failed 에러 해결 방법

이 블로그에서 발생했던 문제로 최근 서버를 Apache에서 Nginx로 변경하면서 생긴 문제였습니다.

정확히는 Nginx에서 발생했다기보다는 Nginx에서 PHP를 실행시키기 위한 php-fpm 에서 발생하는 에러로 Nginx 에러 로그에 남겨집니다.

제목에 나와있는 에러는 여러 원인에서 발생합니다. 그 중 여기에서 다룰 에러는 connect() to unix /var/run/php-fpm/php-fpm.sock failed  (11 resource temporarily unavailable) 입니다.

위 에러도 여러가지 원인이 있겠지만 제 경우에는 php-fpm.sock이 사용하는 port를 허용하지 않아 발생하는 문제였고 9000번 Inbound 포트를 개방해줌으로써 해결했습니다.

일반적으로는 iptables에서 9000번 포트를 열어주면 되고 아마존 웹서비스(AWS)의 EC2를 사용 중이라면 해당 인스턴스의 Security Group 정책에서 9000번 Inbound 포트를 전체 대역(0.0.0.0)으로 개방해주시면 됩니다.

 

[nginx] 서버 포트 설정하기

nginx의 기본 사용포트도 아시다시피 80포트를 사용합니다. 기존에 apache를 사용하는 경우 nginx와 사용 포트가 겹쳐 실행이 되지 않습니다. 때문에 nginx나 apache의 사용 포트를 변경해야 합니다.
이번 내용에서는 nginx의 포트를 변경하는 내용을 소개합니다.

이 내용은 centos 6.x 기준, nginx는 패키지로 설치되어있는 환경을 기준으로 작성되었습니다.

설정하시기 전에 사용할 포트의 iptables 설정내용을 확인하시기 바랍니다.
[iptables 방화벽 포트 확인 및 설정 방법]

/etc/nginx/nginx.conf 파일이 존재하지만 기본설정 파일은 따로 존재합니다.
# vim /etc/nginx/conf.d/default.conf 명령으로 default.conf 파일을 편집합니다.

여는 순간 바로 보입니다. listen 80; 이 내용을 listen 8080 또는 원하는 포트번호로 변경해주신 후 저장합니다.

그리고 # service nginx start 또는 # service nginx restart로 실행시켜줍니다.

[nginx] centos 6.x에서 yum 패키지 설치 및 설정

centos 6.x 에서 패키지로 nginx를 설치하는 방법을 소개합니다.

실제 서비스를 목적으로 nginx 를 설치한다면 패키지보단 컴파일 방식으로 특성에 맞게 세팅해서 설치하는 것을 권장해드립니다. 패키지 설치의 경우 테스트나 개발목적인 분들에게 적합하다고 생각합니다.

centos에는 nginx yum 저장소가 존재하지 않는 경우가 있습니다. 이런 경우 yum install -y nginx 명령을 실행시키면 “No package nginx available.”라는 메세지가 출력됩니다.  아래 내용을 참고하시면 yum으로 설치가 가능합니다.

1. nginx 저장소 파일 생성


2. 저장소 파일(nginx.repo) 파일 내용 입력


3. nginx yum 설치


4. site_enabled 디렉토리 생성


5. nginx.conf 파일 수정
http 블록 내 마지막 줄에 include /etc/nginx/sites-enabled/*.conf; 입력 후 저장


6. chkconfig 등록 (부팅시 자동 실행)


7. nginx 시작