CentOS 7, nginx 설치 방법


2~3년에 한번 가량으로 CentOS를 새로 설치하는데…
매번 새로 설치해할때마다 어떻게 설정/세팅했는지 기억이 안나 고생하네요.

그래서 이번만큼은 새로 설치하면서 흔적을 남겨봅니다.

centos는 7.0으로 minimal버전(개발자 도구)으로 설치 후 nginx 설치 방법입니다.

※ 참고로 필자도 리눅스는 잘 모릅니다. 구글링의 해택을 누릴뿐…


nginx 설치를 위한 사전 작업
nginx의 docs를 보면 Stable version 설치 방법이 있습니다.
주소 – http://nginx.org/en/linux_packages.html

To set up the yum repository for RHEL/CentOS, create the file named /etc/yum.repos.d/nginx.repo with the following contents:

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

Replace “OS” with “rhel” or “centos”, depending on the distribution used, and “OSRELEASE” with “5”, “6”, or “7”, for 5.x, 6.x, or 7.x versions, respectively.

이렇게 친절하게 나와있습니다. 문제는 영어로요.- _ㅠ
어쨌든 해당 내용대로 하면…

# vi /etc/yum.repos.d/nginx.repo
입력 이후 아래 내용을 입력합니다.

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

그리고 저장!
참고로 저장은 ‘esc’ 키 입력 후 ‘:w'(저장) , ‘:q'(종료)

이제 설치 준비는 끝났으니 설치를 시작합시다!


nginx 설치
# sudo yum install nginx.x86_64

그냥 sudo yum install nginx 로도 설치 된다고 나와 있는데, 이상하게 설치가 안되어 위에처럼 하니 설치되네요.


nginx 실행 방법
# sudo nginx


사용을 위한 방화벽 해제
아참 방화벽 해제를 해야되는데…

# firewall-cmd –permanent –zone=public –add-service=http
# firewall-cmd –permanent –zone=public –add-service=https
# firewall-cmd –reload

를 통해 포트를 오픈하거나 그냥 방화벽 기능을 꺼버립니다.ㅋㅋ
# systemctl disable firewalld

이후 설치한 주소로 접속하면 “Welcome to nginx!” 이라고 페이지가 떠야 정상적으로 설정된거임


nginx 서비스 등록
제대로 설치가 된것을 확인했으니, 이제 서비스에 등록합시다.

# systemctl start nginx
# systemctl enable nginx


웹파일 수정은?
홈페이지에 노출될 웹파일 수정 경로는 아래와 같습니다.

/usr/share/nginx/html


php와 연동은 아래 링크를 참고!
링크 : CentOS 7, PHP7 설치 방법 (nginx 기준)


nginx 관련 설정 변경을 할 시에는
# vi /etc/nginx/nginx.conf

아래 내용 중 보안 부분은 >와이즈번님 블로그<를 참고했습니다. 
(참고 부분 : gif파일로 위장한 php파일을 업로드하여 동작시키는 거 방지!)

nginx 설정 부분은 >님프님 블로그<, >youngjae님 블로그<를 참고했습니다.

user nginx;   #php-fpm 파일에 user명과 같아야합니다.
worker_processes auto;  #사용할 cpu 코어 갯수로 1 → auto로 변경을!

error_log /var/log/nginx/error.log warn; // 에러 로그 저장 위치
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; // 주석제거 (압축 전송 기능)
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_proxied any;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

#추가처리!
#access_log off; #로그는 끄자

server_tokens off; #서버정보를 표시하는거도 끄자
fastcgi_hide_header X-Powered-By; #불필요한 정보표시 끄기
fastcgi_hide_header X-Pingback;
fastcgi_hide_header Link;
proxy_hide_header X-Powered-By;
proxy_hide_header X-Pingback;
proxy_hide_header X-Link;
add_header X-Frame-Options SAMEORIGIN; #아이프래임 사용 SAMEORIGIN 같은도메인 가능, DENY 불가, ALLOW 모두가능
add_header X-Content-Type-Options nosniff; #잘못된 MIME에는 응답거부
add_header X-XSS-Protection “1; mode=block”; #XSS 세션 하이재킹 방지

include /etc/nginx/conf.d/*.conf; #vhost 를 sites-enabled 디렉토리에서 관리
}


보안 관련~
#vi /etc/nginx/fastcgi_params

해당 내용은 >와이즈번님 블로그<를 참고했습니다. 
(참고 부분 : gif파일로 위장한 php파일을 업로드하여 동작시키는 거 방지!)

set $fastcgi_script_realname $fastcgi_script_name;

if ( $fastcgi_script_name ~ ^(.*\.php)(/.*)$ ) {

    set $fastcgi_script_realname $1;

    set $path_info $2;

}

if (!-f $document_root$fastcgi_script_realname) {

    return 404;

}

※ /etc/nginx/fastcgi_params 파일 제일 위에 넣으면 됩니다.

설정했으니 정상 동작할 수 있게 reload~ 진행으로 마무리!
#systemctl reload nginx


※ 추신 : 혹 설치 시 public key for nginx~~~~~~ is not installed 이러면서 에러가 나신다면, vi로 입력한 부분에 오타를 확인 하시거나 gpgcheck 항목이 0이 아닌 1로 되어 있는게 아닌지 확인해보세요~
( 전 gpgcheck를 오타쳐서 한참 고생했네요 ㅋㅋ )