Centos7 + nginx + php-fpm 설정

게임 서버 프로그래밍/네트워크 잡것들

2021. 10. 4. 01:54

javascript랑 제이쿼리 써보려구 집에서 다시 웹서버 환경을 설정하는데..

 

오랜만에 하려니 ㅋㅋ nginx configuration 조작에서부터 꼬였다.

 

다음에 또 꼬일것을 대비하여 ㅎㅎ 전체 설정과정을 포스팅해보려 한다.

 

(vbox에 centos7 설치과정은 생략한다.)

 

1. linux 기본 설정

 

처음엔 네트워크 연결이 잡히지 않는다

(참고로, 8.8.8.8은 google의 public dns 주소입니다.)

 

nginx든 뭐든간에 다운로드 받기위해서는 네트워크 연결부터 되야한다

 

cd /etc/sysconfig/network-scripts

vi ifcfg-enp0s3 (환경에따라서는 ifcfg-eth0일수도 있습니당 ls로 확인해보아요)

두 명령어로 해당 파일을 진입해봅시다.

 

맨 밑의 ONBOOT=no 를 ONBOOT=yes로 바꿔주자.

 

이후에 

ifup enp0s3 

ping 8.8.8.8 
또는
ip addr

위의 명령어를 통해 네트워크가 제대로 연결됨을 알수 있습니다.

 

2. yum update

 

yum은 centos에서 사용되는 패키지 설치 관리자정도로 이해하면 될것 같아요

 

저희가 앞으로 다운받아야하는 다양한 라이브러리들을 위해서

 

yum의 업데이트가 필요합니다.

 

yum update -y

 

위의 명령어로 업데이트를 해줍시다!

 

그리고, 불편한 vm을 자체 콘솔창을 더 이상 쓰고싶지 않으니..

 

putty로 옮겨갈 생각입니다

 

vbox에서 설정에 네트워크로 들어갑시다

 

고급에 포트포워팅을 눌러줍니다

 

 

ip addr 명령어를 이용해 

 

enp0s3(또는 eth0)의 ip를 알 수 있어요

 

게스트 ip에 넣어줍시다

호스트는 로컬로 넣어주고 22번포트로 접속!

 

3. nginx 설치

 

 

nginx를 설치하려하니 없다고 뜨네용 또잉..

 

yum에 없는 외부 저장소는 저희가 직접 추가해야한다는군요

 

cd /etc/yum.repos.d

vi nginx.repo

위 명령어로 새 파일을 하나만들고

 

nginx.repo 안에 다음 문구를 넣고 :wq로 저장합시다

 

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

다시 install을 합시다.

 

yum install nginx -y

(이후)

systemctl start nginx
systemctl enable nginx

 

4. php-fpm 설치

 

yum install php-fpm -y

(이후)
vi /etc/php-fpm.d/www.conf

여기서 몇가지 고쳐야하는 부분이 있습니다!

 

줄번호를 인식할수 있게 ':set number' 를 이용해서 쉽게 찾아가세용

(12번행)
listen = 127.0.0.1 를 찾아가서
listen = /var/run/php-fpm/php-fpm.sock 으로 변경

(31~33번행)
;listen.owner = nobody 
;listen.group = nobody 
;listen.mode = 0666

세미콜론 제거하고 수정
listen.owner = nginx
listen.group = nginx 

(이후)

systemctl restart php-fpm
systemctl enable php-fpm


 

여기서 좀 헤맸습니다 ㅜㅜ.. 

 

처음 했을떄랑 구조가 좀 다르게 나와서 ㅎㅎ; 

 

되기만하면되니 순서가 조금 꼬이더라도 이해해주세요!

 

잡다한 처리를 좀 해줘야합니다

 

먼저, nginx연동과 관련하여 selinux를 꺼야합니다.

 

그 다음, http 방화벽을 오픈해야합니다.

# selinux 끄기
vi /etc/sysconfig/selinux
reboot

SELINUX 을 disabled로 바꿔줘야합니다


(참고!!)
reboot 하고나면 selinux 정책 어쩌구하면서..(FAIL TO LOAD SELINUX POLCIY. FREEZING error가 날 수 있습니다.
이럴땐 구글링이 최고 ㅎㅎ; 이 링크를 따라가주세요. 리붓은 필수입니다.

# 방화벽 오픈
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

# 포트포워딩
putty 설정과 마찬가지로 http통신을위해 포트포워딩도 해줍시당

 

거의 다 왔습니다 ㅎㅎㅎ

 

이제 nginx configuration 파일만 설정하면 끝입니다!

 

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

# default.conf 파일

server {
listen 80;
server_name localhost;
access_log /project/log/nginx/access.log main;
root /project/public_html/;
location / {
index index.html index.htm index.php;
}
#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; }
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1:9000;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 location ~ \.php${
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
# 여기는 설정마다 다를수있습니다. 라우팅될 index 파일의 폴더경로를 document_root대신 써주세요
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root # concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

수정한 부분 강조표시 해두었습니다.
하지만 로그가 남는 /project/log/nginx/access.log 
그리고, root /project/public_html/ 같은경우는 임의의 경로입니다.
저는 /project 하위에 이런식으로 디렉토리 구조를 짰습니다.
/
└ project
└ log                                                     public_html
└nginx                      php-fpm                 └index.php
└access.log error.log    └access.log error.log   

로그를 따로 임의의 폴더에서 관리하지 않는 경우에 그대로 두셔도됩니다.
root 경로도 마찬가지이지만 본인이 작업한 프로그램들을 따로 관리하는 차원에서
새로운 폴더에서 관리하는걸 추천드립니다!

밑은 error_log 경로를 위해 ㅎㅎ; 밑에 include로 위의 파일을 포함시키고 있으니 해당 log를 주석처리하시구
위의 파일에서 정의하셔도 상관없습니다.

vi /etc/nginx/nginx.conf
# user root는 바뀔수 있습니다. 저는 centos 설정시 login을 root로 해서.. 
# XXXX@localhost 이런식으로 되어있을텐데 XXXX부분으로 바꿔주세요. nginx -> root
user root;
worker_processes auto;
error_log /project/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;

 

마지막으로, index로 (localhost로 접속했을때 표시될 파일)

 

정의한 index.php파일의 기본 root가 /project/public_html로 설정해두었으니

 

해당 폴더에 index.php를 생성해주고 

 

확인만 하기위해 phpinfo를 띄워봅시다.

 

vi /project/public_html/index.php

# index.php
<?php
phpinfo();

(이후)

웹에서 localhost/index.php (또는 localhost)로 접속하면



// file not found로 뜨는 경우!!
이 경우는 file의 경로를 잘못 설정한 경우입니다. 

https://syaku.tistory.com/347
요기에 잘 설명되어있어요!

 

음.. 중간에 조금 헤매었던 구간이 있어서 =ㅅ=..

 

없겠지만.. 빠진부분이 있어 제대로 실행되지않는다면 댓글달아주세요!

 

이 글은 정보글임에 동시에 미래의 저를 위한 포스팅입니다 ㅎ

 

마지막으로.. nginx 버젼?에 따라서 혹은 특별한 경우 ㅎ

 

conf.d 폴더에 default.conf가 없는 경우가 있습니다

 

당황하지마시고 위의 defualt.conf 파일을 해당 폴더에 생성해주세요

 

따로 해줘야 할 일은 이런 경우 /etc/nginx/nginx.conf 파일이 위의 파일과 달리

 

많은 내용을 포함한 경우일텐데 일부 내용을 주석시켜줘야 한다는 것입니다

 

server 블록 자체를 블록시키고 생성하시는 것을 추천드립니다!

 

(끝)

'게임 서버 프로그래밍 > 네트워크 잡것들' 카테고리의 다른 글

용량 ㅜ  (0) 2021.10.19
mysqld port 문제..  (0) 2021.10.11
Packet Generator에 대한 고찰  (0) 2020.11.08
select함수의 writefds  (0) 2020.04.16
UDP와 Select()  (0) 2020.02.27