리눅스서버

리눅스에서 웹서비스를 위한 웹서버 nginx 설치

리눅스를 홈페이지 운영서버로 활용하려면 먼저 웹서버 설치가 필요합니다. 웹서버는 http 웹서비스(홈페이지)를 운영하기위해서는 반드시 필요한 서버 프로그램입니다. 


웹서버에는 여러종류가 있습니다. 그 가운데 가장 많이 사용하는 대표적인 웹서버로는 apache(아파치)nginx(엔진엑스)가 있답니다. 과거에는 apache를 많이 사용했었습니다. (90% 이상 그 점유률이 대단했지요.) 지금도 대부분의 웹호스팅에서는 모두 apache를 사용하고 있습니다. 하지만 요즘은 nginx로 바뀌는 추세입니다. 대형 포털사이트들도 nginx로 갈아타고 있습니다. 


왜냐면 nginx가 apache 보다 설정도 간단하고, 또 성능면이나 속도면에서 더 뛰어나기때문입니다. apache는 기능은 많은데... 속도면에서 떨어집니다. (apache보다 50배나 빠르다는 얘기도 있습니다.) 원래 프로그램이란 건 기능이 많을수록 그 만큼 속도가 떨어지게 되어있답니다. 반면에 nginx는 필수기능만 포함하여 옵션을 최소화하였지요. 그 덕분에 빠른속도를 얻게 된 거랍니다. 하지만 nginx는 apache 처럼 많은 기능을 제공하지않아 특별한 기능이 필요한 경우 불편점도 있습니다.


우리는 일반적인 웹서버를 구축하기때문에 apache 처럼 많은 기능 필요없습니다. (또 그닥 잘쓰지도 않구요..) 그래서 nginx를 설치하여 빠른 웹서버를 구축해보겠습니다.



1. 설치

nginx는 yum을 통해 설치하게 될 텐데요.. 워낙 유명한 nginx라서 기본 저장소에도 nginx가 있습니다. 그냥 설치하면 돼요. 하지만 여기에서는 nginx 전용 저장소를 추가해서 설치해보겠습니다. nginx에서 운영하는 저장소를 추가하면 되도록 최신버전의 nginx를 설치할 수 있습니다.


* nginx 저장소 추가


# vi /etc/yum.repos.d/nginx.repo


새로 생성한 nginx 저장소파일에 아래 내용을 넣으면 됩니다.

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

enabled=1

@ 참조 : http://wiki.nginx.org/Install


안정화버전 : baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

최신버전 : baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/


* nginx 설치


# yum install nginx


* nginx 서비스 활성화

재부팅시 nginx가 자동실행되도록 서비스를 활성화 합니다.


systemctl enable nginx


@ 서비스 시작은 nginx 설정후 하도록 합니다.



2. 설정


* 80 포트허용

방화벽에서 80번 포트가 열려있어야 웹서비스가 가능합니다. 참조 : https://conory.com/blog/42477


# firewall-cmd --permanent --zone=public --add-service=http

# firewall-cmd --permanent --zone=public --add-service=https

# firewall-cmd --reload


@ 위 명령어는 firewalld을 사용할 경우에만 해당되며, iptables을 사용할 경우엔 다른 명령어를 사용해야 됩니다.

@ 집에서 운영하는 개인서버일 경우 인터넷 업체에서 80번 포트를 사용하지못하도록 막아놓는 경우도 있습니다. 그런경우는 다른포트를 사용하면 됩니다.



/etc/nginx/conf.d 설정

원래 nginx의 설정파일은 /etc/nginx/nginx.conf 입니다. 하지만, yum 업데이트시 설정파일이 덮어쓰질 우려가 있기때문에 설정파일을 새로 생성한 다음 사용하는 방법으로 해보겠습니다.


메인 설정파일( /etc/nginx/nginx.conf )에 보면 include /etc/nginx/conf.d/*.conf; 이란 부분이 있습니다. 이것은 /etc/nginx/conf.d 디렉토리에 있는 모든설정 파일들을 불러오는 구문입니다. 즉, conf.d 디렉토리에서 새로운 설정파일을 생성하면 그마저도 불러온다는 뜻입니다. 


디렉토리에는 기본적으로 default.conf 와 example_ssl.conf 이란 파일이 설치시에 추가되어있을 겁니다.

  • default.conf : 가장 메인이 되는 파일입니다. 서버 ip를 쳐봤을 때 나오는 페이지의 그 설정파일입니다.
  • example_ssl.conf : SSL 적용시 어떻게 설정하는 지 보여주는 단순한 예제파일입니다. 또 모두 주석(#)처리가 되어있어서 효력이 발생하지않는 파일입니다. 

이 파일들을 참조하여 설정파일을 새로 생성하면 됩니다.


그러면 conf.d 디렉토리에 main.conf 이란 파일을 생성하고 코드를 아래처럼 넣보겠습니다.


# vi /etc/nginx/conf.d/main.conf


server {
	# 포트번호. 일반적으로 80번 포트로 되어있습니다.
	listen       80;
	
	# 연결할 도메인 이름. 이때 도메인은 서버ip로 연결되어있어야합니다.
	server_name  www.conory.com;
	
	# 웹 루트 디렉토리 지정. 호스트에 접속시 /home/www/에 있는 파일들이 메인이 됩니다.
	root         /home/www;


	# 인덱스 파일 지정. 호스트에 접속시 /home/www/index.php,index.html,index.htm 이 파일이 있으면 먼저 불러옵니다.
	index index.php  index.html index.htm;


	# 자체적인 에러페이지를 만들 수 있습니다. 없다면 아래부분은 제거해주세요.
	error_page 401 /error_401.html;
	error_page 403 /error_403.html;
	error_page 404 /error_404.html;
	error_page 500 /error_500.html;
	error_page 502 /error_502.html;
	error_page 503 /error_503.html;
	


	# php 연동 부분입니다. php 없이 운영하려면 아래부분은 제거해주세요. 
	location ~ \.php$ {
		fastcgi_pass    127.0.0.1:9000;
		fastcgi_index   index.php;
		fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_param   PHP_ADMIN_VALUE "open_basedir=$document_root:/tmp/";
		include         fastcgi_params;
		try_files       $uri =404;
		limit_req       zone=limit burst=5 nodelay;
	}
}


@ 웹포트를 80번으로 하는 이유는 포트번호를 굳이 붙이지않아도 되는 포트이기때문입니다. 예를 들어, conory.com도 80포트입니다. 하지만 conory.com:80이라고 굳이 붙이지 않아도 접속이 가능합니다. 80번과 443번(ssl)만 그렇습니다. 다른 포트들은 붙여야 됩니다.



/etc/nginx/conf.d/default.conf 파일

default.conf 파일은 위에서도 말했다시피 가징 기본적인 파일입니다. 서버 ip를 쳐봤을 때 나오는 페이지의 설정파일이죠.. 하지만 설치시 추가되는 파일이므로 직접 수정을 하면 업데이트시 덮어쓰질 우려가 있습니다. 그러면 이 기본 파일을 설정할 수는 없을까요?


있습니다. 설정파일들은 파일이름의 알파벳순으로 불러지기때문에 default.conf 보다 더 높은 알파벳 이름으로 설정파일을 생성하면 됩니다. 그렇게 되면 default.conf 보다 우선순위가 높은 파일이 됩니다.


예를 들어, default.conf 를 복사한다음 그 이름을 a.conf 라고 하면 됩니다. 이제 default.conf 대신 a.conf 를 설정하면 됩니다.


# cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/a.conf


@ 참고로 cp는 파일복사 명령어 입니다.



웹루트 디렉토리에 html 파일넣기

설정파일에서 지정한 웹루트 디렉토리에 표시할 index.html 파일을 넣으면 됩니다. 예를 들어, 설정파일에서 /home/www 디렉토리를 웹루트로 지정하였다면 /home/www/index.html 파일이 인덱스파일이 됩니다.



3. 서비스 시작

설정을 마쳤으면 서비스를 시작합니다.


systemctl start nginx


이제 서버 ip나 연결된 도메인으로 웹 접속이 가능해졌습니다.



4. 설정 반영

추후에 nginx 설정 변경할 경우 서비스 재시작이나 재로드를 해야 설정이 반영됩니다.

하지만 재시작은 서비스가 끊겨야 되므로 재로드를 권장합니다.


# systemctl reload nginx


?