Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Nginx http相关常用配置总结

Nginx http相关常用配置总结

作者头像
授客
发布于 2019-09-11 08:41:51
发布于 2019-09-11 08:41:51
1.5K0
举报
文章被收录于专栏:授客的专栏授客的专栏

测试环境

nginx-1.10.0

client_max_body_size

Syntax: client_max_body_size size;

Default: client_max_body_size 1m;

Context: http, server, location

设置允许的客户端请求体大小最大值,请求头域Content-Length指明的值。如果请求体大小超过配置设置值,返回413错误给客户端。需要注意的是,浏览器不定义可以正确的展示该错误。设置client_max_body_size 为0,禁用请求体大小检查。

例:设置客户端允许上传文件最大不超过15m

http {

……

client_max_body_size 15m;

……

}

参考链接:

http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size

location

Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }

location @name { ... }

Default: —

Context: server, location

可用前缀字符串、正则表达式定义location,如果是正则表达式,则需要指定修饰符 ~*(大小写不敏感) 或者是 ~(大小写敏感)。为了在请求URI中查找匹配的location,nginx先匹配前缀字符串location,如果有多个匹配则会先记住拥有最长匹配前缀字符串的location(即匹配度最高的那个,和其在配置文件中的顺序无关),然后按location定义在配置文件中出现的顺序,从上到下,匹配正则表达式location,如果找到第一个匹配的location则停止查找,并使用这个location处理该请求,否则使用之前记住的最长匹配前缀字符串location。

location可支持嵌套。

特殊情况,如果最长匹配前缀location携带 ^~,则不会匹配正则表达式location。另外,如果使用 = 修饰符,则定义精确匹配URI location。如果找到精确匹配URI的location,则停止查找,这样在某些情况下,可以加速请求处理速度。这样的location显然不支持包含嵌套location。

例子:

假设nginx服务器地址192.168.1.102,监听端口8080,

location = / {

[ configuration A ]

}

location / {

[ configuration B ]

}

location /documents/ {

[ configuration C ]

}

location ^~ /images/ {

[ configuration D ]

}

location ~* \.(gif|jpg|jpeg)$ {

[ configuration E ]

}

如上配置

请求 http://192.168.1.102:8080/ 执行配置A

请求 http://192.168.1.102:8080/test.html 执行配置B,也就是说 / 匹配字符串,匹配任何URI

请求 http://192.168.1.102:8080/documents/document.html,执行配置C

请求 http://192.168.1.102:8080/images/1.gif,执行配置D

请求 http://192.168.1.102:8080/documents/1.jpg,执行配置E

总结:

= prefix_match_string 表示要求URI和prefix_match_string精确匹配,如果匹配成功,则停止搜索并用当前location处理此请求

~ regular_expression 表示正则表达式regular_expression同URI正则匹配,并且区分大小写

~* regular_expression 表示正则表达式regular_expression同URI正则匹配,但不区分大小写

^~ prefix_match_string 表示要求URI和prefix_match_strin“模糊”匹配找到最匹配location,则使用该location处理此请求,并不再进行正则匹配

参考链接:

http://nginx.org/en/docs/http/ngx_http_core_module.html#location

root

Syntax: root path;

Default:

root html;

Context: http, server, location, if in location

说明:

为请求设置根目录。path值支持变量($document_root 和$realpath_root除外)

例子:

location /i/ {

root /data/w3;

}

假设top.gif文件路径为/data/w3/i/top.gif, 请求URI为/i/top.gif,那么如果location匹配该URI,则服务器将会把/data/w3/i/top.gif返回给客户端,如果/data/w3/i/目录下不存在top.gif文件,那么默认的,nginx将会返回404错误。

通常,我们会这么做,把静态资源放nginx服务器,优先从nginx服务器上获取静态资源返回给前端,如果nginx服务器上找不到该文件,则去后端请求对应资源,如下:

location ~ \.(gif|jpg|png|html|js|css|zip|ico|json)$ {

root /data/Platform/;

//如果找不到请求文件,则转发请求到10.202.95.86:8080

if (!-e $request_filename){

proxy_pass http://10.202.95.86:8080;

break;

}

}

注意:if和(之间要有个空格,否则会报类似如下错误:

nginx: [emerg] unknown directive "if(" in /usr/local/ngnix/conf/nginx.conf:81

附文件和目录判断 -f 存在文件

!-f 不存在文件 -d 存在目录

!-d 不存在目录 -e 存在文件或目录

!-e 不存在文件或目录 -x 文件可执行

!-x 文件不可执行

参考链接:

http://nginx.org/en/docs/http/ngx_http_core_module.html#root

index

设置默认展示页面。

例子:

location / {

root html;

index index.html index.htm;

}

假设为配置location = / {}这种配置,那么当用户发起诸如 http://192.168.1.102:8080/、http://192.168.1.102/的请求时,自动匹配该location, nginx会在 root 配置指令指定的文件系统目录(默认html目录)下,按index指令设置,依次寻找 index.html 和index.htm这两个文件。如果 index.html 文件存在,则直接发起“内部跳转”到 /index.html 这个新的地址;如果 index.html 文件不存在,则继续检查 index.htm 是否存在。如果存在,同样发起“内部跳转”到/index.htm;如果 index.htm 文件仍然不存在,则404错误。

注意:假设请求携带非 / 的URI,形如http://192.168.1.102:8080/test.html,且仅匹配location / 则,则只会在html目录下查找该文件,如果找到了则返回,否则返回404,并不会执行index指令。

官网参考链接:无

rewrite

Syntax: rewrite regex replacement [flag];

Default: —

Context: server, location, if

如果指定正则表达式匹配某个请求URI,那么URI被替换为replacement字符串给定的值,然后继续处理这个替换后的请求。如果配置了多个rewrite指令,按rewrite指令在配置文件中出现的先后顺序执行。如果replacement以http://,https开头,则不进行URI替换,直接跳转到replacement给定的连接。

flag可选参数值如下:

last

停止当前指令集,并为改变都的URI开启一轮新的匹配。(stops processing the current set of ngx_http_rewrite_module directives and starts a search for a new location matching the changed URI;)

break

停止后续指令的处理。

redirect

返回临时的302重定向 仅replacement 不以http,https开头(returns a temporary redirect with the 302 code; used if a replacement string does not start with “http://”, “https://”, or “$scheme”;)

permanent

返回301永久重定向(returns a permanent redirect with the 301 code.)

The full redirect URL is formed according to the request scheme ($scheme) and the server_name_in_redirect and port_in_redirect directives.

更多资料(略)……

例子:

location = / {

rewrite / /home.html;

}

假设请求为:http://192.168.1.102/,那么将匹配以上location,并重写请求为:http://192.168.1.102/home.html

需要注意的地方是:

Syntax: rewrite regex replacement [flag];

当regex为 /,形如 rewrite / /index.html;且请求URI不为 /, 形如 http://192.168.1.102/index.html, 不能放在非 = / 定义的location中,否则会出现类似如下的错误:

*50 rewrite or internal redirection cycle while processing "/index.html"

另外,重写URI后,又会按新的URI发起新的请求,且进行location匹配,如下:

location = / {

rewrite / /index22.html;

}

location / {

root html;

rewrite / http://192.168.1.102/index.html;

index index.html index.htm;

}

假设请求为:http://192.168.1.102/,访问结果为:直接重定向到 http://192.168.1.102/index.html了。

参考链接:

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite

error_page

Syntax: error_page code ... [=[response]] uri;

Default: —

Context: http, server, location, if in location

定义用于显示指定请求错误的请求URI

例子:

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

当出现 500,502等错误时,会修改客户端请求方法GET,内部请求指定URI(/50x.html),即访问http://host:port/50x.html页面并返回给客户端展示。

还可以通过=response语法,改变响应代码。

error_page 404 =200 /empty.gif;

如果内部跳转过程中,不需要修改URI和方法,还可以传递错误处理到某个location

location / {

error_page 404 = @fallback;

}

location @fallback {

proxy_pass http://backend;

}

如果uri处理出错,返回最后产生的状态码给客户端。

也可以使用url重定向

error_page 403 http://example.com/forbidden.html;

error_page 404 =301 http://example.com/notfound.html;

更多资料参考:

http://nginx.org/en/docs/http/ngx_http_core_module.html#error_page

http://nginx.org/en/docs/http/ngx_http_core_module.html#http

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nginx静态资源服务的配置
上面配置中的http、server、location等都是指令块。指令块配置项之后是否如参数(例如 location /),取决于解析这个块配置项的模块。
mazhen
2023/11/24
3.5K0
Nginx静态资源服务的配置
Nginx系列(三):nginx配置域名转发、反向代理、负载均衡
当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false直接比较变量和内容时,使用=或!=~正则表达式匹配,~*不区分大小写的匹配,!~区分大小写的不匹配 2. 全局环境变量
鳄鱼儿
2024/05/21
16.8K0
Nginx Location 匹配规则
Nginx 的 location 用于匹配 URI 不同路径的请求,实现对请求的细分处理。例如当客户端请求 https://www.nginx-test.com/index.html 时,Nginx 使用本地的静态文件响应,而当客户端请求相同地址的 https://www.nginx-test.com/api 时,Nginx 将请求转发到后端服务器。
Se7en258
2021/07/01
1.5K0
nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理
Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案。nginx可以用轮询、IP哈希、URL哈希等方式调度后端服务器,同时也能提供健康检查功能。目前有众多公司均已经部署使用nginx实现基于七层的负载均衡功能。 1)Nginx负载均衡 为了实现Nginx的反向代理以及负载均衡功能,应用中需要用到两个模块,HttpProxyModule和HttpUpstreamModule模块;其中HttpProxyModule模块的作用是将用户的数据请求转发到其他服
洗尽了浮华
2018/01/23
8K0
nginx负载均衡(5种方式)、rewrite重写规则及多server反代配置梳理
Nginx之动静分离解读
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
一个风轻云淡
2023/10/02
2970
了解Nginx
如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。
java架构师
2019/01/28
6280
了解Nginx
nginx 详解 - 详细配置说明
打开官网 https://nginx.org/en/linux_packages.html#stable
solocoder
2022/04/06
3.7K0
nginx 详解 - 详细配置说明
Nginx配置段(3)
安装方法: rpm及源码安装: # ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path
py3study
2020/01/10
5790
建议收藏 | 彻底搞懂 Nginx 的五大应用场景
导读:Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。
码农架构
2021/07/09
1K0
建议收藏 | 彻底搞懂 Nginx 的五大应用场景
开发必备的nginx常用功能使用说明指南
示例:nginx官方文档->Modules reference->ngx_http_gzip_module
lyb-geek
2022/03/10
5840
开发必备的nginx常用功能使用说明指南
Nginx系列教程(7)nginx rewrite配置规则详细说明
注:nginx官方文档:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
haikangweishi
2020/04/07
7.4K0
Nginx系列:root与alias指令用法的区别
从语法上看root和alias指令都可以定义在location模块中,都是用来指定映射服务器静态资源文件的命令。例如,访问的html文件、视频、图片文件等都可以通过root和alias指令配置访问。虽然使用方法比较相似,但是非常容易混淆,特别是root命令的使用方式,经常会被误解。
BUG弄潮儿
2020/09/14
8.3K0
Nginx 配置详解
地址重写:为了标准化网址,比如输入baidu.com和www.baidu.com,都会被重写到www.baidu.com,而且我们在浏览器看到的也会是 www.baidu.com
白墨石
2022/05/11
6.4K0
【Nginx06】Nginx学习:HTTP核心模块(三)Location
Location 是整个 HTTP 模块中非常重要的一个子模块,它是为某个请求URI(路径)建立配置。这个模块又是属于 Server 模块的子模块,同时它还可以嵌套在另一个 Location 模块下面,因此,它的作用范围是 server 和 location 。其实,说白了,也就是我们可以为指定的一些路径去做一些额外的配置。
硬核项目经理
2023/08/09
9970
【Nginx06】Nginx学习:HTTP核心模块(三)Location
Nginx 路由转发配置笔记
Nginx 路由转发配置笔记 由于预算有限,只有一台服务器,想要玩的东西不少,所以这个台服务器上会提供多重服务,因此涉及到的nginx转发就必有重要了 由nginx做请求代理,提供多种服务 php搭建的网站 hexo创建的博客系统 spring-boot & tomcat搭建的后台 静态网页 本片配置笔记中,主要集中以下几个内容 location的匹配规则是怎样的 如何实现路由转发(反向代理) 如何修改请求的路径(如请求的是 a/index.html 改为 a/public/index.html) I.
一灰灰blog
2018/02/06
6.9K0
【随手记】Nginx配置详解
Nginx 是一个高性能的 HTTP 服务器和反向代理,它以其稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。Nginx主要用来处理HTTP请求,提供负载均衡、静态内容服务、反向代理等功能。
客怎眠qvq
2024/04/26
4.3K0
【随手记】Nginx配置详解
五分钟学NGINX-详解nginx的11个请求阶段
Nginx,作为当今最流行的开源Web服务器之一,以其高性能、高稳定性和丰富的功能而闻名。在处理HTTP请求的过程中,Nginx采用了模块化的设计,将整个请求处理流程划分为若干个阶段,每个阶段都可以由特定的模块来处理。这种设计不仅使得Nginx具有极高的灵活性和可扩展性,而且也方便了开发者对Nginx进行定制和优化。我们将深入探讨Nginx处理HTTP请求的11个阶段,揭示其背后的工作原理。
五分钟学SRE
2024/04/22
2.5K0
Nginx系列(二):Nginx 配置文件说明
从配置文件开始到 events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行 Nginx服务器的用户(组)、允许生成的 worker process数,进程PD存放路径、日志存放路径和类型以及配置文件的引入等。
鳄鱼儿
2024/05/21
1980
深入理解Nginx的rewrite模块
rewrite模块即ngx_http_rewrite_module模块,主要功能是改写请求URI,是Nginx默认安装的模块。rewrite模块会根据PCRE正则匹配重写URI,然后发起内部跳转再匹配location,或者直接做30x重定向返回客户端。
sunsky
2020/08/20
1.8K0
Nginx的rewrite(地址重定向)剖析
rewrite是实现URL重定向的重要指令,他根据regex(正则表达式)来匹配内容跳转到replacement,结尾是flag标记
kirin
2020/09/09
2K0
相关推荐
Nginx静态资源服务的配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档