nginx返回超大数据(nginx返回文件内容)
nginx返回文件内容
第一种:Nginx自己的错误页面
Nginx访问一个静态的html 页面,当这个页面没有的时候,Nginx抛出404,那么如何返回给客户端404呢?
看下面的配置,这种情况下不需要修改任何参数,就能实现这个功能。
server {
listen 80;
server_name www.test.com;
root /var/www/test;
index index.html index.htm;
location / {
}
# 定义错误页面码,如果出现相应的错误页面码,转发到那里。
error_page 404 403 500 502 503 504 /404.html;
# 承接上面的location。
location = /404.html {
# 放错误页面的目录路径。
root /usr/share/nginx/html;
}
}
第二种:反向代理的错误页面
如果后台Tomcat处理报错抛出404,想把这个状态叫Nginx反馈给客户端或者重定向到某个连接,配置如下:
upstream www {
server 192.168.1.201:7777 weight=20 max_fails=2 fail_timeout=30s;
ip_hash;
}
server {
listen 80;
server_name www.test.com;
root /var/www/test;
index index.html index.htm;
location / {
if ($request_uri ~* ‘^/$’) {
rewrite .* http://www.test.com/index.html redirect;
}
# 关键参数:这个变量开启后,我们才能自定义错误页面,当后端返回404,nginx拦截错误定义错误页面
proxy_intercept_errors on;
proxy_pass http://www;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-FOR $proxy_add_x_forwarded_for;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
}
第三种:Nginx解析php代码的错误页面
如果后端是php解析的,需要加一个变量
在http段中加一个变量
fastcgi_intercept_errors on就可以了。
指定一个错误页面:
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
指定一个url地址:
error_page 404 /404.html;
error_page 404 = http://www.test.com/error.html;
nginx 返回字符串
nginx代理出现403异常,可通过以下几个原因排查:
一、由于启动用户和nginx工作用户不一致所致
1.1查看nginx的启动用户,发现是nobody,而为是用root启动的
命令:ps aux | grep "nginx: worker process" | awk'{print $1}'
1.2将nginx.config的user改为和启动用户一致,
命令:vi conf/nginx.conf
二、缺少index.html或者index.php文件,就是配置文件中index index.html index.htm这行中的指定的文件。
1. server {
2. listen 80;
3. server_name localhost;
4. index index.php index.html;
5. root /data/www/;
6. }
如果在/data/www/下面没有index.php,index.html的时候,直接文件,会报403 forbidden。
三、权限问题,如果nginx没有web目录的操作权限,也会出现403错误。
解决办法:修改web目录的读写权限,或者是把nginx的启动用户改成目录的所属用户,重启Nginx即可解决
1. chmod -R 777 /data
2. chmod -R 777 /data/www/
四、SELinux设置为开启状态(enabled)的原因。
4.1、查看当前selinux的状态。
1. /usr/sbin/sestatus
4.2、将SELINUX=enforcing 修改为 SELINUX=disabled 状态。
1. vi /etc/selinux/config
2. #SELINUX=enforcing
3. SELINUX=disabled
4.3、重启生效。reboot。
1. reboot
nginx返回200没数据
1、nigix是否在正常运行,需要用linux命令查看nginx运行情况。执行命令:ps -A | grep nginx。
如果返回结果的话,说明有nginx在运行,服务已经启动。如果不怕nginx关闭的话。也可以执行:service nginx restart。
把nginx服务重启,在重启时,也可以看到具体有没有什么地方出错。
2、看端口netstat -ntlp;
看进程ps -ef|grep nginx;
看日志是否更新tail -f access.log。
3、直接查看进程id:ps -C nginx -o pid。
这种直接返回pid的方式比较适合跟其他程序结合使用,比如在shell/python脚本中执行这个命令拿到pid,让后根据pid来判断Nginx是否启动。 推荐使用这种方式。
nginx返回302
首先看一个完整代码示例,关于nginx 301 302跳转的。 301跳转设置: server { listen 80; server_name downcc; rewrite ^/(; rewrite ^/(.*) /$1 permanent; } last – 基本上都用这个Flag。 break – 中止Rewirte,不在继续匹配 redirect – 返回临时重定向的HTTP状态302 permanent – 返回永久重定向的HTTP状态301 Nginx的重定向用到了Nginx的HttpRewriteModule,下面简单解释以下如何使用的方法: rewrite命令 nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下: rewrite 正则表达式 替换目标 flag标记 flag标记可以用以下几种格式: last – 基本上都用这个Flag。 break – 中止Rewirte,不在继续匹配 redirect – 返回临时重定向的HTTP状态302 permanent – 返回永久重定向的HTTP状态301 特别注意: last和break用来实现URL重写,浏览器地址栏的URL地址不变,但是在服务器端访问的路径发生了变化; redirect和permanent用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址; 例如下面这段设定nginx将某个目录下面的文件重定向到另一个目录,$2对应第二个括号(.*)中对应的字符串: location /download/ { rewrite ^(/download/.*)/m/(.*)..*$ $1/nginx-rewrite/$2.gz break; } nginx重定向的IF条件判断 在server和location两种情况下可以使用nginx的IF条件判断,条件可以为以下几种: 正则表达式 如: 匹配判断 ~ 为区分大小写匹配; !~为区分大小写不匹配 ~* 为不区分大小写匹配;!~为不区分大小写不匹配 例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下: if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /nginx-ie/$1 break; } 文件和目录判断 -f和!-f判断是否存在文件 -d和!-d判断是否存在目录 -e和!-e判断是否存在文件或目录 -x和!-x判断文件是否可执行 例如下面设定nginx在文件和目录不存在的时候重定向: if (!-e $request_filename) { proxy_pass 127.0.0.1; } return 返回http代码,例如设置nginx防盗链: location ~* .(gifjpgpngswfflv)$ { valid_referers none blocked ; if ($invalid_referer) { return 404; } }
nginx直接返回应答数据
499含义:客户端发起请求后,一段时间内没有收到代理服务器的应答,导致连接失败
499状态码只要不是大规模出现,都是正常的状态码,是nginx记录客户端在和服务端建连之后,没开始传输数据就断会记录499,如果是客户端【主动】断开的,服务端就记录499,未必跟后端服务有关
出现种情况有两种可能:
1.代理服务器认为客户端发起的请求过于危险,所以主动给断了
2.代理服务器实在么得办法连接到其他服务,导致timeout
解决方法:
1.修改nginx配置(改为开启)
Syntax: proxy_ignore_client_abort on | off; #代理服务器是否主动关闭连接 Default: proxy_ignore_client_abort off; Context: http, server, location Determines whether the connection with a proxied server should be closed when a client closes the connection without waiting for a response.
2.查看下代理服务器和真正服务器的端口连接,看下是否有端口不通,开放端口。
本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.