1. 문제
최초에는 S3로 직접 연결 하도록 구성하였으나 A회사의 사내 네트워크에서 사용하는 사설 IP 대역 중에서 서울 리전의 S3 IP 대역(52.*)이 충돌하는 문제가 발생함.
이를 해결하기 위해 충돌하지 않는 EIP 를 생성하여 S3 Proxy 연결하도록 구성함.
2. 해결
2-1. EC2 생성
Instance type | m5.large |
EIP | 13.125.xxx.xxx |
Disk Partition | * / : 8 GB (root) * /apps : 30 GB (EBS 추가) |
2-2. EC2 생성 이후 변경한 설정
2-2-1. sshd port 변경
기본 port 인 22번에서 40022로 변경
- 파일 위치: /etc/ssh/sshd_config
Port 40022
내용 수정 후 sshd 재시작
$ sudo systemctl restart sshd
2-2-2. nginx 설치
Amazon Linux 2 에서 nginx 는 기본 설치 패키지로 포함되어 있지 않기 때문에 yum 명령어로는 설치가 안됨.
[ec2-user@ip-10-200-1-92 ]$ sudo yum install nginx
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
No package nginx available.
Error: Nothing to do
nginx is available in Amazon Linux Extra topics "nginx1.12" and "nginx1"
To use, run
# sudo amazon-linux-extras install :topic:
Learn more at
https://aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras
위에서 알려준대로 명령어 실행하면 yum repository 에 amazon extra repository 가 추가된 후에 nginx가 설치됨.
$ sudo amazon-linux-extras install nginx1
2-2-3. nginx 설정
기본 서버 설정은 제거.
$ vim /etc/nginx/nginx.conf
36 ...
37
38 # server {
39 # listen 80 default_server;
40 # listen [::]:80 default_server;
41 # server_name _;
42 # root /usr/share/nginx/html;
43 #
44 # # Load configuration files for the default server block.
45 # include /etc/nginx/default.d/*.conf;
46 #
47 # location / {
48 # }
49 #
50 # error_page 404 /404.html;
51 # location = /40x.html {
52 # }
53 #
54 # error_page 500 502 503 504 /50x.html;
55 # location = /50x.html {
56 # }
57 # }
58
59 ...
별도 설정 디렉토리에 파일 추가.
# cd /etc/nginx/conf.d
# vim s3-proxy-server.conf
/etc/nginx/conf.d/s3-proxy-server.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /apps/doc_root;
# 데이터 전송 Timeout. 기본값 60초 에서 120초 변경함.
send_timeout 120s;
error_log /apps/nginx_logs/error.log error;
access_log /apps/nginx_logs/access.log main;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
# VPC 내의 DNS 서버. (VPC CIDR 대역 + 2)
resolver 10.200.0.2;
set $bucket "original-s3.s3.ap-northeast-2.amazonaws.com";
proxy_pass https://$bucket;
proxy_intercept_errors on;
# 백엔드 서버에 의해 촉발된 리다이렉션에 대해 "Location" HTTP 헤더에 나타나는 URL을 재작성한다.
# - off: 리다이렉션은 설정된 그대로 전달된다.
# - default: 호스트명과 현재 문서 경로가 첨부된 proxy_pass 지시어 값이 사용된다. 환경설정은 순차적으로 파싱되므로 proxy_redirect 지시어는 proxy_pass 지시어 다음에 삽입해야 함에 유의한다.
# - URL: URL의 일부를 다른 것으로 바꾼다. 또한 재작성 URL 안에 변수를 사용해도 좋다.
proxy_redirect off;
proxy_set_header Host $bucket;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header x-amz-id-2;
proxy_hide_header x-amz-request-id;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}