AWS Elastic Beanstalk의 Nginx conf에서 client_max_body_size 늘리기
나는 실행 해요 "413 건 더러가 너무 큼" AWS 탄성 콩 줄기에서 실행 우리의 API에 10 메가 바이트보다 큰 파일을 게시 할 때 오류가 발생합니다.
꽤 많은 연구? 저는를 수행 했으며 Nginx에에 대해 client_max_body_size 를 늘려야 한다고 생각 하지만 탄성 콩나무를 사용하여이를 수행하는 방법에 대한 문서를 찾을 수없는 것 같습니다 . 내 생각 엔 ebetension 파일을 사용하여 수정해야한다는 것입니다.
누구든지 내가 어떻게 한도를 존재하는지에 대한 생각이 있습니까? 10MB는 매우 약합니다. 수동으로 올리는 방법이 필요합니다.
이를 위해 사용할 수있는 두 가지 방법이 있습니다. 불행히도 일부는 일부 EB 응용 프로그램 유형에서 작동하고 일부는 다른 유형에서 작동합니다.
AWS 설명서에서 지원 / 권장
Java SE , Go , Node.js 및 Ruby와 같은 일부 애플리케이션 유형의 경우 (Ruby 용으로 문서화되어 있지 않지만 다른 모든 Nginx 플랫폼에서이를 지원하는 것) Elasticbeanstalk는 Nginx 구성 방법에 대한 이해가 내장되어 있습니다.
Elastic Beanstalk의 기본 nginx 구성을 확장 해야 한다고
.ebextensions/nginx/conf.d/주장하는 구성이라는 폴더에 .conf 구성 파일을 추가 합니다 . Elastic Beanstalk의 nginx 구성에는이 폴더의 .conf 파일이 자동으로 포함됩니다.~/workspace/my-app/ |-- .ebextensions | `-- nginx | `-- conf.d | `-- myconf.conf `-- web.jar
특히 최대 업로드 크기를 늘리려면 .ebextensions/nginx/conf.d/proxy.conf최대 본문 크기를 원하는 크기 로 설정하여 파일을 만듭니다 .
client_max_body_size 50M;
Nginx 구성 파일을 직접 생성
훌륭한 AWS 지원 팀과 많은 연구와 시간을 함께한 끝에 .ebextensionsnginx 구성을 보완하기 위해 내부에 구성 파일을 만들었습니다 . 이 변경으로 더 큰 게시물 본문 크기가 허용되었습니다.
.ebextensions디렉토리 안에 01_files.config다음 내용으로 라는 파일을 만들었습니다 .
files:
"/etc/nginx/conf.d/proxy.conf" :
mode: "000755"
owner: root
group: root
content: |
client_max_body_size 20M;
그러면 /etc/nginx/conf.d 디렉토리에 proxy.conf 파일이 생성됩니다. proxy.conf 파일에는 client_max_body_size 20M;트릭을 수행하는 하나의 라이너 가 포함 되어 있습니다 .
일부 플랫폼의 경우 배포 배포 단계에서 제거됩니다.
Nginx 문서에 설명 된 다른 지시문을 지시 할 수 있습니다.
http://wiki.nginx.org/Configuration
이것이 다른 사람들에게 도움이되기를 바랍니다!
files:
"/etc/nginx/conf.d/proxy.conf" :
mode: "000755"
owner: root
group: root
content: |
client_max_body_size 20M;
보안을 위해 위의 답변을 수정했습니다 (구문이 잘못되었습니다. YAML의 두 개의 'owner :'항목을 참조하십시오), 여러분, ANYTHING에 777 권한을 설정하지 않았습니다. 해킹을 즐기지 않는 한 Nginx 구성 파일의 소유자를 루트로 설정하십시오.
또한 배포 후 nginx 픽업이 변경 아래 답변 을 참조하십시오 .
편집 : Nick Parsons가 수락 한 답변의 지침 빌드를 배포 한 후 변경 사항을 적용 할 nginx 서버를 다시 시작해야 할 수 있습니다.
이렇게하여 ssh를 실행하고
sudo service nginx reload
다시로드에 대한 자세한 내용은 http://nginx.org/en/docs/beginners_guide.html을 참조 하십시오 .
이전 버전의 Elastic Beanstalk에서는 container_command를 추가 할 수 있었지만 이제 @cdmckay와 같이 이로 인해 배포 실패가 발생한다는 것을 알게되었습니다. 환경을 다시 빌드하는 경우 지침이 구성 파일에있는 한 client_max_body_size 설정을 선택합니다.
JVM 기반 앱이 NGINX 구성을 다르게 수행하는 것 같아서 들여진 대답이 저에게 적합하지 않습니다. proxy.conf 파일이 생성되는 배포 배포가 완료되기 전에 배포됩니다. AWS 설명서는 프록시 를 구성하는 방법을 설명합니다 .
다음 .ebextensions/nginx/conf.d/proxy.conf줄만 포함 하는 파일을 만듭니다 .client_max_body_size 40M;
nginx 수락 구성 파일을 다시로드해야 할 수 있습니다.
이렇게 다음 명령을 추가하십시오.
container_commands:
01_reload_nginx:
command: "service nginx reload"
이것은 eb 인스턴스에 ssh'ing하고 명령을 사용하여 수동으로 수행하는 것보다 더 나은 방법입니다.
이것은 받아 들인 대답과 결합되어 나에게 동일한 문제를 해결했습니다. (레일, 퓨마, NGINX)
받아 들인 대답이 나를 위해 작동하지 않았으므로 대신 nginx 구성을 내 구성으로 덮어 썼습니다.
nginx.conf디렉토리 아래에 라는 파일을 만들었습니다..ebextensions/nginx/
실행중인 Beanstalk 앱 인스턴스에 SSH로 연결 하고 터미널에서 nginx.conf사용 cat /etc/nginx/nginx.conf및 복사 하여 파일 의 내용을 복사했습니다 .
nginx.conf이전에 만든 파일에 내용을 붙여넣고 .ebextensions/nginx/http 지시문을 수정하여 client_max_body_size 50M;. 마침내 사용하여 내 앱을 재배포 eb deploy했으며 작동했습니다. 배포 중에 다음 메시지가 표시되어야합니다.
정보 : '.ebextensions / nginx'디렉터리에서 Nginx 구성이 감지되었습니다. AWS Elastic Beanstalk는 더 이상이 환경에 대한 Nginx 구성을 관리하지 않습니다.
다음은 내 .ebextensions/nginx/nginx.conf파일 의 내용입니다 .
# Elastic Beanstalk Nginx Configuration File
user nginx;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 33193;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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"';
include conf.d/*.conf;
map $http_upgrade $connection_upgrade {
default "upgrade";
}
server {
listen 80 default_server;
access_log /var/log/nginx/access.log main;
client_header_timeout 60;
client_body_timeout 60;
keepalive_timeout 60;
gzip off;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/*.conf;
}
client_max_body_size 50M;
}
nginx 서비스 나 환경을 다시 시작할 필요가 없습니다.
참고 : .ebextensions가 배포 중에 생성되고 Beanstalk에 업로드 된 .zip 파일의 일부인지 확인하십시오 ( 사용중인 경우 .gitignore또는 에서 무시되지 않음 .ebignore).
또는 프록시 서버를 Apache로 변경할 수 있습니다. 이렇게하려면 구성으로 이동하여 소프트웨어 구성을 편집합니다. 첫 번째 옵션은 "프록시 서버"입니다. "아파치"를 선택합니다.
나를 위해 일한 유일한 것은 다음과 같이 .ebextensions 안에 ".config"파일을 만드는 것입니다.
.ebextensions/
proxy.config
.config 파일에이 내용 만 포함 :
files:
"/etc/nginx/conf.d/proxy.conf":
content: |
client_max_body_size 50M;
하위 폴더가 필요하지 않고, 애플리케이션 서버를 다시 시작할 필요가 없습니다. .ebextensions 내부의 ".conf"파일이 아닌 ".config"에주의하고 aws 콘솔에서 오류를 방지하기 위해 적절한 들여 쓰기를 사용하면 나머지는 동일합니다. 파일 이름은 중요하지 않습니다.
덕분에 : http://kroltech.com/2014/09/14/quick-tip-increase-upload-size-in-aws-elastic-beanstalk-node-js-env/
Docker가없는 Golang의 경우 aws doc의 다음 지침을 따랐습니다.
역방향 프록시 구성
nginx.conf http 블록에있는 지시문 외에 지시문을 포함하려는 경우
.ebextensions/nginx/conf.d/소스 번들 의 디렉토리에 추가 구성 파일을 제공 할 수도 있습니다 . 이 디렉토리의 모든 파일은 .conf 확장자를 가져야합니다. http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/go-environment.html#go-complex-apps
내 프로젝트의 루트에 파일 proxy.conf을 만들었습니다 .ebextensions/nginx/conf.d/.
client_max_body_size 20M;
그래도 작동하지 않으면 .ebextensions폴더 및 하위 폴더가 배포 zip에 포함되어 있는지 확인하십시오 . Nginx를 수동으로 다시 시작할 필요가 없습니다.
Java 플랫폼의 경우
NGINX 구성 프록시 파일을 생성하려면 다음을 추가해야합니다.
.ebextension/nginx/conf.d/proxy.conf 파일
내용과 함께 client_max_body_size 20M;.
"proxy.conf"는 "/etc/nginx/conf.d/proxy.conf"에 배포되고 NGINX 구성에 자동으로 포함됩니다.
'IT' 카테고리의 다른 글
| SQL Server의 IsNull () 함수에 해당하는 C # (0) | 2020.08.12 |
|---|---|
| 유효한 16 진수 색상 표현인지 확인하는 방법은 무엇입니까? (0) | 2020.08.11 |
| 다른 테이블에없는 ID로 레코드를 찾기위한 SQL 쿼리 (0) | 2020.08.11 |
| 자바 펼쳐의 플랫 배열에서 트리 배열 빌드 (0) | 2020.08.11 |
| Eclipse의 언 바운드 클래스 경로 컨테이너 (0) | 2020.08.11 |