การเพิ่ม client_max_body_size ใน Nginx conf บน AWS Elastic Beanstalk


123

ฉันพบข้อผิดพลาด"413 Request Entity Too Large"เมื่อโพสต์ไฟล์ที่มีขนาดใหญ่กว่า 10MB ไปยัง API ของเราที่ทำงานบน AWS Elastic Beanstalk

ฉันได้ทำการวิจัยมาพอสมควรและเชื่อว่าฉันจำเป็นต้องอัพclient_max_body_sizeสำหรับ Nginx แต่ดูเหมือนว่าฉันจะไม่พบเอกสารใด ๆ เกี่ยวกับวิธีการใช้งาน Elastic Beanstalk ฉันเดาว่าต้องแก้ไขโดยใช้ไฟล์ ebetension

ใครมีความคิดว่าฉันจะเพิ่มขีด จำกัด ได้อย่างไร? 10MB ค่อนข้างอ่อนแอต้องมีวิธีอัพด้วยตนเอง


1
ค่าเริ่มต้นคือ 1MB เท่านั้นวันนี้ ...
rogerdpack

สำหรับเร็กคอร์ดโซลูชันที่ให้มาทั้งหมดไม่ได้จัดการกับการปรับใช้. NET หากคุณใช้. NET ใน AWS Elastic Beanstalk คุณต้องกำหนดการตั้งค่า IIS ในโครงการของคุณ สำหรับฉันฉันต้องกำหนดค่า web.config ในแอป net471 ของฉัน
SimonH

คำตอบ:


223

มีสองวิธีที่คุณสามารถทำได้ น่าเสียดายที่บางส่วนใช้งานได้กับแอปพลิเคชัน EB บางประเภทและบางประเภทก็ใช้ได้

รองรับ / แนะนำในเอกสาร AWS

สำหรับแอปพลิเคชันบางประเภทเช่นJava SE , Go , Node.jsและอาจเป็น Ruby (ไม่มีเอกสารสำหรับ Ruby แต่แพลตฟอร์ม Nginx อื่น ๆ ทั้งหมดดูเหมือนจะรองรับสิ่งนี้) Elasticbeanstalk มีความเข้าใจในตัวเกี่ยวกับวิธีกำหนดค่า Nginx

ที่จะขยายการกำหนดค่าเริ่มต้น Nginx ยืดหยุ่นถั่วของเพิ่มไฟล์การกำหนดค่า .conf ไปยังโฟลเดอร์ที่มีชื่อ.ebextensions/nginx/conf.d/ในห่อแหล่งที่มาใบสมัครของคุณ การกำหนดค่า nginx ของ Elastic Beanstalk รวมไฟล์. conf ไว้ในโฟลเดอร์นี้โดยอัตโนมัติ

~/workspace/my-app/
|-- .ebextensions
|   `-- nginx
|       `-- conf.d
|           `-- myconf.conf
`-- web.jar

การกำหนดค่า Reverse Proxy - Java SE

หากต้องการเพิ่มขนาดอัปโหลดสูงสุดโดยเฉพาะให้สร้างไฟล์โดย.ebextensions/nginx/conf.d/proxy.confตั้งค่าขนาดตัวสูงสุดเป็นขนาดใดก็ได้ที่คุณต้องการ:

client_max_body_size 50M;

สร้างไฟล์กำหนดค่า Nginx โดยตรง

หลังจากค้นคว้าข้อมูลมากมายและทำงานร่วมกับทีมสนับสนุน AWS ที่ยอดเยี่ยมหลายชั่วโมงฉันได้สร้างไฟล์กำหนดค่าภายใน.ebextensionsเพื่อเสริมการกำหนดค่า nginx การเปลี่ยนแปลงนี้อนุญาตให้โพสต์ขนาดใหญ่ขึ้น

ภายใน.ebextensionsไดเร็กทอรีฉันสร้างไฟล์ที่เรียกว่า01_files.configมีเนื้อหาต่อไปนี้:

files:
    "/etc/nginx/conf.d/proxy.conf" :
        mode: "000755"
        owner: root
        group: root
        content: |
           client_max_body_size 20M;

สิ่งนี้จะสร้างไฟล์ proxy.conf ภายในไดเร็กทอรี /etc/nginx/conf.d ไฟล์ proxy.conf มีเพียงซับเดียวclient_max_body_size 20M;ซึ่งทำเคล็ดลับ

โปรดทราบว่าสำหรับบางแพลตฟอร์มไฟล์นี้จะถูกสร้างขึ้นในระหว่างการปรับใช้ แต่จะถูกลบออกในระยะการปรับใช้ในภายหลัง

คุณสามารถระบุคำสั่งอื่น ๆ ซึ่งระบุไว้ในเอกสารประกอบ Nginx

http://wiki.nginx.org/Configuration

หวังว่านี่จะช่วยคนอื่น ๆ !


2
รูปแบบไฟล์เป็นเอกสารที่docs.aws.amazon.com/elasticbeanstalk/latest/dg/... บันทึกความคืบหน้าไว้ที่ /var/log/cfn-init.log 2014-xx-xx xx:xx:xx,xxx [DEBUG] Writing content to /etc/nginx/conf.d/proxy.confในบันทึกของคุณจะเห็นสิ่งที่ต้องการ ฉันไม่แน่ใจ แต่ดูเหมือนว่าอาจจำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์
h-kippo

2
ทำงานให้ฉันกับ puma ต้องรีสตาร์ทบริการเช่น @ จะกล่าวว่า (sudo service nginx reload)
Dennis

1
เราหวังว่านี้อาจช่วยให้คนอื่นในขณะที่มันเอาฉันในขณะ ... เยื้องเป็นสิ่งสำคัญ - มันมีเพื่อให้สอดคล้องกับที่ YAML ข้อมูลจำเพาะ - docs.saltstack.com/en/latest/topics/yaml
alexs

1
ยืนยันว่าใช้งานได้ตรวจสอบให้แน่ใจ.ebextensionsว่าไม่ได้อยู่ใน.ebignoreและ.gitignore🖖ฉันไม่จำเป็นต้องรีสตาร์ทบริการ nginx eb deployและใช้งานได้🎉
GabLeRoux

4
สำหรับโหนด js วิธีที่สอง (ไฟล์ :) ใช้ได้ผลสำหรับฉัน อันแรกไม่ได้ผล แม้แต่ฝ่ายสนับสนุนของ AWS ก็แนะนำให้ใช้วิธีที่สองสำหรับ node js docs.aws.amazon.com/elasticbeanstalk/latest/dg/…
Kapil

33
files:
    "/etc/nginx/conf.d/proxy.conf" :
        mode: "000755"
        owner: root
        group: root
        content: |
           client_max_body_size 20M;

แก้ไขคำตอบด้านบนเพื่อความปลอดภัย (และไวยากรณ์ไม่ถูกต้องโปรดดูรายการ 'owner:' สองรายการใน YAML) พวกโปรดอย่าตั้งค่าสิทธิ์ 777 ในสิ่งใด ๆ เว้นแต่คุณจะสนุกกับการถูกแฮ็กและตั้งค่าเจ้าของไฟล์กำหนดค่า Nginx เป็นรูท

ดูคำตอบด้านล่างเพื่อทำการรับ nginx การเปลี่ยนแปลงนี้หลังจากการปรับใช้


22

แก้ไข: หลังจากที่คุณใช้งานบิลด์ตามคำแนะนำในคำตอบที่ยอมรับโดย 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 ตลอดจนคำสั่งนั้นอยู่ในไฟล์กำหนดค่าของคุณ


สิ่งนี้จำเป็นหรือไม่? ถ้าคุณไม่เพิ่มสิ่งนี้จะรีสตาร์ทได้อย่างไร?
cdmckay

จากประสบการณ์ของฉันฉันพบว่าสิ่งนี้จำเป็น
Will

@cdmckay คุณสามารถพูดเพิ่มเติมเกี่ยวกับปัญหาอินสแตนซ์ที่เกิดจากคำสั่ง reload ได้หรือไม่?
จะ

ฉันไม่ได้มองเข้าไปใกล้เกินไป แต่โดยพื้นฐานแล้วมันทำให้เซิร์ฟเวอร์ของฉันไม่สามารถเปิดใช้งานได้จนกว่าฉันจะลบออก ดูเหมือนจะไม่จำเป็น
cdmckay

3
จากประสบการณ์ของฉันฉันพบว่าสิ่งนี้จำเป็นอย่างไรก็ตามฉันต้องเพิ่มการตรวจสอบเพื่อดูว่า nginx ทำงานอยู่หรือไม่ก่อนที่จะพยายามรีสตาร์ทสำหรับอินสแตนซ์ใหม่ - 'pgrep nginx && service nginx reload || จริง '
alexs

16

คำตอบที่ยอมรับไม่ได้ผลสำหรับฉันเนื่องจากฉันมีแอปที่ใช้ JVM และดูเหมือนว่าจะกำหนดค่า NGINX แตกต่างกัน ฉันจะเห็นไฟล์ proxy.conf ถูกสร้างขึ้นระหว่างการปรับใช้ แต่หลังจากนั้นก็ถูกลบในภายหลังก่อนที่การปรับใช้จะเสร็จสมบูรณ์ เอกสาร AWS อธิบายวิธีกำหนดค่าพร็อกซี :

สร้าง.ebextensions/nginx/conf.d/proxy.confไฟล์ที่มีเพียงบรรทัด:client_max_body_size 40M;


2
น่าเสียดายที่ไม่ได้ผลสำหรับฉัน ( Docker ELB แบบคอนเทนเนอร์เดียว) - ไม่ได้แม้แต่หลังจากรีบูตอินสแตนซ์ การเข้าสู่อินสแตนซ์ผ่าน SSH ไม่มีการสร้างไฟล์ proxy.conf ใน/etc/nginx/conf.d/
Udo G

ฉันสมมติว่าเป็นเพราะคุณใช้ Docker ELB และทำให้ nginx conf แตกต่างกัน คำตอบของฉันคือ ELB ที่ตั้งไว้ล่วงหน้าของ Java
Raymond26

ฉันใช้แอพ elb และ java ใช้ได้ผลสำหรับฉัน! ขอบคุณ!
Dimitar Vukman

คุณจะเห็นไฟล์ proxy.conf ที่สร้างขึ้นได้อย่างไรเพียงแค่สังเกตว่ามีอยู่ชั่วคราว
rogerdpack

9

จากคำตอบที่ยอมรับคุณอาจต้องโหลดไฟล์กำหนดค่า nginx ใหม่

ในการดำเนินการนี้ให้เพิ่มคำสั่งต่อไปนี้

   container_commands:
      01_reload_nginx:
        command: "service nginx reload"

วิธีนี้จะดีกว่าการเข้าสู่อินสแตนซ์ eb ของคุณและดำเนินการด้วยตนเองด้วยคำสั่ง

สิ่งนี้รวมกับคำตอบที่ยอมรับได้ช่วยแก้ปัญหาเดียวกันให้ฉัน (ราง, Puma, NGINX)


7

สิ่งเดียวที่ได้ผลสำหรับฉันคือการสร้างไฟล์ ".config" ภายใน. ebextensions เช่นนี้:

.ebextensions/
           proxy.config

โดยมีเฉพาะเนื้อหานี้ในไฟล์. config:

files:
  "/etc/nginx/conf.d/proxy.conf":
     content: |
       client_max_body_size 50M;

ไม่จำเป็นต้องมีโฟลเดอร์ย่อยไม่จำเป็นต้องรีสตาร์ทแอ็พพลิเคชันเซิร์ฟเวอร์โปรดทราบว่าไฟล์ ".config" ไม่ใช่ ".conf" ภายใน. ebextensions และการใช้การเยื้องที่เหมาะสมเพื่อหลีกเลี่ยงข้อผิดพลาดในคอนโซล aws ส่วนที่เหลือจะเหมือนกัน ไม่สำคัญว่าชื่อของไฟล์

ขอบคุณ: http://kroltech.com/2014/09/14/quick-tip-increase-upload-size-in-aws-elastic-beanstalk-node-js-env/


7

ฉันได้ลองใช้ทุก.ebextensionsวิธีในการเพิ่มการกำหนดค่าระดับการใช้งานแล้วและมันไม่ได้ช่วยฉันใน Amazon Linux AMI ล่าสุด ฉันได้ทำการค้นคว้ามากมายและหลังจากผ่านบันทึกแล้วฉันพบว่าตัวเรียกใช้งานการปรับใช้กำลังตรวจสอบโฟลเดอร์ที่เรียกว่า.platformทุกครั้งและฉันคิดว่าจะเพิ่มไฟล์เช่นเดียวกับ. ebextensions ด้านล่างนี้คือการตั้งค่าที่ฉันได้ทำในโฟลเดอร์รูทของโครงการของฉัน

เพิ่มการตั้งค่าโฟลเดอร์ด้านล่างในระดับรากของโฟลเดอร์โครงการของคุณ

โครงสร้างโฟลเดอร์ (.platform / nginx / conf.d / proxy.conf)

.platform/
         nginx/
              conf.d/
                    proxy.conf
         00_myconf.config

เนื้อหาของไฟล์ 1 - proxy.conf ( .platform/nginx/conf.d/โฟลเดอร์ภายใน)

client_max_body_size 50M;

เนื้อหาของไฟล์ 2 - 00_myconf.config ( .platform/โฟลเดอร์ภายใน)

container_commands:
  01_reload_nginx:
    command: "service nginx reload"

ดูแลส่วนขยายให้เต็มที่ ไฟล์แรกคือ . confและไฟล์ที่สองคือ. config .config

ตอนนี้นำโครงการของคุณไปใช้กับ Amazon Elastic Beanstalk อีกครั้งแล้วคุณจะเห็นความมหัศจรรย์ การกำหนดค่านี้จะเพิ่มลงในอินสแตนซ์ EC2 ทั้งหมดของคุณซึ่งสร้างขึ้นเพื่อเป็นส่วนหนึ่งของการปรับขนาดอัตโนมัติ

โครงสร้างโฟลเดอร์โดยละเอียดด้านล่าง

ใส่คำอธิบายภาพที่นี่


3
ชาย!!!!!!!! ขอบคุณมาก. นี่เป็นวิธีเดียวในการตั้งค่า nginx config ใน AWS EB Amazon linux ฉันเสียเวลาทั้งวันในการพยายามหาวิธีแก้ปัญหาทุกอย่าง !!! ฉันไม่สามารถอธิบายได้ว่าจะขอบคุณที่สละเวลาเขียนคำตอบนี้โดยละเอียดอย่างไร อวยพรคุณ. หากคุณมีบัญชี Patreon หรือ buymeacoffee ที่ Il มีส่วนร่วม @jijo Cleetus
InfinitePrime

2
ขอบคุณมาก. ฉันก็ลองใช้วิธีการทั้งหมดที่เป็นไปได้เช่นกัน.ebextensionsและมีเพียงวิธีนี้เท่านั้นที่ใช้ได้ผล
ArunDhaJ

1
ช่วยฉันประหยัดการทดลองและความล้มเหลวมากมายในการทำให้สิ่งนี้ได้ผล ขอบคุณไม่พอ!
Jalal El-Shaer

1
ขอบคุณมากสิ่งนี้ใช้ได้กับแอปพลิเคชัน Spring Boot ด้วย ด้วย Elastic Beans Talk ที่เรียกใช้ Tomcat ดื่มเบียร์บนแท็บของฉัน :)
วี่

5

คำตอบที่ยอมรับไม่ได้ผลสำหรับฉันดังนั้นฉันจึงแทนที่การกำหนดค่า nginx ด้วยตัวฉันเอง

ฉันสร้างไฟล์ชื่อnginx.confภายใต้ไดเร็กทอรี.ebextensions/nginx/

ฉัน SSHed เป็นอินสแตนซ์ที่ทำงานอยู่ของแอพ Beanstalk ของฉันและคัดลอกเนื้อหาของnginx.confไฟล์โดยใช้cat /etc/nginx/nginx.confและคัดลอกจากเทอร์มินัล

ฉันวางเนื้อหาลงในnginx.confไฟล์ฉันก่อนหน้านี้ถูกสร้างขึ้น.ebextensions/nginx/และปรับเปลี่ยน http client_max_body_size 50M;สั่งที่จะรวม ในที่สุดฉันก็ปรับใช้แอปของฉันใหม่โดยใช้eb deployและใช้งานได้ คุณควรได้รับข้อความต่อไปนี้ระหว่างการปรับใช้:

ข้อมูล: ตรวจพบการกำหนดค่า Nginx ในไดเร็กทอรี ".ebextensions / 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 ของคุณเป็นส่วนหนึ่งของไฟล์. zip ที่สร้างและอัปโหลดไปยัง Beanstalk ในระหว่างการปรับใช้ (ไม่ได้ละเว้น.gitignoreหรือ.ebignoreหากคุณกำลังใช้งานอยู่)


ขอบคุณสำหรับสิ่งนี้! ฉันสงสัยว่าคุณใช้แพลตฟอร์มใดอยู่ ด้วยเหตุผลบางประการ Beanstalk ตรวจไม่พบไฟล์ ".ebextensions / nginx / nginx.conf` ของฉันแม้ว่าจะอยู่ในไฟล์ zip และ git repo ก็ตาม
Icid

โหวตให้กับโน้ต ฉันไม่สนใจสิ่ง.ebextensionsที่ทำให้คำตอบที่ได้รับการยอมรับและเป็นที่นิยมล้มเหลว ฉันไม่ได้ลองทุกอย่างที่คุณพูดถึง แต่ขอบคุณสำหรับโน้ต🍻
GabLeRoux

3

นี่คือโซลูชันที่ AWS ให้มาและใช้งานได้ (ปรับขนาดตามความต้องการของคุณ)

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/enact/12_add_nginx_configuration.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      /bin/echo "client_max_body_size 50M;" > /etc/nginx/conf.d/proxy.conf
      /sbin/service nginx reload

2

หรือคุณสามารถเปลี่ยนพร็อกซีเซิร์ฟเวอร์เป็น Apache ในการดำเนินการนี้ให้ไปที่การกำหนดค่าและแก้ไขการกำหนดค่าซอฟต์แวร์ ตัวเลือกแรกที่นี่คือ "พร็อกซีเซิร์ฟเวอร์" เลือก "apache"


Apache มีคำสั่ง LimitRequestBody ของตัวเองเพื่อกำหนดขนาดสูงสุดของไฟล์ที่อัปโหลด
Tom Harvey

@TomHarvey ถ้ามีคุณกรุณาให้ตัวอย่างแบบเต็มสำหรับกรณีการใช้งานด้วยLimitRequestBodyหรือไม่?
Hasan

1

สำหรับ Golang ที่ไม่มี Docker ฉันทำตามคำแนะนำเหล่านี้จาก aws doc:

การกำหนดค่า Reverse Proxy

หากคุณต้องการรวมคำสั่งเพิ่มเติมจากคำสั่งในบล็อก http ของ nginx.conf คุณยังสามารถจัดเตรียมไฟล์คอนฟิกูเรชันเพิ่มเติมใน.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/ที่รากของโครงการของฉันที่มีเพียงแค่ภายใน 1 บรรทัด:

client_max_body_size 20M;

หากยังใช้งานไม่ได้ตรวจสอบให้แน่ใจว่ามี.ebextensionsโฟลเดอร์และโฟลเดอร์ย่อยรวมอยู่ใน zip การปรับใช้ของคุณ ไม่จำเป็นต้องรีสตาร์ท Nginx ด้วยตนเอง


1

ฉันกำลังดิ้นรนกับปัญหาเดียวกัน แต่ไม่สามารถแก้ไขได้ในที่สุดก็ใช้งานได้

นี่คือไฟล์ Congfig ของฉัน

files:
  "/etc/nginx/conf.d/01_proxy.conf":
    mode: "000755"
    owner: root
    group: root
    content: |
      client_max_body_size 50M;
      client_body_buffer_size 16k;

container_commands:
  01_reload_nginx:
    command: "sudo service nginx reload"

ปัญหาคือ

ฉันใช้สคริปต์ python สำหรับไปป์ไลน์รหัสซึ่งไม่มีโฟลเดอร์. ebextensions ขณะสร้างบิลด์

นี่คือไม่กี่เซ็นต์ของฉัน

  1. ตรวจสอบให้แน่ใจว่าโฟลเดอร์. ebextensions ของคุณรวมอยู่ในโฟลเดอร์ zip ของบิลด์ซึ่งอยู่ใน s3bucket ของบัญชี aws ของคุณ
  2. ตรวจสอบให้แน่ใจว่าไม่ได้อยู่ในไฟล์. gitignore
  3. หากคุณใช้สคริปต์เพื่อสร้างบิลด์ตรวจสอบให้แน่ใจว่ามี. ebextensions

1

หลังจากพยายามหาสิ่งนี้มานาน 3 วันฉันก็โทรคุยกับทีมสนับสนุน AWS ที่น่าทึ่งและพวกเขาให้เบาะแสเกี่ยวกับวิธีแก้ปัญหา ขั้นแรกโครงการของฉันอยู่ใน JAVA และฉันใช้ maven และ spring boot เพื่อรันผ่าน Elastic Beanstalk (EBS)

  1. ตามที่อธิบายไว้ในเอกสารของ AWSคุณต้องมีการตั้งค่า nginx ที่กำหนดเองเก็บไว้ในระดับรากของโครงการของคุณ ในการทำเช่นนั้นฉันได้สร้างไฟล์ client_max_body_size.conf และวางไว้ในพา ธ ต่อไปนี้: myprojectname /src/main/resources/ebextensions/nginx/conf.d/client_max_body_size.conf ไฟล์นี้มีเฉพาะบรรทัดต่อไปนี้:

    client_max_body_size 10M;
    
  2. กำหนดค่า maven เพื่อเพิ่มไฟล์นี้ในโฟลเดอร์รูทของโปรเจ็กต์ของฉันในระหว่างการสร้าง มันค่อนข้างยุ่งยากฉันต้องเพิ่มการกำหนดค่าต่อไปนี้ (ที่มา ) ใน POM.xml ของฉัน:

    <plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>copy-resources</id>
            <!-- here the phase you need -->
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${basedir}/target/.ebextensions</outputDirectory>
                <resources>
                    <resource>
                        <directory>src/main/resources/ebextensions</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
    

  3. ตอนนี้คุณสามารถสร้างโปรเจ็กต์ของคุณในเครื่องได้แล้วและรันคำสั่ง SSH ต่อไปนี้เพื่อตรวจสอบว่ามันอยู่ในรูทของโปรเจ็กต์ของคุณ:

    jar tf main-1.0-SNAPSHOT.jar | grep .ebextensions
    
  4. ตอนนี้เป็นส่วนที่ยุ่งยาก เมื่อคุณอัปโหลดไปยัง EBS ไฟล์ของคุณควรมีเฉพาะไฟล์ SNAPSHOT.jar และโฟลเดอร์. ebextensions ตัวอย่างเช่นหากตอนนี้คุณจะ zip ไฟล์ jar และโฟลเดอร์และอัปโหลดด้วยตนเองมันจะทำงาน!

  5. เนื่องจากฉันใช้ Jenkins สำหรับการปรับใช้ของฉันและโดยเฉพาะAWS EBS Deployment Plugin - คุณต้องเปลี่ยนการตั้งค่าของไฟล์ / โฟลเดอร์ที่คุณรวมไว้ในการปรับใช้ ด้วยเหตุผลบางประการฉันไม่สามารถรวมโฟลเดอร์. ebextensions ได้ดังนั้นฉันจึงยกเว้นทุกอย่างยกเว้นโฟลเดอร์และไฟล์. jar ใส่คำอธิบายภาพที่นี่

ได้ผล!


1

นอกจากนี้ในการ client_max_body_size ผมต้องเพิ่มclient_body_buffer_size นี่คือไฟล์ dot config ที่ใช้งานได้สำหรับไฟล์แนบ 2 MB:

ไฟล์: "/etc/nginx/conf.d/proxy.conf":
โหมด: "000755"
เจ้าของ:
กลุ่มราก
: เนื้อหาราก: |
proxy_buffering บน;
proxy_buffer_size 128k;
proxy_buffers 8 256k;
client_body_buffer_size 2M;
proxy_busy_buffers_size 256k;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
client_max_body_size 3M;


0

สำหรับ Java Platform

ในการสร้างไฟล์พร็อกซีการกำหนดค่า NGINX คุณควรเพิ่ม

.ebextension/nginx/conf.d/proxy.conf ไฟล์

กับเนื้อหาclient_max_body_size 20M;ในนั้น

"proxy.conf" จะถูกปรับใช้กับ "/etc/nginx/conf.d/proxy.conf" และรวมไว้โดยอัตโนมัติโดยการกำหนดค่า NGINX


0

หากคุณใช้ EC2 และติดตั้ง nginx ด้วยตัวเองทางออกที่ดีที่สุดของคุณคือสร้างไฟล์ใหม่ในรูปแบบ

/etc/nginx/conf.d

โฟลเดอร์:

sudo nano /etc/nginx/conf.d/proxy.conf

จากนั้นเพิ่มบรรทัดต่อไปนี้:

client_max_body_size 20M;

จากนั้นบันทึกและรีสตาร์ท nginx:

sudo systemctl restart nginx

นี่เป็นวิธีแก้ปัญหา แต่ในกรณีที่ Elastic Beanstalk สร้างอินสแตนซ์ใหม่คุณต้องกำหนดค่านี้ในแต่ละอินสแตนซ์ และเป็นไปไม่ได้ในทางปฏิบัติเนื่องจากเราจำเป็นต้องตรวจสอบอินสแตนซ์ EC2 อย่างต่อเนื่องและกระบวนการรีสตาร์ท nginx นั้นไม่ดีทุกครั้ง
Jijo Cleetus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.