为什么我可以将大文件上传到nginx服务器?

发布于 2025-02-08 20:29:25 字数 2176 浏览 2 评论 0原文

我正在我的React应用程序中编写APK上传功能。每次我尝试上传大于10 MB的APK文件时,我都会收回一个错误: 413请求实体太大。我已经使用了 client_max_body_size 888m; 指令。有人可以向我解释,我做错了什么?

这是我

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/errors.log notice;
pid        /var/run/nginx.pid;


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"';

    access_log  /var/log/nginx/accesses.log  main;

    sendfile        on;

    keepalive_timeout  65;

server {

  listen 80;
  listen [::]:80;
  server_name up-app.unpluggedsystems.app;
 #   return 301 http://$server_name$request_uri;

  root /usr/share/nginx/html;
  index index.html;

client_max_body_size 888M;

  location /api/7/apps/search {
   proxy_pass http://ws75.aptoide.com/api/7/apps/search;
   proxy_set_header X-Forwarded-For $remote_addr;

  }
location ~ \.(apk)$ {
  proxy_pass https://pool.apk.aptoide.com;
  proxy_set_header X-Forwarded-For $remote_addr;
}

location /api {
  proxy_pass https://up-app.unpluggedsystems.app;
  proxy_set_header X-Forwarded-For $remote_addr;
}

}
}

使用的nginx.conf:dockerfile(也许在这里有些问题?):

# build environment
FROM node:13.12.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json ./
COPY package-lock.json ./
COPY create-env-file.sh ./create-env-file.sh
RUN npm install
RUN npm install [email protected] -g
COPY . ./
RUN npm run build

# production environment
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
COPY fullchain.crt /etc/ssl/fullchain.crt
COPY unpluggedapp.key.pem /etc/ssl/unpluggedapp.key.pem
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

我是少年,我在这样的事情上很虚弱。也许我将client_max_body_size放在错误的地方?

I'm writing apk uploading functionality in my React App. Every time I try to upload an apk file bigger than 10 mb, I get back an error: 413 Request Entity Too Large. I've already used client_max_body_size 888M; directive. Can anybody explain me, what I do wrong?

Here is my nginx.conf:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/errors.log notice;
pid        /var/run/nginx.pid;


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"';

    access_log  /var/log/nginx/accesses.log  main;

    sendfile        on;

    keepalive_timeout  65;

server {

  listen 80;
  listen [::]:80;
  server_name up-app.unpluggedsystems.app;
 #   return 301 http://$server_name$request_uri;

  root /usr/share/nginx/html;
  index index.html;

client_max_body_size 888M;

  location /api/7/apps/search {
   proxy_pass http://ws75.aptoide.com/api/7/apps/search;
   proxy_set_header X-Forwarded-For $remote_addr;

  }
location ~ \.(apk)$ {
  proxy_pass https://pool.apk.aptoide.com;
  proxy_set_header X-Forwarded-For $remote_addr;
}

location /api {
  proxy_pass https://up-app.unpluggedsystems.app;
  proxy_set_header X-Forwarded-For $remote_addr;
}

}
}

And Dockerfile that I use (maybe something wrong here?):

# build environment
FROM node:13.12.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json ./
COPY package-lock.json ./
COPY create-env-file.sh ./create-env-file.sh
RUN npm install
RUN npm install [email protected] -g
COPY . ./
RUN npm run build

# production environment
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
COPY fullchain.crt /etc/ssl/fullchain.crt
COPY unpluggedapp.key.pem /etc/ssl/unpluggedapp.key.pem
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

I FE Junior, and I so weak in such things. Maybe I put client_max_body_size in wrong place?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

宫墨修音 2025-02-15 20:29:25

请移动 client_max_body_size http {} pection

http {
   # some code here
   sendfile on;
   client_max_body_size 888M;
   #...
}

修改配置文件后重新启动nginx。

您可以尝试

client_max_body_size 0;

(设置为no)限制,但这不建议用于生产env。)

更多,请记住,如果您有SSL,则需要您在nginx.conf中为SSL Server和位置{}设置上述限制。如果您的客户端(浏览器)试图在HTTP上上传,并且您希望它们能够获得301'的HTTPS,则NGINX服务器实际上将由于文件太大而对于HTTP服务器而在重定向之前删除连接,因此限制的限制已有将在HTTP和HTTPS中设置。

诀窍是放入HTTP {}和Server {}(for Vhost)中

http {
    # some code
    client_max_body_size 0;
}  



server {
    # some code
    client_max_body_size 0;
}

Please move client_max_body_size under http{} section

http {
   # some code here
   sendfile on;
   client_max_body_size 888M;
   #...
}

Make sure to restart nginx After modifying the configuration file.

You can try

client_max_body_size 0;

(set to no limit, but this is not recommended for production env.)

More over, Remember that if you have SSL, that will require you to set the above limitation for the SSL server and location{} in nginx.conf too. If your client (browser) tries to upload on http, and you expect them to get 301'd to https, nginx server will actually drop the connection before the redirect due to the file being too large for the http server, so the limitation has to be set in both http and https.

The trick is to put in both http{} and server{} (for vhost)

http {
    # some code
    client_max_body_size 0;
}  



server {
    # some code
    client_max_body_size 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文