
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/nginxconf: 설정파일html: 기본 document_rootlogs: 로그 파일sbin: nginx 실행 파일$ sudo /usr/loca/nginx/sbin/nginxnginx.conf: 메인 설정 파일fcgi.conf: FastCGI 환경 설정 파일sites-enabled: 활성화된 사이트들의 설정 파일들이 위치sites-available: 비활성화된 사이트들의 설정 파일들이 위치nginx.confworker_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 foundPHP-FPM이 실행할 파일을 지정할 때 사용하는 변수가 SCRIPT_FILENAME인데, 이 값을 잘못 전달되어 PHP_FPM이 실행할 파일을 찾지 못하고 있다.PHP-FPM이 설치된 머신에서, tcpdump로 9000 port로 들어오는 패킷을 감청해서 CGI 환경 변수가 잘 전달되고 있는지 확인한다.$ tcpdump port 9000 -A | strings
SCRIPT_FILENAME이기 때문에 이 값을 파악해 보는 것이 중요하다.
SCRIPT_FILENAME: /usr/share/nginx/html/에서 찾고 있다. 만약 여기서 파일이 위치해 있지 않다면, 위치를 수정한다.