이 글은 리눅스 서버 LEMP 스택 설치하기 시리즈(총 6개의 글) 연재작입니다.

 

 

 

 

 

 

 

 LEMP 스택 설치방법 연재작 시리즈의 마지막 글로써, DB(데이터베이스) 서버프로그램으로 MariaDB를 설치하는 방법을 알아보겠습니다.

 

MariaDB (마리아디비)는 mySQL과 호환이 잘되는 데이터베이스로 요즘 인기인 데이터베이스 애플리케이션입니다.  신규로 LAMP 또는 LEMP 스택구성할 때 데이타베이스를 mySQL로 할지 MariaDB로 할지 고민이되는 사람은 얼마 없을 것입니다. 단지 기존시스템에서 전환할때 MariaDB로 전환한다면 호환성을 잘 알아봐야겠죠. 

 

참고

서버접속에대한 사전지식이 필요하다면 아래 링크에서 내용을 자세히 읽어보시기 바랍니다.

CLI 명령어 입력중 $과 #기호 구분, 명령어 앞에 붙는 sudo 가 궁금하다면 아래 블로그글을 읽어보세요.

 

 

apt: 현재 우분투가 가진 mariadb-server 설치정보 알아보기

최신버전 MariaDB 설치하기위해서 apt 프로그램을 이용해서 설치할 겁니다.  apt는 패키지를 설치할 때 어디에서 받아올지 리스트목록으로 관리하는데요. 우분투 16.04에있는 기본 마리아디비 설치정보는 10.0 버전입니다. 이글을 쓰고 있는 시점에서는 10.3버전이 최신 버전이네요. 그래서 10.3 에대한 apt의 설치정보 리스트를 먼저 업데이트해야합니다.

아래 명령어를 통해서 apt의 리스트 중에 MariaDB 패키지에대한 설치정보를 알 수 있습니다.

sudo apt-cache policy mariadb-server

 

 

위 그림처럼 설치(Installed)는 현재 none 이라서 시스템에 설치된 마리아디비는 없는 걸로 나오고 설치 후보자(Candidate)는 10.0.34로 나옵니다. 그리고 그 아래로 버전테이블이 나오네요. 이대로 그냥 설치하면 10.0 버전이 설치되니 이 것을 먼저 업데이트 해야 최신버전으로 설치할 수 있습니다.

 

apt 레파지토리 리스트 추가: MariaDB 최신버전 설치정보 업데이트하기

이글을 작성중인 현재는 10.3이 최신이지만 여러분들이 이 글을 보고있는 미래 시점에서는 버전이 더 높을 겁니다. 그럼 그 시점에서 최신버전은 어디에서 알 수 있을까요? 바로 MariaDB 공식사이트입니다. 공식사이트에서 레파지토리(저장소)를 찾을 줄 알아야겠죠? 

위 링크에 접속해서 아래처럼 차례대로 OS 종류(우분투) , OS 버전(16.04 LTS) 을 선택하고 3번째에서는 자신이 원하는 MariaDB 버전을 선택, 4번째에서는 자신가 가까운 서버위치를 선택해주고나면 아래쪽에 apt 업데이트 방법이 안내가 됩니다.

 

 

 

위 그림에서 업데이트 방법에 안내된대로 4개의 명령어를 먼저 입력해봅시다.

$ sudo apt-get install software-properties-common $ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 $ sudo add-apt-repository 'deb [arch=amd64,arm64,i386,ppc64el] https://ftp.harukasan.org/mariadb/repo/10.3/ubuntu xenial main' $ sudo apt update

 

레파지토리 정보 임포팅



 

이제 apt 리스트에 레파지토리가 잘 업데이트되었나 확인해봐야겠죠? 리스트를 재확인해봅시다



sudo apt-cache policy mariadb-server

그러면 아래 그림처럼 Candidate가 마리아디비 최신버전인 10.3.8 버전이라고 나옵니다. 

 

MariaDB 최신버전 설치방법

위 결과에서 보면 목록중에 아래에는 이전에 있던 10.0 버전에대한 설치정보도 그대로 있습니다.  이렇게 여러버전에대한 설치정보가 있을때 Candidate가 아닌 다른 버전을 설치하려면 버전을 명시해서 설치하면 될것입니다. 하지만 저는 Candidate에 명시된 버전을 설치하면 되므로 아래명령어를 통해서 곧바로 설치를 시작할 수 있습니다.

sudo apt install mariadb-server

 

 

 

위처럼 Do you want to continue? 질문이 나오면 계속 진행하겠다고 Y를 누르고 엔터키를 눌러 진행합니다. 그러면 아래 그림처럼 MariaDB의 root 사용자 비밀번호를 설정하라고 나옵니다. 특수문자, 대소문자, 숫자 조합으로 복잡한 비밀번호를 입력해줍시다.

중요: DB의 root 사용자는 리눅스컴퓨터 사용자 root와는 다릅니다.

 

이때 설정하는 root의 비밀번호는 가장 중요한 비번이므로 잊지않도록 자신만 아는 곳에 써놓으세요. 회사 사무실이라면 키보드 뒷면에 적으시겠죠. 아래처럼 비번 재확인이 나오면 같은 비번을 또 입력해줍니다.

재확인: 같은 비번을 입력해주세요

설치 완료!

 

설치가 완료되면 동시에 MariaDB 가 실행되며, 재부팅시에도 자동 시작되도록 설정됩니다. 서비스 현재상태를 확인하는 명령어를 이용해 현지설치된 MariaDB의 버전은 무엇인지, 잘 돌고있는지 확인해봅시다.

service mysql status

MariaDB running!

위 내용은 내용이 길어서 방향키로 내려볼 수 있는데 Q  Control+C 를 입력하여  빠져나갑시다.

이렇게 설치가 완료되었는데요. 이제 PHP 와의 연동모듈을 설치하고 데이터베이스 생성시 기본언어셋을 설정하는 중요한 작업을 추가로 해줘야겠습니다.

 

PHP-FPM 에 DB 연동을 위한 php-mysql 모듈설치

php7.2-mysql 모듈이 설치되어있는지 apt 리스트에서 확인해봅시다. 

sudo apt-cache policy php7.2-mysql

아래화면 처럼 Installed: 버전번호 가 나오면 이미 설치되어있는 것입니다.

 

위 화면에서 Installed: (none) 이라고 나온다면 아래명령어로 설치해주세요.

sudo apt-get install php7.2-mysql

 

MariaDB 데이터베이스 기본 언어셋으로 UTF8 설정하기

데이터베이스의 기본 언어셋은 중요한 문제입니다. 우리는 컴퓨터를 사용하면서 한글이나 이모티콘글자가 깨져보이거나 네모표시로 표현되는 걸 가끔 마주하곤 하는데요. 컴퓨터의 언어셋을 유니코드(UTF)로 설정하면 해결되는 문제죠. 

마라이디비 데이터베이스의 기본 언어셋은 설치했을 때 latin1 (라틴문자 언어셋)으로 되어있습니다. 이러면 나중에 DB관련 SQL문을 작성할 때 일일히 언어셋을 바꿔야합니다. 특히 한글을 자주쓰는 우리는 더욱 그렇죠. 

그래서 테이블생성시 언어셋 기본값이 utf8이되도록해서 그런 문제가 생기지 않게 해봅시다. 그 보다는 모바일에서 사용하는 이모지(emoji)까지 표현가능한 utf8mb4 언어셋으로 지정하는게 좋겠네요.

 

이런 설정을 하기위해서는 /etc/mysql/conf.d/mariadb.cnf 파일을 수정하면되는데 이 파일이 현재는 없을 것입니다. 아래 그림은 /etc/mysql/conf.d 폴더를 살펴본 모습입니다. 파일이 단 하나 뿐이군요.

/etc/mysql/conf.d 폴더안에 mariadb.cnf 파일이 없음

FTP 프로그램에서 살펴본모습.

저와는 다르게 저곳에 이미 mariadb.cnf 파일이 있다면 해당파일을 수정하시면 되는데요. 저는 없으므로 새로 만들고 설정내용을 추가하겠습니다.

그런데 /etc/mysql/conf.d/ 폴더는 root 계정 권한으로만 수정가능합니다. 그러므로 CLI에서 아래처럼 root 명령어 sudo를 써서, mariadb.cnf 파일을 만들고 nano 편집기로 여는 아래 두개 명령어를 실행하겠습니다.

$ sudo touch /etc/mysql/conf.d/mariadb.cnf $ sudo nano /etc/mysql/conf.d/mariadb.cnf

 

nano 편집기로 열었을때 기존파일이 있었다면 그 내용이 나올 겁니다. 그럴땐  control + k 키를 눌러 한줄씩 빠르게 삭제하고 비운뒤에 따라하시면 됩니다. 아래 내용을 #기호도 포함해서 복사해서 그대로 붙여넣으세요. 

# MariaDB-specific config file. # Read by /etc/mysql/my.cnf [client] # Default is Latin1, if you need UTF-8 set this (also in server section) default-character-set = utf8mb4 [mysqld] # # * Character sets # # Default is Latin1, if you need UTF-8 set all this (also in client section) # character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci character_set_server = utf8mb4 collation_server = utf8mb4_unicode_ci

참고: 위 내용에서 앞에 #이 붙은건 주석이므로 작성하지 않아도 무관합니다.

그러면 아래 그림처럼 될겁니다.

utf8mb4 세팅을 위한 mariadb.cnf 파일내용

 

이제 저장하고 nano 편집기를 빠져나가기위해서 control + x  를 누르고  y -> 엔터를 누르면 내용을 저장하고 빠져나오게 됩니다.

ls 명령어로 폴더안을 다시 살펴보면 해당파일이 있을 겁니다.

 

이제 MariaDB를 재시작해줍니다.

sudo service mysql restart

 

우분투 시스템 재부팅

이제 exit 명령어로 CLI 접속을 종료하고 서버에 다시 접속해보면 시작할때 ***System restart required *** 라는 메시지가 나올텐데요. 컴퓨터를 재부팅하란 소립니다.

아래 명령어를 사용해 우분투 서버컴퓨터를 재부팅해줍시다. 재부팅이 시작되면 다시한번 CLI 서버접속 연결이 끊기게 됩니다.

sudo shutdown now -r

이 글은 리눅스 서버 LEMP 스택 설치하기 시리즈(총 6개의 글) 연재작입니다.

 

시리즈 연재작의 일환으로 이번글에서는 리눅스 우분투서버에 PHP 7을 설치하면서 아래와 같은 내용을 알아볼 것입니다.

php 웹 프로그래밍을 위해서는 가장 중요한 것이 웹서버가 .php 파일을 해석할 수 있어야합니다. 연재작의 이전 단계에서 설치했던 nginx는 아파치와는 다르게 html 같은 기본적인 마크업 언어의 파일만 해석할 수 있을 뿐 php파일은 해석하지 못하는데요. 이를위해서 nginx + php 조합에서는 php-fpm 이란 것이 대신 해석해준다고 합니다. 그래서 이번에 설치할 것은 php뿐만이 아닌 php-fpm 이라는 것을 설치해야하는데요. php-fpm 설치만으로도 php가 설치됩니다.

 

php는 5.6 에 비해서 7버전이 성능향샹이 크다고하는데요. 제가 이글을 쓰고 있는 시점에서 7.2버전이 정식으로 릴리즈되었습니다. 그래서 7.2버전을 설치하려고합니다. 7.2버전은 7.0을 필요로 하므로 7.0버전도 설치된다고 보시면 됩니다. ( 7.0 설치를 원한다면 아래 내용중에 7.2로 쓰여진 내용은 7.0으로 바꿔 작업하시면 됩니다.)

apt: 현재 서버에 설치가능한 php 버전 정보 살펴보기

php-fpm 설치는 apt 프로그램을 사용해 설치할 건데요. 전에도 언급했듯 apt는 각각의 패키지를 설치할 수 있는 인터넷주소를 리스트로 가지고 있고 우분투 16.04 의 apt는 기본적으로 php 7.0 버전에 대한 설치정보를 가지고 있습니다. 그러므로 apt에 php 7.2버전에대한 설치정보를 먼저 업데이트 해줘야합니다. 그 전에 현재가진 정보를 살펴볼까요?



아래 명령어를 입력함으로써 apt의 리스트에서 php 설치정보만 살펴 볼 수 있습니다.

apt-cache policy php

위 그림처럼 Candidate: 1:7.0+… 처럼 정보가 나오면서 php 7.0 버전 설치정보가 나오게 됩니다.

이상태에서는 아래 명령어로 7.0버전의 fpm을 바로 설치할 수 있지만 저는 7.2버전을 원하므로 입력하지 않겠습니다.

sudo apt-get install php7.0-fpm

php 7.2 버전 설치준비를 위해 apt 리스트 업데이트 하기

먼저 apt에 7.2버전 다운로드 저장소를 추가하기위해 아래명령어를 입력합니다. 

sudo add-apt-repository ppa:ondrej/php

 

위처럼 Press [ENTER] to continue… 라는 글자가 나올 때 계속하려면 엔터키(리턴키), 취소하려면 control + c 를 누르는데 엔터키를 누르고 설치를 진행합시다.

 

그리고 완료되면 아래 명령어를 입력해서 apt의 패키지 정보를 업데이트합니다.

sudo apt-get update

 

apt의 리스트에서 php 정보를 다시확인해보면 7.2 버전이  추가된 걸 볼 수 있습니다.

sudo apt-cache policy php

candidate 버전이 7.2

php 7.2 fpm과 주요모듈 설치하기

이제 아래 명령어를 통해서 7.2버전을 설치합니다.

sudo apt-get install php7.2-fpm

초반에 Do you want to continue? 라는 질문이 나올때 Y를 입력후 엔터키를 눌러 계속 진행합니다.

 

설치가 완료되면 이번엔 자주쓰이는 중요한 php 모듈을 설치합니다. 아래 명령어는 php7.2-cliphp7.2-curlphp7.2-mysql 등 여러가지 모듈을 나열해서 한번에 설치합니다.

sudo apt-get install php7.2-cli php7.2-curl php7.2-gd php7.2-mysql php7.2-mbstring zip unzip

 

설치된 php를 확인하려면 아래 명령어를 통해 설치된 php의 버전을 확인해보면 되겠습니다.

php -v

PHP 7.2.7 이 설치되어있음을 확인

그리고 php-fpm을 시작해줍니다.

sudo service php7.2-fpm start

PHP해석을 위한 NGINX 설정 및 보안설정

이제 Nginx가  php파일을 해석,처리하도록 적용하기 위해는 설정파일을 수정해줘야합니다. 설정파일은 아래위치 중 하나인데요. apt를 통해 설치했으므로 두 번째 경로에 있을 것입니다.

  • /etc/nginx/conf.d/default.conf
  • /etc/nginx/sites-available/default

리눅스서버의 /etc/nginx/sites-available/위치에서 default  파일을 찾아볼수 있을 것입니다.

 

이 파일을 수정해야하는데 소유자는 root이고 사용자그룹또한 root라서 현재로선 SFTP 를 통해 편집할 수 없습니다. sudo 명령어를 통해 nano 나 vim 등 CLI 텍스트 편집기를 이용할 수도 있겠지만 파일내용도 길고 CLI가 익숙하지 않다면 번거로울텐데요. 조금 편해지기위해 아래 명령어를 입력해서 이 파일의 사용자그룹을 ubuntu로 바꾸고 권한도 664 또는 775를 부여해줍니다.

$ sudo chgrp ubuntu /etc/nginx/sites-available/default $ sudo chmod 664 /etc/nginx/sites-available/default

위처럼 default 파일의 사용자그룹을 ubuntu로 변경하고 그룹에게 편집권한을 주면 SFTP로 접속한 ubuntu 사용자로도 편집할 수 있고 나중에 이 설정파일을 변경할때 자신이 원하는 텍스트편집기를 사용할 수 있어서 편리할 것입니다.

SFTP에서도 이파일을 편집하기 위함입니다.

 

아래는 SFTP 클라이언트 Transmit 5에서 확인해본 default 파일입니다. 이제 파일을 열어 편집을 시도해봅시다.

 

Atom 편집기에서 연 default 파일

이 파일 내용 중에서 앞에 #기호가 붙은건 동작하지 않는 ‘주석’입니다. 주석을 모두 제거하고나면 아래같은 내용입니다.

server {     listen 80 default_server;     listen [::]:80 default_server;     root /var/www/html;     index index.html index.htm index.nginx-debian.html;     server_name _;     location / {      try_files $uri $uri/ =404;   } }

이 중에서 index index.html index.htm index.nginx-debian.html; 이라고 쓰여진 부분이 nginx가 처리할 파일 종류를 나열한 것입니다. 우선순위와 같은 것인데요. 이곳에 index.php 를 추가해줍니다.

index index.php index.html index.htm index.nginx-debian.html;

 



그 다음으로 PHP의 설정파일 경로와 보안설정을 지정하여 아래처럼 추가해줍니다. 

location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_read_timeout 300; }

참고: 위 내용에서 php7.2-fpm.sock 파일 이름은 php7.0을 설치했을 경우엔  php7.0-fpm.sock이 됩니다. 

참고: php7.2-fpm.sock 파일은 php-fpm 설치후 위에서 php-fpm을 시작하는 명령어를 입력했을 때 만들어진 것인데요.  /etc/php/7.2/fpm/pool.d/www.conf  파일의 내용 중에 listen = /run/php/php7.2-fpm.sock 라는 부분이 쓰여져있습니다. 이 줄이 실행되면서 /run/php/ 디렉토리에 만들어지는 것입니다.

 

그리고 아래내용도 추가합니다.

location ~ /\.ht { deny all; }

참고: 위 내용은 차후 아파치 웹서버와 document root (사이트루트 폴더)를 공유할 것을 대비하여 .htaccess 파일에 접속하지 못하도록 해주는 설정이라고 합니다.

 

그러면 설정파일인 default 파일의 전체내용은 아래와 같습니다. 차후에 도메인과 HTTPS를 추가하게 될텐데요. 그 때 여러분은 이곳에 여러 설정을 또 추가작성하게 될 겁니다.

server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html ; server_name _; location / { try_files $uri $uri/ =404; } location ~ \.php$ {     include snippets/fastcgi-php.conf;     fastcgi_pass unix:/run/php/php7.2-fpm.sock;     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;     include fastcgi_params; fastcgi_read_timeout 300; } location ~ /\.ht {     deny all; } }

참고: 위파일은 nginx 라우팅설정용 파일인데요. 더 알고 싶다면 nginx 설정파일에대한 더 상세한 지식 글을 참고할 수 있습니다.

 

이제 파일을 저장해줍니다. CLI 명령어 입력으로 돌아와서 nginx 설정파일들의 문법 에러가 없는지 아래명령어로 확인해주세요.

sudo nginx -t

그러면 아래처럼 syntax is ok  successful 메시지가 나오면 conf 파일을 포함한 모든 설정파일에 문법 문제는 없는 것입니다.

위 테스트가 성공적이라면 아래 명령어 중 아무거나 하나를 써서 nginx 를 재시작해줍니다.

sudo systemctl reload nginxsudo service nginx restart

nginx의 PHP 해석 테스트 해보기

이제 도큐멘트 루트 디렉토리(웹사이트 루트)에 .php 파일을 만들어 잘 해석되는지 확인해봅시다. /var/www/html 폴더 안에 index.php 파일을 만들고 텍스트편집기로 열어 그 내용을 아래처럼 작성 후 저장해줍니다.

<?php phpinfo(); ?>

 

php 코드중 phpinfo() 함수는 설치된 php 정보를 출력해주는 함수입니다. 이제 자신의 서버 IP 주소를 웹브라우저 URL 주소란에 적어 접속해주세요. 아래같은 화면이 나오게 되면 php가 잘 해석되는 것입니다.

성공!

잘 나오나요? 축하합니다. 

php 타임존 시간대 설정 바꾸기

연재작의 앞단계 글에서 우분투 서버의 시스템 시간을 서울로 설정했었는데요.  php 코딩할때 시간관계된 코딩을 해야할 수도 있습니다. php 설정파일에서 별도 설정을 하지 않으면 컴퓨터시간을 따르긴하지만 안타깝게도 php 7.x 버전에서는 시스템 시간이 서울일경우 php 상에서는 평양으로 나오는 문제가 있습니다. 에러로그 파일도 평양으로 기록됩니다. 북한과의 평화협정으로 평양과 서울의 시간은 같아졌을 지라도 영 찝찝한 기분은 어쩔 수 없을 겁니다. 그래서 php 설정시간도 서울시간으로 바꿔주려합니다. 그러기위해서는 아래 두 파일을 수정해야합니다.

  • /etc/php/7.2/fpm/php.ini
  • /etc/php/7.2/cli/php.ini

그런데 이 파일들에 대한 수정권한이 또 root만 가지고 있습니다(644). 간단한 수정이니 이번엔 CLI에서 root로 수정하겠습니다. 아래 명령어를 입력해 nano 편집기로 해당파일을 엽니다.

sudo nano /etc/php/7.2/fpm/php.ini

아래처럼 그 내용이 나올겁니다. 

php.ini 파일내용의 앞부분

위 파일의 전체내용은 약 2천줄이므로 찾기를 통해 수정할 부분을 빠르게 찾아봅시다. control + w 키를 누르면 아래처럼 검색할 수 있습니다.

위 그림의 아래처럼 Search: 상자가 나오면 위 처럼 ;date.timezone =를 입력후 엔터키를 눌러주면 아래 그림 처럼 해당 텍스트가 위치한 곳으로 커서가 이동합니다.

 

세미콜론(;) 이 앞에 붙은건 주석으로써 해당 설정이 아무 기능도 못하게되는데요. 아래 그림처럼 주석처리를 제거하고 date.timezone = Asia/Seoul으로 수정해줍니다.

이제 저장하고 나가야겠죠? 연속해서 control + x 키를 누르고, Y키를 누른다음 엔터키를 누르면 저장된뒤 nano 편집기를 빠져나갑니다.

다음으로 아래명령어를 이용해 두번째 파일도 수정해줍니다.



sudo nano /etc/php/7.2/cli/php.ini

파일이 열리면 위 파일과 마찬가지로  control + w 를 누르고  ;date.timezone =를 입력후 엔터키를 입력해 해당 줄을 찾아 그 줄의 주석을 해제하고 date.timezone = Asia/Seoul로 바꾼뒤 연속해서 control + x 키를 누르고, Y키를 누른다음 엔터키를 눌러 저장하고 끝냅니다.

두 파일을 모두 수정했다면 그런 다음 아래 명령어로 PHP-FPM을 재시작 해줍니다. 

sudo systemctl restart php7.2-fpm

 

이제 다시 웹브라우저에서 접속해서 새로고침해보면 php 정보 내용중 timezone 항목이 아래처럼 서울로 바뀌어있을 것입니다.

마무리로 현재 /var/www/html 디렉토리(웹 루트폴더)에 있는 두파일은 아래와 같을 겁니다. phpinfo() 등으로인해 서버정보가노출되므로 이 두 파일은 삭제해주세요.

  • index.nginx-debian.html (nginx 설치하면 기본으로 있는 것)
  • index.php (위에서 phpinfo() 정보를 출력하기위해 잠시 만들었던 것)

그 뒤 /var/www/html 폴더에 아무것도 없다면 웹브라우저에서 접속했을 때 403 Forbidden 메시지가 나오는 건 정상입니다. 이제 이곳에 index.php 파일을 만들어 php 코딩을 시작할 수 있습니다.

다음단계

 다음단계에서는 Maria DB를 추가로 설치하도록 하겠습니다. 다음으로 넘어가기전 지금이 서버를 임시로 백업 해두기 좋은 시점입니다. 아마존 라이트세일을 사용한다면 스냅샷 기능 사용방법을 참고해보세요.

Centos 환경에서만 가능


https://github.com/php79/stack

1. Ubuntu Nginx, Php5 세팅해주는 과정에서 오류가 발생


$sudo nano /etc/nginx/sites-available/default

.

.

...


         location ~ \.php$ {

                try_files $uri =404;

                fastcgi_split_path_info ^(.+\.php)(/.+)$;

        #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

        #

        #       # With php5-cgi alone:

                 fastcgi_pass 127.0.0.1:9000;

        #       # With php5-fpm:

                fastcgi_pass unix:/var/run/php5-fpm.sock;

                fastcgi_index index.php;

                include fastcgi_params;

        }

이렇게 세팅을 해줬더니 502 Bad GateWay 오류가 났다.

로그를 찍어보니

$ nginx -t

nginx: [warn] server name "http://bobss.tk" has suspicious symbols in /etc/nginx/sites-enabled/default:28

nginx: [emerg] "fastcgi_pass" directive is duplicate in /etc/nginx/sites-enabled/default:58

nginx: configuration file /etc/nginx/nginx.conf test failed

default파일에서 오류가 발생해서 검색해보니


" The location block provided results in error: nginx: [emerg] unknown directive "fast_cgi_split_path_info" in /etc/nginx/sites-enabled/default:56 Need to remove the underscore between fast and cgi: fastcgi_split_path_info ^(.+\.php)(/.+)$; "

Then comment the first case with php5-cgi alone since php5-fpm is already installed.
I came with the same problem. Hope this could help you.

.

.

...


         location ~ \.php$ {

                try_files $uri =404;

                fastcgi_split_path_info ^(.+\.php)(/.+)$;

        #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

        #

        #       # With php5-cgi alone:

        #        fastcgi_pass 127.0.0.1:9000;

        #       # With php5-fpm:

                fastcgi_pass unix:/var/run/php5-fpm.sock;

                fastcgi_index index.php;

                include fastcgi_params;

        }

php5-fpm와 cgi 가 중복된다는 뜻인것같아 주석처리후 재시작 했더니 해결



php 파일 업로드 사이즈는 기본적인  php.ini 수정하여 되었다

(http://jasontody.tistory.com/65 참고)


그런데.. 


추가적으로 해줘야 될 사항들.

(용량을 크게 늘린다던지 등..)



[ /etc/php5/fpm/php.ini ]

1. file_uploads = On
2. upload_max_filesize 10M
3. post_max_size 10M
4. max_input_time 300
5. max_execution_time 300
6. memory_limit 128M

* post_max_size > upload_max_filesize 
[ /etc/nginx/sites-available/default ]
1. client_max_body_size 100M


contact_me.php


<?php

// check if fields passed are empty

if(empty($_POST['name'])   ||

   empty($_POST['email']) ||

   empty($_POST['message']) ||

   !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))

   {

echo "No arguments Provided!";

return false;

   }

$name = $_POST['name'];

$email_address = $_POST['email'];

$message = $_POST['message'];

// create email body and send it

$to = 'jasontody@gmail.com'; // hi mate thanks for purchase guna theme, just replace your email with emailme@myprogrammingblog.com

$email_subject = "Contact form submitted by:  $name";

$email_body = "You have received a new message. \n\n".

 " Here are the details:\n \nName: $name \n ".

 "Email: $email_address\n Message \n $message";

$headers = "From: 3layerglass@contact-3layerglass.com\n";

$headers .= "Reply-To: $email_address";

mail($to,$email_subject,$email_body,$headers);

return true;

?>




했는데 메일이 가지않는문제발생


 sudo apt-get install sendmail


5
Indeed, the steps I took were 1) If sendmail isn't installed, install it: apt-get install sendmail 2) Configure hosts file correctly: nano /etc/hosts And make sure the line looks like this: 127.0.0.1 localhost localhost.localdomain yourhostnamehere 3) Run the sendmail config and answer 'Y' to everything: sendmailconfig I restarted apache for good measure: service apache2 restart After that my mail was sending instantly.




그다음


sudo sendmailconfig




## REWRITE URL ###

         rewrite ^/pricing.Aloha$ /pricing.html;

        rewrite ^/en/pricing.Aloha$ /en/pricing.html;

        rewrite ^/$ /index.html;

        rewrite ^/en/$ /en/index.html;

        rewrite ^/about.Aloha$ /about.html;

        rewrite ^/en/about.Aloha$ /en/about.html;

        rewrite ^/contact.Aloha$ /contact.html;

        rewrite ^/en/contact.Aloha$ /en/contact.html;

        rewrite ^/facility.Aloha$ /facility.html;

        rewrite ^/en/facility.Aloha$ /en/facility.html;

        rewrite ^/faq.Aloha$ /faq.html;

        rewrite ^/en/faq.Aloha$ /en/faq.html;





/etc/nginx/sites-available/default 파일 내


server{


}

안에 수정해주면됨 

서브도메인을 하기 위해 찾아보다가... 나중에 또 까먹을거같아서 대략적으로 정리

막상 찾아보니 어렵진 않다....



1. Ubuntu /etc/nginx/sites-available/default 파일 수정


$ sudo
nano /etc/nginx/sites-available/default
server{

listen 80;

listen [::]:80; #서버 기본세팅을 해주었기 때문에 (위쪽) 중복으로 ipv6, default_server와같은 세팅X


root /home/경로

index index.php index.html index.htm


#Make site accessible from http://localhost/

server_name sub.domain.com;

}



$ sudo service nginx restart


2. Creating or pointing domains/subdomains to the server's ip address.

Go to your domain register or to the DNS where your domain records are stored and point them to your server ip address (you can do this with a subdomain too). If you are trying this locally modify the "/etc/hosts" files and create a new record.

$ sudo nano /etc/hosts

And add something like.

127.0.0.1    example.com
127.0.0.1    example2.com
127.0.0.1    my.example.com



3. DigitalOcean(내가 쓰는 서버 호스팅) 에서 DNS 세팅 - CNAME 설정






참고 : http://albertogrespan.com/blog/running-multiple-domains-or-subdomains-in-nginx-with-server-blocks/

1. 서버구매


2. ID/PW 세팅.


 - 아이디 생성 및 관리자권한 부여 (http://jasontody.tistory.com/180)

 - $sudo adduser [userid]

 - $sudo visudo 

$sudo adduser [userid] $sudo visudo


/etc/sudoers 파일 내


# ...

# #User privilege specification

# root ALL=(ALL:ALL) ALL

# [userid] ALL=(ALL:ALL) ALL

저장 후

$sudo reboot

후에 로그인


3. Nginx / Php / Mysql(Mariadb) 설치(http://jasontody.tistory.com/41)

  * Ubuntu 16.04 에서는 php5가아닌 php7.0-fpm 으로 설치해야한다

$sudo apt-get install nginx

$sudo apt-get install php7.0-fpm // 설치시에 mycrypt 도 자동설치된다

$sudo apt-get install php7.0-gd php7.0-curl php7.0-mbstring // 많이쓰이는 모듈 설치

 타임존 세팅(권장사항, 이작업 하지 않을 시 시스템 타임존 설정으로 적용)

$sudo nano /etc/php/7.0/fpm/php.ini

$sudo nano /etc/php/7.0/cli/php.ini

date.timezone 값을 찾아서 주석을 제거하고 시간을 설정(출처 : https://blog.lael.be/post/2600)

k21

이 값을 찾아

k22

이렇게 변경, 저장 후 php 재시작

$sudo service php7.0-fpm restart

$sudo apt-get install mariadb-server

또는

$sudo apt-get install mariadb-server-10.1 mariadb-client-10.1

$sudo apt-get install php7.0-mysql // php5일경우 apt-get install php5-mysql 로 설치



4. Xe 다운 및 GD 라이브러리 설치

  1) git 설치(sudo apt-get install git)

$sudo apt-get install git

$git clone https://github.com/xpressengine/xe-core

 2)GD 라이브러리 설치(for Rewrite) / 링크(http://jasontody.tistory.com/41)

$sudo apt-get install php5-gd

$sudo /etc/init.d/nginx restart 또는 $sudo service nginx restart

$reboot


5. Xe Rewrite

 - http://jasontody.tistory.com/entry/Xpress-engine-nginx-rewrite-%EC%84%A4%EC%A0%95-%EC%A7%A7%EC%9D%80%EC%A3%BC%EC%86%8C-xpressengine-222222



Digital Ocean 이용중인데,  FTP 는 접속은 되나  맥에서 SSH 접속은 안되는 문제 발생


Ssh a@host 하면

connection Closed by 0.0.0.0(ip) 라는 메세지와 접속이 안됨


재부팅하니 해결은 됐으나 DigitalOcean에 해결법이 있어 메모



DigitalOcean - 계정 - Web Console 에서 해결


Log in to your droplet via the console and run these commands:
ssh-keygen -t dsa -N "" -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -N "" -f /etc/ssh/ssh_host_ecdsa_key
if that doesn't work (i.e. you still can't type /), try running this command instead:
dpkg-reconfigure openssh-server


출처 : https://www.digitalocean.com/community/questions/ssh_exchange_identification-connection-closed-by-remote-host



+ Recent posts