기본 콘텐츠로 건너뛰기

Nginx + PHP + MySQL 개발 및 배포 환경 구축 (3)

Windows 10(64bit) 환경에 nginx 설치하기


대중적인 웹개발 환경의 대표적인 조합이라면 APM(Apache + PHP + MySQL) 조합을 빼놓을 수 없다. 고유명사화 되다시피 한 조합이지만 최근 몇 년사이 웹서버로 Apache HTTPd 대신 nginx를 조합하는 경우가 많아졌다. Apache 웹서버에 비해 설정이 간단하고 가벼워서 같은 자원으로 더욱 강력한 성능을 낼 수 있다. 구글링해보면 Apache 웹서버와 nginx 웹서버의 성능 비교 이슈에 대한 기사는 최근에도 지속적으로 다뤄지고 있다.

1. nginx 설치

nginx는 2가지 배포버전으로 개발이 진행된다. 짝수 버전 (1.14)은 안정버전으로 보수적으로 관리되며 중요한 문제 또는 보안 취약점을 수정해야하는 경우에만 업데이트된다. 홀수 버전 (1.15)은 메인 라인 브랜치이다. 좀 더 공격적인 개발이 진행되며 약 4-6 주에 한 번씩 만들어져서 정기적으로 새로운 기능과 향상된 기능을 도입한다.


nginx 환경에 익숙해지는 것이 우선이므로 안정버전인 1.14버전을 내려받아 설치하겠다.

내려받기 nginx/Windows-1.14.0

MySQL 서버와 마찬가지로 D:\Utils 폴더에 압축을 푼다.

D:\Utils\nginx-1.14.0 >

2. nginx 설정 구성하기

2.1. 정적 건텐츠 서비스
로컬 디렉터리에서 HTML 페이지와 이미지 파일들과 같은 정적 컨텐츠를 제공하기 위한 설정이다. 설정 파일(/conf/nginx.conf)의 server 블럭 안에 location 블럭을 배치하여 정적 컨텐츠를 읽어올 디렉터리를 설정한다.

worker_process 1; # CPU 코어 수에 맞춰 싱글 쓰레드로 동작. 멀티코어 CPU의 경우 1이상 설정 가능. 쓰레드당 최대 1024개의 동시 연결 처리 가능.

...

http {

  server {
    listen 8001; # 웹서비스 포트
    server_name localhost; # %WINDIR%\system32\drivers\etc\hosts

    ...

    location / {
      root D:/devphp/hello; # HTML과 같은 정정 컨텐츠 저장 디렉터리
      index index.html index.htm; # 기본 웹문서 파일
    }

    location /images {
      root D:/assets/images; # 이미지 파일을 별도 디렉터리에 배치하는 것도 가능하다.
    }

    ...

  }

}

...


3. nginx 시작 및 관리하기

참고. nginx for Windows
명령프롬프트를 실행할 때 80번 포트와 같이 well-known port를 이용할 경우 관리자 권한으로 실행한다. 8001번 포트처럼 커스텀 포트 이용할 경우는 일반 권한으로 nginx를 실행해도 무방하다. nginx.exe를 실행 후 다른 명령프롬프트 창을 열어 명령행 옵션 -s와 함께 제어명령을 입력한다.

D:\Utils\nginx-1.14.0 > nginx

D:\Utils\nginx-1.14.0 > nginx -s quit # 정상 종료 실행 (권장)

D:\Utils\nginx-1.14.0 > nginx -s stop # 긴급 종료 실행

D:\Utils\nginx-1.14.0 > nginx -s reload # 실행 중 설정 파일 변경시 종료없이 변경된 설정을 적용

D:\Utils\nginx-1.14.0 > nginx -s reopen # 로그 파일 다시 열기

D:\Utils\nginx-1.14.0 > tasklist /fi "imagename eq nignx.exe" # 실행 중인 nginx 프로세스를 표시

웹 브라우저로 웹페이지를 확인 http://localhost

댓글

이 블로그의 인기 게시물

ESP8266 마이크로컨트롤러에서 UART0과 UART2 동시 사용하기

ESP-12F와 2개의 FTDI를 UART0과 UART2에 연결 ESP8266은 3개의 UART 포트를 제공한다. UART0과 UART2는 같은 Serial 클래스에서 관리하므로 동시 사용이 불가능하므로 교대로 사용해야 한다. UART1은 Serial1 클래스에서 관리하므로 동시 사용이 가능하지만 출력 전용이기 때문에 TX만 정의되어 있다. UART0 UART1 UART2 RX GPIO3(RX) - GPIO13 TX GPIO1(TX) GPIO2 GPIO15 아두이노 클래스 Serial Serial1 Serial 비고 UART2와 동일한 클래스를 통해 관리됨 메시지 수신을 위한 RX는 정의되어 있지 않음 UART0와 동일한 클래스를 통해 관리됨 UART0과 UART2는 동시 사용이 불가능하므로 한 번에 하나의 포트만 사용하도록 Serial 클래스의 swap() 멤버함수를 사용한다. NodeMCU와 USB-UART 연결 NodeMCU는 ESP-12E 개발보드가 사용되었으며, micro-USB 포트를 제공한다. micro-USB 포트는 UART0 포트를 사용하며, RX(GPIO3)와 TX(GPIO1) 핀을 공유한다. USB-UART 연결 장치를 UART2 포트에 연결하기 위해 D7(GPIO13)과 D8(GPIO15) 핀에 연결했다. NodeMCU는 UART0 포트를 이용하여 Ardino의 시리얼 모니터로 출력을 보내며, UART2 포트의 출력은 별도의 터미널프로그램으로 접속하여 출력을 모니터했다.

NodeMCU에서 I2C 통신을 이용하여 OLED 디스플레이에 표시하기

준비물: NodeMCU 개발보드 1개, OLED SSD1306 디스플레이 1개, micro-USB 케이블 1개, 브레스보드 그림 1. 준비물 개발환경 아두이노 스케치 1.8.9 Wire 라이브러리 https://www.arduino.cc/en/reference/wire ESP8266 OLED SSD1306 라이브러리    https://github.com/ThingPulse/esp8266-oled-ssd1306 I2C란 I2C 버스는 80년대 초반에 저속의 부품들을 연결하기 위한 목적으로 필립스에서 개발한 직렬버스이다. "Inter IC"라고도 하며, IIC, I2C 버스라고도 한다. I2C 통신은 다음과 같은 특징들을 갖는다. SDA, SCL 등 2개의 통신선만 사용하므로 구성이 간단하다. 마스터-슬레이브 관계로 연결하여 1:n 연결이 가능하다. 슬레이브는 고유의 주소로 구분한다. 통신 최대속도는 100Kbit/s이며, Fast mode(400Kbit/s), High speed mode(3.4Mbit/s)도 지원한다. 실습내용 아두이노의 경우 디폴트로 SDA와 SCL을 위해 GPIO4 핀과 GPIO5 핀이 지정되어 있지만, ESP8266의 경우 소프트웨어적인 방식으로 구현되어 있기 때문에 임의의 핀을 이용할 수 있다. 여기서는 D1(GPIO5), D2(GPIO4)핀을 SCL과 SDA로 지정했다. ESP8266은 마스터로 동작하며 OLED 디스플레이는 슬레이브로 동작한다. Wire 라이브러리 ESP8266(마스터)에서 OLED 디스플레이(슬레이브)로의 데이터 전송은 먼저 버퍼를 준비하고, 버퍼에 데이터를 기록한 후 버퍼의 내용을 전달하는 3단계로 진행된다. 멤버 함수들을 사용하기 위해 우선 헤더 파일을 추가한다. #include <Wire.h> 초기화 void begin(int sda, int scl) sda: SDA(Serial data) 핀 번호 scl: SCL(Serial clock) 핀 번호 데이터...

자작 :: 아두이노 온습도계

사용부품: Arduino UNO 호환보드, DH-22 온습도 센서, 캐릭터 LCD(16x2글자), Potentionmeter 아두이노 온습도계 AM2302 DH-22 온습도센서는 다음과 같이 3개의 핀을 사용한다. Pin 1. Vcc (전원 3.3~ 5.5V) Pin 2. GND (접지) Pin 3. DOUT (데이터 송신, SDA핀 연결) 온습도 센서의 데이터 수신을 위해 DOUT 핀은 아두이노의 D2 핀에 연결했고, 전원과 DOUT을 10㏀ 풀업 저항을 달아 연결했다. 부품 구성도 LCD는 웹사이트의 카달로그로 보기에는 백색 LED 백라이트가 멋있게 보여 구매를 했는데, 가독성면에서는 옐로우-그린 LED가 더 나을 것 같기도 하다. 아두이도는 기본적으로 LCD의 D4 ~ D7까지의 핀으로 4bit 통신을 한다. D2 핀은 밝기 조절을 위해 가변저항의 가운데 핀과 연결했다. 백라이트 전원은 220Ω 저항을 달았다. 온습도 정보를 수집하여 LCD에 출력하기 위한 아두이노 소스는 다음과 같다. 소스코드:  https://github.com/Jeongsam/arduino-DH22-LCD1602 #include <adafruit_sensor.h=""> #include <liquidcrystal.h=""> #include <dht.h=""> #include <dht_u.h=""> /** * 현재 온습도를 디스플레이하기 * DHT22(AMS2302)로부터 데이터를 받아 LCD16x2 디스플레이에 표시 */ // 온습도 센서 설정 #define DHTPIN 2 // 온습도 데이터 연결 핀 번호 #define DHTTYPE DHT22 // AMS2302 DHT_Unified dht(DHTPIN, DHTTYPE); uint32_t d...