바퀴달린 개발자 스터디 2주차!
1주차에는 웹서비스 아키텍처에 대해서 공부해보았고 이제 하나하나 깊게 들어가고자 한다.
그래서 이번 주제는 웹 서버 nginx에 대해 알아보고 nginx 설정을 통해서 웹서버가 어떤 기능을 할 수 있는지 알아보고자 한다.
💡 Event-Driven Programming
비동기 프로그래밍
💡 MultiProcessing Module
💡 리버스 프록시(Reverse Proxy)
클라이언트는 가짜 서버에 request하면 프록시 서버(nginx)가 리버스 서버(응용프로그램 서버)로부터 데이터를 가져온다.
brew install nginx
brew services start nginx
아래 두 개를 눈여겨 보자
NGINX 설정 파일 공식 문서
https://www.nginx.com/resources/wiki/start/topics/examples/full/#nginx-conf
sudo vi nginx.conf
user nginx;
worker_processes 2;
worker_priority 0;
# 로그레벨 [ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log error;
pid /var/run/nginx.pid;
events {
}
http {
server {
location {
}
}
}
💡 가상 호스트
하나의 서버에서 여러 개의 사이트를 띄우는 방법
http {
server {
listen 80;
server_name example.com www.example.com
location / {
root html;
index index.html
}
}
server {
listen 443;
server_name example.com www.example.com
location / {
root html;
index index2.html;
}
}
server {
listen 8080;
server_name localhost;
error_page 404 /404.html;
}
}
example.com:80 으로 요청이 들어왔으면 index.html 페이지를 보여주고
example.com:443 으로 요청이 들어왔으면 index2.html 페이지를 보여준다.
server {
listen 443; (1.15 버젼 부터는 listen 443 ssl; 형식으로 변경됨)
ssl on; (1.15 버젼 부터는 옵션 지원 종료)
server_name www.sslcert.co.kr; (지정한 서버인증서에 포함(지원)된 도메인)
ssl_certificate_key /파일경로/sslcert.co.kr_xxxxx.key.pem; (개인키 파일 지정)
ssl_certificate /파일경로/sslcert.co.kr_xxxxx.ca-bundle.pem; (서버인증서+체인+루트 통합 unified 파일 지정)
ssl_protocols TLSv1.2; (서버 환경에 따라 선택적 적용)
location /
root path
}
}
https://www.sslcert.co.kr/guides/NGINX-SSL-Certificate-Install
server {
location / {
root /html;
index index.html
}
location /test {
root /html;
index test.html
}
location ~ \/(gif|jpg|pnt) {
root /data/images;
}
}
{
server {
location / {
proxy_pass http://localhost:8081;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format test '[$time_local] - $remote_addr | '
'$http_x_forwarded_for - "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"'; # 필요에따라 수정해서 사용
access_log logs/access.log main;
access_log logs/access_test.log test;
error_log logs/error.log crit;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
server_tokens off;
#gzip on;
}
// access_test.log
[21/Feb/2021:02:54:45 +0000] - *.*.*.* | *.*.*.* - "GET / HTTP/1.1" 200 6180 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"
events {
worker_connections 1024;
# multi_accept on;
}
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid
user
지시어는 워커 프로세스의 권한을 지정한다.sudo service nginx reload
참고
https://velog.io/@davelee/mac에-nginx-설치하기
https://whatisthenext.tistory.com/123
https://prohannah.tistory.com/136
다음 시간엔..
- 고성능 nginx를 위한 튜닝
- was 설정
감사합니다.