nginx的location与rewrite

简介: 需要注意的是在location的 / 这个是重点,一定要清楚的知道root表示指明路径为对应的location “/” URL。以右侧/而言;而alias相对于左侧/而言。而且还要明白匹配时的有限顺序,当location匹配到之后就不会看下面的location的。而在 rewrite规则当中,需要明白的时只有规则完成,跳出循环,而其它三种时不可以的,其他三种还是会网下去匹配的。

在安装nginx服务的时候我们有两种选择,一种是在官网下载源码,然后编译安装,这样的好处是可以添加动态编译添加模块;一种是在yum源里下载,但是这样不可以在添加模块了。然后我们还需要注意的是,一定要将nginx的命令添加一个软链,这样才可以在任何路径下都可以使用nginx的命令。
对应location的 / 需要注意的是这里的 / 指的是url是root 路径右边的 / ,但是在alias 里面,这里的 / 指的是alias 左边的 / 。location容器的基本设置,匹配优先级:(= ^~ ~ ~* 不带符号)。
在url重写的过程当中,rewrite这个规则们需要注意的是,breakrewrite规则完成,跳出循环,而其他的三种都是不会跳出循环,还是会继续往下匹配的。
在隐藏版本号的时候,是有两种方法的,一种是在配置文件当中设置,而另一种就是修改源码,然后重新动态编译安装。如果修改了源码之后,就不要在配置文件中在进行版本号隐藏了,不然是不会生效的。在动态编译安装的时候,最好停止服务后在进行动态源码编译安装。
四、主要实验过程
1首先在nginx.org官网下载nginx服务的稳定版,然后拖进www.wgx.com的服务器中,然后进行源代码比编译安装。
源码编译安装nginx步骤:
①:安装基于perl的正则表达式,支持URL重写
yum -y install pcre-devel zlib-devel
②:建立nginx用户
useradd -r nginx
③:预配置(根据实际情况添加或修改功能)
如需支持https 许支持ssl yum -y install openssl-devel
源码编译安装命令:./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio && make && make install
编译完毕后为nginx的主程序设置软链接 ln -sv /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx
图片2.png

nginx 启动nginx服务
nginx -s reload 重载

     stop     停止

nginx -t 检查nginx配置文件语法
以上就是源代码编译安装的全过程,需要注意的是,源代码编译安装nginx服务可以动态编译安装模块,如果是用下载官方的rpm包,就不可以在安装扩展的模块了。
2进入nginx配置文件/etc/nginx/nginx.conf修改配置文件
main配置段:全局配置段

event:定义event模型工作模型工作特性

http {}; 定义http协议相关的配置段

Serve { }; 虚拟主机配置段,可以设置多个

location { }; 配置段

3添加一个虚拟主机,重载服务,将目录建好,用浏览器测试

4 location容器的基本设置,匹配优先级:(= ^~ ~ ~* 不带符号)
root表示指明路径为对应的location “/” URL,以右侧/而言
而alias相对于左侧/而言
= :精确匹配
~ :正则表达式模式匹配检查,区分字符大小写
~*:正则表达式模块匹配检查,不区分字符大小写
^~:URI的前半部分匹配,不支持正则表达式
最后就是不带任何符号匹配
= 精确匹配,匹配的是文件,要用相对路径,并不能匹配目录,

在做精确匹配的时候,匹配的是文件,规则中写的1.jpg是在/wgx123/html当中找,所以当引用图片的时候,用的是相对路径时,就会在这里面找。
~ 正则表达式模式匹配检查,区分字符大小写

因为 = 的匹配规则比 ~ 要高,所以当html中请求1.jpg的时候,会在/wgx123/html目录下去寻找,如果找到就显示出来,找不到就不会显示,并不会匹配下一条的规则。

不带任何符号匹配,location的/aaa指的是/wgx123/html/aaa

当/aaa/ 后面/wgx123/html/ 如果加/,就都加/ 但是浏览器访问的时候,如果不加/就访问不了,加根才可以访问的到

修改index.html文件将里面添加一个图片,这个1.jpg本来应该时放在当前目录下的,也就是/wgx/html/aaa/1.jpg,但是因为规则中如果要找jpg结尾的,就需要在/images目录下找,又因为1.jpg前面是有/aaa的所以会在/images/aaa/目录下找1.jpg。

5 alias 用于location字段中,用于定义路径别名
注意:root表示指明路径为对应的location “/” URL。以右侧/而言; 而alias相对于左侧/而言

6 error_page code [...] [=code] URI | @name错误页面,根据http响应状态码来指定特用的错误页面(也可指定响应码) 注意:在旧版的IE浏览器当中,随便输入url如果错误,也找不到404页面。

7 Nginx下载索引页面设置
autoindex on;
autoindex_localtime on;
注意:在开启了索引页功能后,就不应该在索引页的目录下有index.html文件了。

8 Nginx访问控制,可以定义在http server location范围中
基于IP的访问控制 allow deny

基于用户的访问控制 basic ; digest auth_basic
auth_basic_user_file 帐号密码文件建议用htpasswd来创建
需要下载yum -y install httpd-tools
mkdir /etc/nginx/users htpasswd -c -m /etc/nginx/users/.htpasswd ujiuye

URL重写(用户请求重定向)
URL重写在企业中应用广泛,当域名发生更改和迁移,以及可以方便SEO优化
编写格式:rewrite regex(正则表达式) replacement(跳转的点) flag(标志位);
1将/aaa/跳转到 /bbb/中

注意:这样写是有错误的,因为将/aaa/跳转到/bbb/目录下,只能跳转html的文件,并不能将别的文件跳转到/bbb/目录下,需要用正则表达式来引用。就算没有/aaa/的目录都没有关系,也是可以成功跳转的。

2做定向资源的跳转
将/aaa/2.jpg跳转到/bbb/1.jpg文件

3 定向同类跳转 比如:将.jpg结尾的都跳转的别的目录下中的别的格式

4做URL的全域名跳转
注意:跨站点的跳转是会被客户所知道的,如果在本服务器上跳转,客户可以发现不了。
搭建一个apache服务然后引用nginx服务器的图片

Nginx服务器配置文件的修改

如果想要访问到图片就需要在url即/usr/local/nginx/html/目录下面有1.jpg才可以

访问跳转到https
访问80端口的http跳转到访问443端口的https

如果开启了两个rewrite规则
当访问了www.wgx123.com/aaa/就会跳转到www.wgx123.com/bbb/然后在跳转到https://www.wgx.com/bbb

但是将/aaa/跳转到/bbb/目录下,这一条规则写在https当中,就会不一样,在客户端中就不会显示/bbb/

flag分类
①:last rewrite规则重写完成,不再被其他规则处理,由浏览器对新规则发起请求,重头开始执行。(例如定义Alias别名)
②:break:rewrite规则完成,跳出循环。
③:redirect:以302状态响应码返回新URL,属于临时重定向。
④:permanent:以301状态响应码返回新URL,属于永久重定向。

当将rewrite规则的标志位改为last就会由浏览器对新规则发起请求,重头开始执行。

注意:只有一种情况,才不会匹配下面的规则,就是break

if上下文
通常定义在location或server上下文中
语法:if (condition) {......}
应用环境:server,location
condition:
①变量名 (变量值为空时,或者以“0”开始,即为false,其他的均为true)
②以变量为基础的比较表达式
③可以基于正则表达式模式匹配操作
~:区分大小写模式匹配
~*:不区分大小写的模式匹配检查
!~和!~*:对上面两种测试取反
④测试文件是否存在 -f !-f
⑤测试指定目录是否存在 -d !-d
⑥测试文件是否存在:-e !-e
⑦检查文件是否有执行权:-x !-x

防盗链

注意:因为别人盗取的是/images目录下的图片,而你防止别人盗链,这个防止别人盗链的图片应该是在/usr/local/nginx/html目录下。

nginx网页优化
网页缓存

网页压缩
zip on; #开启gzip压缩功能
gzip_min_length 1k; #设置允许压缩的页面最小字节数
gzip_buffers 4 16k; #设置压缩缓冲区大小,此处设置为4个16K内存作为压缩结果流缓存
gzip_http_version 1.1; #压缩版本
gzip_comp_level 2; #设置压缩比率,最小为1,处理速度快,传输速度慢;9为最大压缩比,处理速度慢,传输速度快
gzip_types text/css text/xml application/javascript; #制定压缩的类型
gzip_vary on; #选择支持vary header;改选项可以让前端的缓存服务器缓存经过gzip压缩的页面

nginx日志切割
Nginx没有自带模块对其日志进行切割,我们可以通过编写脚本,以周期性计划任务方式对nginx日志切割
脚本

修改版本号
在http上下文配置段中加入server_tokens off;即可隐藏版本号,但无法彻底隐藏;若是编译安装,即在编译前进行修改nginx源代码core/nginx.h

define NGINX_VERSION "1.10.3" //第13行 自行修改

注意要写在http与server中间的地方

进行修改源码进行隐藏版本号

停止服务,然后再次源码编译安装

进入nginx配置文件将server_tokens off;去掉,然后去浏览器查看

目录
相关文章
|
5月前
|
自然语言处理 前端开发 应用服务中间件
nginx的Location语法规则
nginx的Location语法规则
|
6月前
|
应用服务中间件 nginx Perl
Nginx系列教程(09) - rewrite
Nginx系列教程(09) - rewrite
62 0
|
6月前
|
应用服务中间件 nginx
Nginx系列教程(07) - Location正则表达式
Nginx系列教程(07) - Location正则表达式
65 0
|
9月前
|
应用服务中间件 nginx
Nginx rewrite(URL)地址重定向
Nginx rewrite(URL)地址重定向
329 0
|
7月前
|
应用服务中间件 nginx
【Nginx】记录 nginx 配置文件中 location下根据 ua (user-agent) 判断移动端和电脑端不同浏览器来源
【Nginx】记录 nginx 配置文件中 location下根据 ua (user-agent) 判断移动端和电脑端不同浏览器来源
94 0
|
7月前
|
运维 Java 应用服务中间件
【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
81 0
|
8月前
|
前端开发 应用服务中间件 PHP
nginx之rewrite
nginx之rewrite
48 0
|
9月前
|
运维 应用服务中间件 nginx
【运维知识进阶篇】Nginx Location语法优先级详解
【运维知识进阶篇】Nginx Location语法优先级详解
81 0
|
9月前
|
应用服务中间件 nginx
nginx: [emerg] duplicate location “/“ in /usr/local/etc/nginx/nginx.conf:142
nginx: [emerg] duplicate location “/“ in /usr/local/etc/nginx/nginx.conf:142
172 0
|
10月前
|
应用服务中间件 nginx
Nginx专题:location
Nginx专题:location
72 0