- μνμΉμ λλΆμ΄ κ°μ₯ λ§μ΄ μ°μ΄λ μΉ μλ² μ΄λ€.
- μνμΉμ λ€λ₯΄κ² μμ²μ μλ΅ν λ Event Driven λ°©μμΌλ‘ λμνκΈ° λλ¬Έμ μ μ μμ μ€λ λλ‘λ ν¨μ¨μ μΈ μ²λ¦¬κ° κ°λ₯νλ€κ³ νλ€.
- μ€λ λλ₯Ό λ§μ΄ μ¬μ©νμ§ μκΈ° λλ¬Έμ context switching λΉμ©μ΄ μ κ³ CPU μλͺ¨μ μ΄μ§ μλ€.
- μ£Όλ‘ μ μ νμΌμ μλΉμ€νλλ° μ°μ΄κ³ 리λ²μ€ νλ‘μλ‘μ¨μ μν λ μνν μ μλ€.
forward proxy
λclient
λ₯Όserver
λ‘ λΆν° μ¨κ²¨μ£Όλ μν μ νλ€. μ¨κ²¨μ£Όλκ² λ³Έμ°μ μν μ μλκ² κ°μ§λ§.. client λ₯Ό νλ° λͺ¨μμ μμ²μ μ²λ¦¬ν΄μ£Όλ λλμ΄λ€.reverse proxy
λ λ€λ₯Έ μλ²μ μ 보λ₯Ό νλ‘μλ₯Ό ν΅ν΄ λ°μμ€λ λΆλ₯μ νλ‘μλ₯Ό λ§νλ©°,Client
κ° μμ²νλEnd point
λ μ€μ μλ² μ£Όμκ° μλreverse proxy
μ μ£Όμλ₯Ό κ°λ¦¬ν€κ² λκ³ μλ²μ λ¬Έμ§κΈ° κ°μ λλμΌλ‘ μ‘΄μ¬νλ€.- μ΄λ₯Ό ν΅ν΄ load balancing μ΄λ μΊμ±, 보μμμ μ΄μ λ‘ (μλ² λ ΈμΆ νμ§ μμ) μ¬μ©λ μ μλ€.
- λ°μ κ·Έλ¦Όμ 보면 μΈν°λ·μ μμ μλ λ€μ μλμ λ°λΌ μ½κ² ꡬλΆν μ μλ€.
KakioTalk μ μλ Client λ github pages
λ‘ , μλ²λ google cloud build
λ‘ μλλ°°ν¬κ° λκ°κ³ μμλ€. νμ§λ§ κΈ°μ μ μΈ μ¬λ¬ λ¬Έμ λ‘.. google cloud build
λ λμ΄λ΄κ³ μλλ°°ν¬λ‘ κ°κΈ°λ‘ κ²°μ .
κ·Έλμ pm2
λ‘ μλ²μμ λμλ΄€λλ Mixed Content
μλ¬κ° λ¨λ©΄μ μλ²λ‘ λΆν° λ°μ΄ν°λ₯Ό λ°μμ¬ μ μμλ€. 보μμμ μ΄μ λ‘ https
μμ http
μ μμ²μ κΈμ§νκ³ μμ΄μ μλ²λ https
ν΅μ μ λ§λ€μ΄ μ€μΌνλ€.
μΌλ¨ domain
μ΄ νμ, κ°λΉμμμ 1500 μ μ§λ¦¬ kakio.site
ꡬ맀 ν server ip μ°κ²°.
https
λ₯Ό μν΄μλ μΌλ¨ μΈμ¦μκ° νμνλ° λμ΄ μμΌλ μΌλ¨ λ¬΄λ£ μλΉμ€μΈ lets encrypt
λ₯Ό μ΄μ©νλ€.
볡μ‘ν΄ λ³΄μ΄μ§λ§ μ΄λ―Έ certbot
μ΄λΌλ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ€ λ§λ€μ΄ λμ μ€νλ§ ν΄μ£Όλ©΄ λλ€. - μ°Έμ‘°
1λ λ§λ€ μλμΌλ‘ κ°±μ κΉμ§ ν΄μ€λ€κ³ νλ€.
KakioTalk
μ κΈ°λ³Έμ μΌλ‘ νλμ μλ²λ§ ꡬλνλ€. νμ§λ§ μν μ 보면 λκ°λ‘ λλ μ μλλ° api server
μ socket server
μ΄λ€. λ§€μ° λ°μ μλΉμ€μ κ²½μ°λ κ°κ° λΆλ¦¬νλ κ² κ°μλ° μ°λ¦¬μλΉμ€λ μ¬μ€ μ΄μ©μκ° μλ€κ³ λ΄λ 무방νκΈ° λλ¬Έμ νλμ node μλ²λ§ μ¬μ©νλλ‘ νλ€.
κ°μΈ PC μμ μμ
ν λλ localhost λ‘ μμ²μ 보λ΄λ©΄ μμμ λ°μμ£Όμ§λ§ μλ²λ‘ λ°°ν¬λ₯Ό νμ λλ Nginx
λ₯Ό νκ³ λ€μ΄κ°κΈ° λλ¬Έμ Nginx
κ° Reverse Proxy
μ μν μ μνν΄μ socket
μμ²μΈ κ²κ³Ό μλκ² (api μμ²) μ λΆλ¦¬ν΄μ€λ€. μ¬μ€ μ΄λ°κ²λ reverse proxy
λΌκ³ λΆλ₯΄λμ§λ λͺ¨λ₯΄κ² λ€. μ΄μ¨λ connection
μ λΆλ¦¬ν΄μ£ΌλκΉ reverse proxy
λΌκ³ μκ°νκΈ°λ‘ νλ€.
λ³΄ν΅ domain λ³λ‘ μ€μ νμΌμ /sites-available
μ νλμ© λ§λ€μ΄μ κ΄λ¦¬νλ€κ³ νλ€.
λ°μ κ° μ€μ λ€μ μ£Όμ 리 μ£Όμ 리 μ¨λ¨μ§λ§ μ λͺ¨λ₯Έλ€. λ΄κ° μκ°νκΈ°μ μ€μν λΆλΆμ λ°μ μλκ² λ€μ. λΆλλ½μ§λ§ λκ° μ΄λ€ μλ―ΈμΈμ§ μλͺ¨λ¦.. κ²μν΄λ μ μλμ€μ§λ§ μΌλ¨ λμνλ€. λμ€μ μμλ³΄κ³ μ£Όμ ν΄λμΌμ§
# /sites-avaliable/kakio.site
server{
server_name kakio.site www.kakio.site;
# @#$@#4.io μλ λͺ¨λ μμ²μ μ¬κΈ°μ μ²λ¦¬
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://localhost:3050/; // api server μ£Όμ
}
# !@#.io λ‘ λλλ μμ²μ μ¬κΈ°μ μ²λ¦¬
location ~* \.io {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy false;
proxy_pass http://localhost:3050; // socket server μ£Όμ
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
- κΈ°λ³Έ μ€μ νμΌ κ²½λ‘λ
/etc/nginx/nginx/conf
μ μμΉνκ³ μ μ μ€μ νμΌμ΄λΌκ³ μκ°νλ©΄ λλ€.
# μ΄ μ€μ μ worker processκ° rootκΆνμΌλ‘ μ€νλκ² νλ€. νμΌ μμ€ν
μ λͺ¨λ κΆνμ μ»κ²λλ―λ‘ λ³΄μμ μννλ€.
user root;
# μ컀 νλ‘μΈμ€λ CPU core μμ λ°λΌ μ€μ ν΄μΌνλ€. nginxλ κ·Έ μ΄μμ μ΄λμ μ£Όμ§λ μλλ€.
# κΈ°λ³Έκ°μ 1μ΄μ§λ§ CPUκ° 2κ°μ΄μμ μ½μ΄λ₯Ό κ°λλ€λ©΄ μ΄ κ°μ μ¦κ°μν€λλ‘ κΆμ₯νλ€.
# auto - μλμ μΌλ‘ κ³μ°νλ€.
worker_processes auto;
pid /run/nginx.pid;
# μ°κ²° μ²λ¦¬μ μν₯μμ£Όλ μ§μλ¬Έμ΄ μ§μ λλ κ΅¬μ± νμΌ μ»¨ν
μ€νΈλ₯Ό μ 곡νλ€.
events {
# μ컀 νλκ° λͺλͺ
μ μ μ κ° μλΉμ€λ₯Ό ν μ§ κ²°μ νλ€.
# max clients = worker_connections * worker_processes
# max clients λ μμ€ν
μμ μ°κ²°κ°λ₯ν μμΌ κ°μμ λ°λΌ μ ννλ€. (~64k)
worker_connections 1024;
# multi_accept on;
# ν
μ€ν
νκ²½μ μν΄ κ° μ€λ λλ§λ€ λ§μ ν΄λΌμ΄μΈνΈλ₯Ό μλΉμ€νλλ‘ μ΅μ ννλ€.
# use epoll;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# Nginxμ λ²μ μ μ¨κΈΈκ²μΈκ°μ λν μ΅μ
μ΄λ€. 보μμ μ£Όμμ μ κ±°νμ¬ μ€μ νλ κ²μ΄ μ’λ€.
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
# include λ μ΄λ¦ κ·Έλλ‘ νΉμ νμΌμ ν¬ν¨μν€λ μν μ νλ€.
# include μ§μμ΄κ° μλ μμΉμ ν΄λΉ νμΌμ λ΄μ©μ μ½μ
νλ€.
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
# μ°Έμ‘° 1μ λ°λ₯΄λ©΄ HDDμ λν I/O μ±λ₯μ λμ΄κΈ° μν΄ off ν μλ μλ€.
# ex) off;
access_log /var/log/nginx/access.log;
# μλ¬ λ‘κ·Έ νμΌμ μ μ₯ν μμΉ
# μ°Έμ‘° 1μ λ°λ₯΄λ©΄ λμ crit μ΅μ
μ μ£Όμ΄μ μ±λ₯μ λμΌ μ μλ€κ³ νλ€.
# ex) error_log /var/log/nginx/error.log crit;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# μλ΅μ΄ μλ clientμμ μ°κ²°μ λλ κ²μ νμ©ν¨μΌλ‘μ¨ μ΄λ₯Όν΅ν΄ λ©λͺ¨λ¦¬λ₯Ό λΉμΈ μ μλ€.
reset_timedout_connection on;
# request timed out -- default 60
# μ°Έμ‘° 1μ μνλ©΄ 10
client_body_timeout 60;
# μλ²λ μ΄ μκ°νμ 컀λ₯μ
μ μ’
λ£ν¨ -- κΈ°λ³Έκ° 75
keepalive_timeout 30;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
http λΈλ‘μ μ΄νμ μκ°ν server, locationμ λ£¨νΈ λΈλ‘μ΄λΌκ³ ν μ μκ³ , μ¬κΈ°μ μ€μ λ κ°μ νμ λΈλ‘λ€μ μμνλ€. http λΈλ‘μ μ¬λ¬κ°λ₯Ό μ¬μ©ν μ μμ§λ§ κ΄λ¦¬μμ μ΄μλ‘ νλ²λ§ μ¬μ©νλ κ²μ κΆμ₯νλ€.
http, server, location λΈλ‘μ κ³μΈ΅κ΅¬μ‘°λ₯Ό κ°μ§κ³ μλ€. λ§μ μ§μμ΄κ° κ°κ°μ λΈλ‘μμ λμμ μ¬μ©ν μ μλλ°, httpμ λ΄μ©μ serverμ κΈ°λ³Έκ°μ΄ λκ³ , serverμ μ§μμ΄λ locationμ κΈ°λ³Έκ°μ΄ λλ€. κ·Έλ¦¬κ³ νμμ λΈλ‘μμ μ μΈλ μ§μμ΄λ μμμ μ μΈμ 무μνκ³ μ μ©λλ€.
server λΈλ‘μ νλμ μΉμ¬μ΄νΈλ₯Ό μ μΈνλλ° μ¬μ©λλ€. κ°μ νΈμ€ν (Virtual Host)μ κ°λ μ΄λ€. μλ₯Όλ€μ΄ νλμ μλ²λ‘ http://opentutorials.org κ³Ό http://egoing.net μ λμμ μ΄μνκ³ μΆμ κ²½μ° μ¬μ©ν μ μλ λ°©λ²μ΄λ€. κ°μ νΈμ€ν μ λν μμΈν λ΄μ©μ κ°μ νΈμ€ν μμ μ μ°Έκ³ νμ.
location λΈλ‘μ server λΈλ‘ μμ λ±μ₯νλ©΄μ νΉμ URLμ μ²λ¦¬νλ λ°©λ²μ μ μνλ€. μ΄λ₯Όν λ©΄ http://opentutorials.org/course/1 κ³Ό http://opentutorials.org/module/1 λ‘ μ κ·Όνλ μμ²μ λ€λ₯΄κ² μ²λ¦¬νκ³ μΆμ λ μ¬μ©νλ€.
μ΄λ²€νΈ λΈλ‘μ μ£Όλ‘ λ€νΈμν¬μ λμλ°©λ²κ³Ό κ΄λ ¨λ μ€μ κ°μ κ°μ§λ€. μ΄λ²€νΈ λΈλ‘μ μ§μμ΄λ€μ μ΄λ²€νΈ λΈλ‘μμλ§ μ¬μ©ν μ μκ³ , http, server, locationμλ μμκ΄κ³λ₯Ό κ°μ§ μλλ€. μ΄λ²€νΈ λͺ¨λ μ§μμ΄μ λν μ€λͺ μ μ΄λ²€νΈ λͺ¨λ μ§μμ΄ μ¬μ μ μ°Έκ³ νλ€.
ubuntu 18.04.4 LTS κΈ°μ€μ΄λ€.
- μ¬μμ
systemctl restart nginx
- config ν μ€νΈ μ λλ‘ μ€μ λμλμ§ νμΈν΄ λ³Ό μ μλ€. (λ¬Έλ² κ²μ¬)
nginx -t
/etc/init.d/nginx configtest
- symbolic link μμ±
μκ·Έλ°μ§ λͺ¨λ₯΄κ² μ§λ§ sites-available
μμ μμ±νκ³ symbolic link λ₯Ό sites-enabled
ν΄λμ μμ±ν΄μ μ€μ μ μ°κ²°νλ€.
ln -s /etc/nginx/sites-available/kakio.site /etc/nginx/sites-enabled
- λ‘κ·Έ
# Nginxμ μ€λ₯ λ‘κ·Έ μ€μκ° νμΈ
tail -f /var/log/nginx/error.log
# Nginxμ μλ² μ κ·Ό κΈ°λ‘ μ€μκ° λͺ¨λν°λ§
tail -f /var/log/nginx/access.log
- μ§μμ΄ κ°μΌλ‘ μ¬μ©λλ λ¬Έμμ΄μ μΈκ°μ§ ννλ‘ λνλλλ°, μ°μ λ°μ΄νλ₯Ό μ¬μ©νμ§ μκ³ λ¬Έμμ΄μ λνλΌ μ μλ€.
root /home/example.com/www;
- νμ§λ§, 곡백 λ¬Έμ(""), μΈλ―Έμ½λ‘ (;), μ€κ΄νΈ({}) κ°μ νΉμ λ¬Έμλ₯Ό μ¬μ©νλ €λ©΄ μμ λ°μ΄νλ ν°λ°μ΄ν μμ μ§μμ΄ κ°μ λ£μ΄μΌ νλ€.
root '/home/example.com/my web pages';
κ°μ₯ μμΈν λ‘κ·Έ λ 벨λΆν° μ°¨λ‘λ‘ debug, info, notice, warn, error, critκ° λ©λλ€. μ ν리μΌμ΄μ , HTTP μλ², κ°μ νΈμ€νΈ, κ°μ νΈμ€νΈ λλ ν 리 κ°κ°μ λν΄ λ€λ₯Έ λ λ²¨λ‘ μλ¬ λ‘κ·Έλ₯Ό μ€μ ν μ μλ€.
λ‘κ·Έ μΆλ ₯ λ°©ν₯μ /dev/nullλ‘ μ ννλ©΄ μλ¬ λ‘κ·Έλ₯Ό ν΄μ νλ κ²κ³Ό κ°μ ν¨κ³Όλ₯Ό μ»μ μ μμ΅λλ€. νκ²½ μ€μ νμΌμ λ£¨νΈ λΆλΆμ λ€μμ μ§μμ΄λ₯Ό μ¬μ©νλ€.
error_log {file_path} {level}
# ex) error_log /var/log/nginx/access.log;
# ex) error_log /var/log/nginx/access.log crit;
# ex) error_log /dev/null crit; # μλ¬ λ‘κ·Έ ν΄μ
- NGINX Tuning For Best Performance
- Nginx κΈ°λ³Έ νκ²½ μ€μ
- κ°μ νΈμ€νΈ
- symbolic link
- μ€ν νν 리μΌμ€
- Naver D2
- Google Web - Mixed content
- lets encrypt
- https://velog.io/@pinot/Ubuntu-18.04%EC%97%90%EC%84%9C-Lets-Encrypt%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-Nginx%EC%97%90-SSL%EC%9D%84-%EC%A0%81%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95
- https://victorydntmd.tistory.com/231