nginx
: Web Server, HTTP Server/usr/share/nginx/html/
/etc/nginx/
/var/log/nginx/
$ ps aux | grep nginx
80
, 443
포트의 소켓과의 통신을 담당한다.www-data
를 사용한다.www-data
를 만드는 법은 아래와 같다.$ useradd --shell /usr/sbin/nologin www-data
--shell
은 로그인 할 수 없는 유저라는 뜻이다.$ wget https://nginx.org/download/nginx-1.20.2.tar.gz
$ tar -zxvf ./nginx-1.20.2.tar.gz -C ./
$ wget https://ftp.exim.org/pub/pcre/pcre2-10.37.tar.gz
$ tar -zxvf ./pcre2-10.37.tar.gz
$ cd ./pcre2-10.37.tar.gz
$ mkdir build
$ cd build && cmake ..
(pcre2-10.37.tar.gz/build) $ make
(pcre2-10.37.tar.gz/build) $ sudo make install
HttpSslModule
을 사용하기 위해서는 openssl이 필요하다.$ wget https://www.openssl.org/source/openssl-3.0.2.tar.gz
$ tar -zxvf ./openssl-3.0.2.tar.gz
$ cd openssl-3.0.2
$ ./Configure
$ make
$ sudo make install
$ wget https://zlib.net/zlib-1.2.11.tar.gz
$ unzip ./zlib-1.2.11.tar.gz
$ sudo ./configure --with-zlib=../zlib-<아까 받은 버전> \
--with-openssl=../openssl-<아까 받은 버전> --with-http_ssl_module --with-debug \
--add-module=../echo-nginx-module-0.45 \
--prefix=/usr/local/nginx \
--user=www-data \
--group=www-data
option | description |
---|---|
--with-(zlib |pcre | openssl) | NGINX가 의존하고 있는 라이브러리들의 소스 경로 |
--with-(http_ssl_module | debug) | NGINX를 설치할 때 ssl, debug 모듈을 활성화한다. 이 모듈들은 NGINX가 제공하는 내부 모듈이지만 기본적으로는 설치가 되지 않는 옵션사항이다. |
--add-module | 외부 모듈인 echo 모듈의 소스가 위치하는 디렉토리 |
--prefix | NGINX가 설치될 기본 디렉토리를 의미한다. 이 디렉토리 하위에 NGINX의 실행, 로깅, 설정 파일들이 설치된다. 각각의 항목을 바꿀 수도 있다. 메뉴얼을 참고하자. |
--user, --gourp | www-data 사용자의 권한으로 NGXIN를 실행시킨다. www-data 사용자가 없다면 만들어야 한다. 사용자의 리스트는 아래의 명령을 통해서 알 수 있다. www-data 가 아니라 자기 자신의 계정을 사용해도 된다. |
$ make
$ sudo make install
/usr/local/nginx
conf
: 설정파일html
: 기본 document_rootlogs
: 로그 파일sbin
: nginx 실행 파일$ sudo /usr/loca/nginx/sbin/nginx
nginx.conf
: 메인 설정 파일fcgi.conf
: FastCGI 환경 설정 파일sites-enabled
: 활성화된 사이트들의 설정 파일들이 위치sites-available
: 비활성화된 사이트들의 설정 파일들이 위치nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
server {
listen 80;
location / {
root html;
index index.html index.htm;
}
}
}
work_process
같은 지시자 설정 파일 최상단에 위치하면서 nginx의 기본적인 동작 방식을 정의한다. 여기서 사용되는 지시어들은 다른 곳에서 사용되지 않는다.server
, location
의 루트 블록. 여기서 설정된 값을 하위 블록들은 상속한다.http
, server
, location
블록은 계층구조를 가지고 있다.http
의 내용은 server
의 기본값이 되고, server
의 지시어는 location
의 기본 값이된다. 그리고 하위의 블록에서 선언된 지시어는 상위의 선언을 무시하고 적용된다.server
블록: server
블록은 하나의 웹사이트를 선언하는데 사용된다. 가상 호스팅의 개념이다. 예를 들어, 하나의 서버로 http://opentutorials.org 과 http://egoing.net 을 동시에 운영하고 싶은 경우 사용할 수 있는 방법이다. 가상 호스팅에 대한 자세한 내용은 가상 호스팅 때 참고location
블록: server 블록 안에 등장하면서 특정 URL을 처리하는 방법을 정의한다.events
블록: 이벤트 블록은 주로 네트워크의 동작방법과 관련된 설정값을 가진다. 이벤트 블록의 지시어들은 이벤트 블록에서만 사용할 수 있고, http
, server
, location
과는 상속관계를 갖지 않는다. 이벤트 모듈 지시어에 대한 설명은 이벤트 모듈 지시어 사전을 참고한다.$ sudo systemctl reload nginx
File not found
PHP-FPM
이 실행할 파일을 지정할 때 사용하는 변수가 SCRIPT_FILENAME
인데, 이 값을 잘못 전달되어 PHP_FPM
이 실행할 파일을 찾지 못하고 있다.PHP-FPM
이 설치된 머신에서, tcpdump
로 9000
port로 들어오는 패킷을 감청해서 CGI 환경 변수가 잘 전달되고 있는지 확인한다.$ tcpdump port 9000 -A | strings
SCRIPT_FILENAME
이기 때문에 이 값을 파악해 보는 것이 중요하다.SCRIPT_FILENAME
: /usr/share/nginx/html/
에서 찾고 있다. 만약 여기서 파일이 위치해 있지 않다면, 위치를 수정한다.