본문 바로가기
공부/프로그래밍

[linux-centos7] nginx 설치 + php7 연동 + 도메인설정

by demonic_ 2018. 10. 16.
반응형

해당과정은 root 계정으로 진행됩니다.



- Nginx 설치


1
2
3
4
5
6
7
8
9
# nginx 저장소를 추가
vi /etc/yum.repos.d/nginx.repo
 
# 아래내용 추가
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
cs


설치 및 방화벽을 오픈합니다


1
2
3
4
5
6
7
8
# yum을 이용해 설치
yum install -y nginx
 
 
# 방화벽에서 웹서버 포트를 개방
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
cs


nginx 환경설정을 수정합니다.

다음 두가지를 설정합니다

- 캐릭터셋 변경

- root 디렉토리 변경


1
2
# 환경파일 수정
vi /etc/nginx/conf.d/default.conf
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 파일내용 중 아래를 참조하여 수정합니다.
server {
    listen       80;
    server_name  localhost;
 
    #charset koi8-r;
    # 캐릭터셋 변경
    charset utf-8;
    #access_log  /var/log/nginx/host.access.log  main;
 
    location / {
        # root 디렉토리 변경
        # root   /usr/share/nginx/html;
        root   /home/www;
        index  index.html index.htm;
    }
 
    #error_page  404              /404.html;
 
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    ...
}
cs


완료되면 서비스를 재시작 합니다.


1
2
3
4
systemctl restart nginx
 
# 재부팅시 자동으로 서비스를 실행하려면 아래를 실행합니다
systemctl enable nginx
cs





- php7 연동


php 7가 설치되어 있지 않다면 아래를 참조하시고, 설치되어 있다면 넘어가도 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# EPEL Repository 패키지 다운로드 & 설치
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh epel-release-latest-7.noarch.rpm remi-release-7.rpm
yum --enablerepo=remi update remi-release
 
curl 'https://setup.ius.io/' -o setup-ius.sh
bash setup-ius.sh
 
 
# 기존에 설치된 php가 있다면 제거
yum remove -'yum list installed | cut -d " " -f 1  | grep php'
 
# 설치
# nginx 와 연동하기 위해선 php-fpm 반드시 설치되어야 합니다
yum --enablerepo=remi-php73 install -y php php-common php-fpm
 
# php 버전확인
php -v
cs



nginx 환경설정 파일 수정


1
2
# nginx 환경설정 파일을 수정합니다.
vi /etc/nginx/conf.d/default.conf
cs


location / {} 안에 설정한 root 폴더를 밖으로 뺍니다.

그렇지 않으면 fastcgi_param 에서 사용되는 SCRIPT_FILENAME 이 에러를 발생시킵니다.


에러: FastCGI sent in stderr: "Primary script unknown"...


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 다음을 찾아 주석해제 및 수정합니다.
root /home/www
 
location / {
    # root 디렉토리 변경
    # root   /usr/share/nginx/html;
    # php 연동할 경우 location root 설정은 제거
    # root   /home/www;
    index  index.html index.htm;
}
 
location ~ \.php$ {
    # /var/run/php-fpm/php-fpm.sock 경로에 파일이 있는지 확인
    fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;
}
cs


php-fpm 설정파일 수정합니다


1
vi /etc/php-fpm.d/www.conf
cs


1
2
3
4
5
6
7
# 파일 내용 찾아 수정
; 아래 주석
;listen = 127.0.0.1:9000
; 아래 추가
listen = '/var/run/php-fpm/www.sock'
 
listen.acl_users = nginx

# 아래를 해두지 않으면 php-fpm 으로 www.sock 이 실행되어도 권한때문에 연결이 되지 않는다.
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
cs


서비스 재시작


1
2
3
4
5
6
# 서비스 재시작
systemctl restart php-fpm
systemctl restart nginx
 
# 서비스 자동시작 등록
systemctl enable php-fpm
cs




- 도메인 연결


# sites-available 폴더 생성 및 파일 생성

mkdir /etc/nginx/sites-available


# 도메인명 파일 생성

cd /etc/nginx/sites-available

vi [도메인명]


# 안에 내용을 다음과 같이 넣는다.

server {

  listen 80

  server_name [도메인명]

  root [root 폴더 위치]

  index index.html index.php

}


# 환경파일에 해당경로를 추가한다

vi /etc/nginx/conf.d/default.conf


맨 하단에 추가

server {
   ...
   include /etc/nginx/sites-available/*;
}

서비스 재시작

systemctl restart nginx



다음과 같은 에러가 발생할 경우 대처법


FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: [IP], server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/www.sock:", host: [IP]


nginx 설정파일에서 location 에 있는 root를 제거하고 그 위에 root 위치를 설정합니다

(그렇지 않으면 fastcgi_param 에서 사용되는 SCRIPT_FILENAME 이 에러를 발생)


1
2
3
4
5
6
root /home/www;
 
location / {
    #root   /home/www;
    index  index.html index.htm;
}
cs


nginx 를 재시작해줍니다


1
systemctl restart nginx
cs


반응형

댓글