forked from TEAM-2NE1/steach-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnginx.conf
More file actions
142 lines (123 loc) · 7.39 KB
/
nginx.conf
File metadata and controls
142 lines (123 loc) · 7.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# 현재 https에는 옮겨서 잘 되게 하는 방법.
# 서버는 잘되는지 알 수 없음.
events { }
http {
# Nginx 설정 파일에 resolver 지시어를 추가하여 Docker의 내장 DNS를 사용하도록 설정할 수 있습니다.
# 이렇게 하면 Nginx가 주기적으로 DNS를 재조회하게 되어, 나중에 steach-server와 holy-jenkins가 연결될 때 해당 호스트를 찾을 수 있게 됩니다.
resolver 127.0.0.11 valid=30s; # Docker의 내장 DNS 사용
# 이 설정은 특정 클라이언트 IP에 대한 요청 속도를 제한하기 위한 것입니다.
# $binary_remote_addr: 클라이언트의 IP 주소를 이진 형태로 표현한 변수입니다.
# 클라이언트의 IP 주소를 기반으로 요청 속도를 제한합니다.
# zone=api_limit:10m: "api_limit"이라는 이름의 10MB 크기의 메모리 영역을 정의합니다.
# 이 메모리 영역은 클라이언트 IP 주소별로 요청 속도 제한에 대한 정보를 저장합니다.
# rate=1r/s: "rate"는 허용되는 요청 속도를 정의합니다.
# 여기서는 1초에 1개의 요청(r: requests)만 허용되도록 설정합니다.
# 즉, 동일한 클라이언트 IP 주소에서 1초에 하나 이상의 요청이 들어올 경우,
# 제한에 걸려 429 (Too Many Requests) 상태 코드가 반환됩니다.
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=50r/s;
# Specific rate limit for /api/v1/(lectures/final/|check/server)
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=1r/s;
server {
listen 80; # Nginx가 요청을 받을 포트 설정
# 아래 server_name이 없는 경우
# 이 경우, Nginx는 기본 서버 블록으로 간주하고 모든 요청을 처리합니다.
# 특정 도메인에 대해 동작을 제어하기 어렵습니다.
# 이 경우, 43.202.1.52 도메인으로 들어오는 요청만 이 서버 블록에서 처리됩니다.
# 특정 도메인에 대해 맞춤형 설정을 적용할 수 있습니다.
server_name 43.202.1.52;
# HTTP 요청을 HTTPS로 리디렉션
location / {
return 301 https://$host$request_uri;
}
}
# steach-server를 위한 업스트림 설정
# 업스트림 서버: 'upstream' 지시어는 요청을 처리할 수 있는 백엔드 서버 풀을 정의합니다.
# 포트 번호에 18081 -> 8080 이면 8080을 써줘야한다.
upstream steach-server {
# server 43.202.1.52:8080;
# 여기서 43.202.1.52는 실제 IP 주소입니다.
# :8080은 steach-server 애플리케이션이 사용하는 포트 번호입니다.
# server steach-server:8080;
# 여기서 steach-server는 도메인 이름 또는 Docker 네트워크 내의 컨테이너 이름을 나타냅니다.
# 8080은 steach-server 애플리케이션이 사용하는 포트 번호입니다.
# [도메인 주소 43.202.1.52, 43.202.1.52 : 진짜 원래 포트 번호]
# 어떤 것을 사용해야 할까?
# 도메인 이름 또는 컨테이너 이름 (server steach-server:8080;)을 사용하는 것이 좋습니다.
# 특히 Docker 환경에서는 컨테이너 이름을 사용하면 Docker가 자동으로 네트워크 내에서 올바른 IP 주소를 찾아줍니다.
# 도메인 이름을 사용하면 서버의 IP 주소가 변경되더라도 도메인 이름을 통해 접근할 수 있습니다.
server steach-server:8080; # steach-server 애플리케이션이 사용하는 포트 설정
server 127.0.0.1:65535 backup; # 더미 서버
}
upstream steach-front {
server 43.202.1.52:5173; # Set the port used by the steach-front application
server 127.0.0.1:65535 backup; # Dummy server
}
upstream image-server {
server 43.202.1.52:8082; # Set the port used by the steach-front application
server 127.0.0.1:65535 backup; # Dummy server
}
server {
listen 443 ssl;
# 위에서와 2번 사용하지 않기 중복 에러날 수도 있음
# server_name 43.202.1.52;
ssl_certificate /etc/letsencrypt/live/43.202.1.52/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/43.202.1.52/privkey.pem;
index index.html;
error_page 404 /index.html;
location / {
# 여기에 https를 하면 안됨.
# 왜냐면 현재 같은 aws 서버 내에서 통신을 하는데 https를 할 이유가 없다.
# 그런데 이거 때문에 502 BAD GATEWAY 까지 할 일이 있나??
# 내부 통신에서는 일반적으로 HTTP를 사용합니다. HTTPS는 불필요하며 추가적인 오버헤드를 발생시킵니다.
# 외부에서 들어오는 HTTPS 요청은 Nginx에서 처리하고, 내부적으로는 HTTP로 통신하는 현재 설정을 유지하세요.
# 내부 통신에 HTTPS를 사용하면 불필요한 암호화/복호화 과정으로 인해 성능이 저하될 수 있습니다.
proxy_pass http://steach-front/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
try_files $uri /index.html;
}
location /api {
proxy_pass http://steach-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ ^/api/v1/(lectures/final/|check/server) {
limit_req zone=ip_limit nodelay;
limit_req_status 429;
proxy_pass http://steach-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 스웨거 설정
location ~ ^/(swagger|webjars|configuration|swagger-resources|v2|csrf) {
proxy_pass http://steach-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 따라서 $는 정확한 매칭을 보장하기 위한 중요한 부분입니다.
location ~ ^/img-upload/(upload|display/[^/]+/[^/]+)$ {
proxy_pass http://image-server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
log_format custom_log_format '$remote_addr - $remote_user [$time_local] "$request" '
'limit_req_status=$limit_req_status $status '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log custom_log_format;
}