nginx服务器应用中遇到的两个问题

1》首先是413的错误!

1 client_max_body_size
2 Context: http, server, location
3 It is the maximum size of a client request body. If this size is exceeded, Nginx
4 returns a 413 Request entity too large HTTP error. This setting is particularly
5 important if you are going to allow users to upload files to your server over HTTP.
6 Syntax: Size value
7 Default value: 1m

这种错误,意思是说客户端请求的数据量太大。nginx的配置中,若没有专门指定这个选项的内容,则默认是1m的大小。但是,对于请求body过大的HTTP请求,则需要给相应的配置配置大一些的适合自己的web站点的body大小。

这个参数的配置适合的位置有 http,server,location三个地方都可以。

2》504 Gateway Time-out错误

这个错误,是和时间配置相关的。大家可能会有这种场景, 比如一个http请求到后端服务,后端服务的时间会比较长才给予前端响应,这个时候就要考虑是否会出现这种504的错误了。

我的应用,是在我们开发的CMS系统中,前端请求后台执行发布13000篇文章的发布。这个就会花点时间了,我们的系统,13000片文章,大概花3分钟。

我们的服务器架构很简单,前端nginx负责静态资源响应,nginx作为反向代理实现负载均衡(tomcat作为后端服务器),处理后端动态http请求,例如发布页面这种后端服务的http请求也在其中。

这种错误,相应的nginx的错误日志中,会看到下面的内容:

1 2016/08/05 18:47:06 [error] 31490#0: *48123 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.90.9.20, server: localhost, request: "GET /CMS/page/articleCenter/deployeeAll?type=41 HTTP/1.1", upstream: "http://10.130.202.135:8080/CMS/page/articleCenter/deployeeAll?type=41", host: "10.130.202.136", referrer: "http://10.130.202.136/CMS/page/pageTreeMgmt"

那么,如何解决这种错误呢?我们先看看nginx的服务器配置文档说明吧!

proxy_read_timeout: Sets read timeout for backend communications
proxy_send_timeout: Sets write timeout for backend communications

这个错误,是由于上述的两个timeout的时间没有设置,默认值比较小,60s,此处,我们将其修改的相对比较大,都改为3000了。

上述两个问题的解决办法很简单,将配置修改后的内容也附在这里作为参考吧!

 1 http {
 2     include       mime.types;
 3     default_type  application/octet-stream;
 4
 5     #log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
 6     #                  ‘$status $body_bytes_sent "$http_referer" ‘
 7     #                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;
 8
 9     #access_log  logs/access.log  main;
10
11     sendfile        on;
12     #tcp_nopush     on;
13
14     #keepalive_timeout  0;
15     keepalive_timeout  1000;
16     #gzip  on;
17
18     upstream cms {
19       server xx.xx.xx.xx:8080;
20     }
21     client_max_body_size 10M;#解决第一个问题的配置
22
23     server {
24         listen       80;
25         server_name  localhost;
26         #下面两行是解决第二个错误的配置
27         proxy_send_timeout   3000;
28         proxy_read_timeout   3000;
29         location /CMS{
30
31              proxy_pass http://cms;
32              proxy_set_header Host $host:$server_port;
33              proxy_set_header Remote_Addr $remote_addr;
34              proxy_set_header X-Real-IP $remote_addr;
35              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
36           }
37
38          location /resource {
39              root html/TK_ROOT;
40              allow all;
41           }
42       }
43 }
时间: 2024-10-21 00:53:17

nginx服务器应用中遇到的两个问题的相关文章

Nginx 之四: Nginx服务器的压缩功能

在Nginx服务器配置文件中可以通过配置Gzip的使用,可以配置在http块,server 块或者location块中设置,Nginx服务器可以通过ngx_http_gzip_module模块.ngx_http_static_module 模块功能ngx_http_gunzip_module模块对这些指令进行分析和处理. 一:ngx_http_gzip_module模块处理的指令: 1.gzip: 用于打开或者关闭gzip压缩的功能,用法如下: gzip on | off ; #默认为off 2

nginx负载均衡向后台传递参数方法(后端也是nginx服务器)

做了一个网站是用nginx 做的负载均衡,后端也是多个nginx服务器 遇到了一个问题,当做SSL支持时 前端nginx分发到 后端nginx后就成 http形式了(这样后台php用$_SERVER[HTTPS] == "on" 就无法判断了,但后台还必须要知道这个参数),如果改成https的话,还需要多个证书. 所以就想让前端nginx 如果是 https 的话给后端传递一个参数.用在后台来判断和使用. 首先前端nginx的 nginx.conf 文件中 用  proxy_set_h

Docker中Nginx服务器相关配置

工作中经常需要在服务器上来做一下实验,亲自动手看看效果是否与理论描述的相同.用docker可以很方便的配置所需要的环境,以下内容记录了如何用docker配置一个nginx服务器 下载nginx 从默认的中央仓库下载nginx docker pull nginx 启动nginx images并进入后台 docker run -it nginx /bin/bash 通过查看linux发行版知晓用哪个包管理工具 cat /proc/version Linux version 4.14.92-boot2

在CentOS 7中安装nginx服务器

简要地介绍一下,如何在CentOS 7中安装nginx服务器  下载对应当前系统版本的nginx包(package) # wget  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm  建立nginx的yum仓库 # rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm  下载并安装nginx # yum inst

Linux中nginx服务器启动脚本

Linux中nginx服务器启动脚本,将此脚本放入/etc/init.d/目录下,进行启动和关闭,并用chkconfig命令将nginx加入到chkconfig管理中,设置开机自启动. 详细脚本如下: #!/bin/bash #author wangning #date 2017-7-14 #qq 1198143315 #Email [email protected] [ -f /etc/init.d/functions ] && . /etc/init.d/functions #chkc

Linux下安装PHP并在nginx服务器中进行配置的详细方法

先介绍一下使用的环境:centos 7.4, PHP 7.0 , nginx 1.12 Linux系统版本可以通过命令:lsb_release -a 查看. 现在开始步入正题了! 1.  首先查看一下nginx是否已经安装成功. Linux命令:find /|grep nginx.conf  如果安装完成,会显示出你的nginx配置文件所在的目录,我这里的目录是在  /etc/nginx目录下. 不会安装的小伙伴请自行百度,有时间的时候我也会写篇博客专门介绍nginx的安装及其配置等问题,在这里

在阿里云服务器(ECS)上从零开始搭建nginx服务器

本文介绍了如何在阿里云服务器上从零开始搭建nginx服务器.阿里云服务器(ECS)相信大家都不陌生,感兴趣的同学可以到http://www.aliyun.com/product/ecs去购买,或到体验馆去体验(半个月有效期).至于如何注册.管理ECS这里就不详细介绍了.因为官方文档已经写的很清楚了.如果还不清楚,打咨询电话询问. 现在假设你已经拥有了阿里云服务器,ip是139.128.33.11(假的,读者需要换成自己的ip地址).并且没有选择任何安装包.现在ECS是完全空的,除了必须的Linu

FreeBSD上构架Nginx服务器

这篇文章主要记录作者如何在FreeBSD上构架Nginx服务器.作者采用下载该程序的一个源代码包手动编译的方法,而不是使用包管理工具.这样做有两个原因:首先包质量不能保证,或无效或版本旧:其次需要在编译时对多种重要的选项进行配置. 另外,相关FreeBSD初始优化见博主之前的博文. 1          GCC Nginx是一个由C语言编写的程序,因此首先需要在系统上安装编译工具.我们采用常见GNU的GCC.确保系统上安装GCC: # gcc gcc: No input files specif

构建Nginx服务器之三 反向代理Discuz论坛

实验目的: 利用nginx均衡两台lamp下Discuz,其中任意一台lamp的web 宕机,不影响discuz的使用! 实验拓扑: 实验环境: 服务器                           主机名                 IP地址 Nginx服务器                      nginx                  192.168.1.2 Discuz论坛(主mysql)              master                 192.