Nginx配置进阶

目录

  • ngx_http_rewrite_module模块

  • ngx_http_gzip_module模块

  • ngx_http_fastcgi_module模块

  • ngx_http_ssl_module模块

  • ngx_http_referer_module模块

ngx_http_rewrite_module模块

将用户某一次请求的URI当中的字符串是不是能够被我们给出的regex所描述的模式所匹配,如果能,则替换为新的URL

1、rewrite

语法格式:rewrite regex replacement [flag] 
    Default: — 
    Context: server, location, if

将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI; 


注意:如果在同一级配置块中存在多个rewrite规则,那么会自上而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制; 


如果replacement是以http://或https://的绝对路径开头,则替换结果会直接以重定向返回给客户端;

[flag]: 
    last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环;

    break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环;

    redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;

    permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;

2、return

语法:return code [text]; 
    return code URL; 
    return URL; 
    Default: — 
    Context: server, location, if

停止处理并将指定的代码返回给客户端

3、rewrite_log

语法:rewrite_log on | off; 
    Default: rewrite_log off; 
    Context: http, server, location, if

是否开启重写日志

4、if

语法:if (condition) { … } 
    Default: — 
    Context: server, location

引入一个新的配置上下文 ;条件满足时,执行配置块中的配置指令;server, location;

condition: 
    比较操作符: 
        == 
        != 
        ~:模式匹配,区分字符大小写; 
        ~*:模式匹配,不区分字符大小写; 
        !~:模式不匹配,区分字符大小写; 
        !~*:模式不匹配,不区分字符大小写; 

    文件及目录存在性判断: 
        -e, !-e 
        -f, !-f 
        -d, !-d 
        -x, !-x

5、set

语法:set $variable value; 
    Default: — 
    Context: server, location, if

用户自定义变量

6、break

语法:Syntax: break; 
    Default: — 
    Context: server, location, if

停止处理当前ngx_http_rewrite_module指令集。

简单示例

W53JV@~]V{FX}9MN%GV9ZEJ.png

20IC`}8}I3{8`ZDW@YXEE5Q.png

ngx_http_gzip_module模块

ngx_http_gzip_module模块是一个过滤器,压缩响应使用“gzip”方法。这往往有助于减少一半或更多的传输数据的大小。

1、gzip

语法:gzip on | off; 
    Default: gzip off; 
    Context: http, server, location, if in location

是否开启gzip功能

2、gzip_comp_level

语法:gzip_comp_level level; 
    Default: gzip_comp_level 1; 
    Context: http, server, location

指定压缩比,1-9

3、gzip_disable

语法:gzip_disable regex …; 
    Default: — 
    Context: http, server, location

对被指定的模式所匹配到的浏览器禁用gzip功能

4、gzip_min_length

语法:gzip_min_length length; 
    Default: gzip_min_length 20; 
    Context: http, server, location

启用压缩功能的响应报文最小长度

5、gzip_buffers

语法:gzip_buffers number size; 
    Default: gzip_buffers 32 4k|16 8k; 
    Context: http, server, location

支持实现压缩功能时为其配置的缓冲区数量及每个缓存区的大小;

6、gzip_proxied

语法:gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …; 
    Default: gzip_proxied off; 
    Context: http, server, location

nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的; 
off:对代理的请求不启用 
no-cache, no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;

7、gzip_types

语法:gzip_types mime-type …; 
    Default: gzip_types text/html; 
    Context: http, server, location

压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;

8、gzip_vary

语法:gzip_vary on | off; 
    Default: gzip_vary off; 
    Context: http, server, location

如果启用了gzip功能是否在响应报文首部添加Vary: Accept-Encoding项

配置示例

~8(9L]8ZY544JIF7ODR9CEP.png

Z_7`VY376}E7Y%MLFKP(WRN.png

ngx_http_fastcgi_module模块

ngx_http_fastcgi_module模块允许通过请求FastCGI服务器,将动态页面发送至FastCGI服务器解释执行

1、fastcgi_pass

语法:fastcgi_pass address; 
    Default: — 
    Context: location, if in location

fastcgi服务器IP地址

2、fastcgi_index

语法:fastcgi_index name; 
    Default: — 
    Context: http, server, location

fastcgi默认的主页资源;

3、fastcgi_param

语法:fastcgi_param parameter value [if_not_empty]; 
    Default: — 
    Context: http, server, location

设置一个参数,将此参数传递给FastCGI服务器。该值可以包含文本、变量和它们的组合。

配置php-fpm示例

1.安装php-fpm和mysql
[root@centos7 ~]# yum -y install php-fpm mariadb-server
2.Nginx配置文件

@NQ(`1[ASMH2`$AL[OE(J2T.png

3.测试访问

FRN7VMRHNMV}ZV93C~PVFTP.png

5T05HW0PH5HCNFYLATZK9[L.png

4、fastcgi_cache_path

语法:fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]; 
    Context: http

定义fastcgi的缓存;缓存位置为磁盘上的文件系统,由path所指定路径来定义;

    levels=levels:缓存目录的层级数量,以及每一级的目录数量;levels=ONE:TWO:THREE 
        leves=1:2:2 
    keys_zone=name:size 
        k/v映射的内存空间的名称及大小 
    inactive=time 
        非活动时长 
    max_size=size 
        磁盘上用于缓存数据的缓存空间上限

5、fastcgi_cache

语法:fastcgi_cache zone | off; 
    Default: fastcgi_cache off; 
    Context: http, server, location

调用指定的缓存空间来缓存数据;http, server, location

6、fastcgi_cache_key

语法:fastcgi_cache_key string; 
    Default: — 
    Context: http, server, location

定义用作缓存项的key的字符串;

7、fastcgi_cache_methods

语法:fastcgi_cache_methods GET | HEAD | POST …; 
    Default: fastcgi_cache_methods GET HEAD; 
    Context: http, server, location

为哪些请求方法使用缓存;

8、fastcgi_cache_min_uses

语法:astcgi_cache_min_uses number; 
    Default: fastcgi_cache_min_uses 1; 
    Context: http, server, location

缓存空间中的缓存项在inactive定义的非活动时间内至少要被访问到此处所指定的次数方可被认作活动项;

9、fastcgi_cache_valid

语法:fastcgi_cache_valid [code …] time; 
    Default: — 
    Context: http, server, location

不同的响应码各自的缓存时长;

10、fastcgi_keep_conn

语法:fastcgi_keep_conn on | off; 
    Default: fastcgi_keep_conn off; 
    Context: http, server, location

默认情况下,一个FastCGI服务器将发送响应后关闭连接正确。然而,当这个指令设置的值,Nginx会指示一个FastCGI服务器保持连接打开。

fastcgi_cache配置示例

1.Nginx配置文件
7UFD08SX6(]KD{%KYGC7MVX.png

%K_8FFSW7Y0QM70{JD%WP}L.png

2.启用缓存功能前做压测
3L)P{7@)@W3NH@YT5VAFG8A.png
3.启用缓存功能后做压缩
KB~E@3IO2$7OLX)UX9XQFCI.png
4.生成缓存文件

[A$$7{J{CR~W8DZEM`$FPLA.png

ngx_http_ssl_module模块

ngx_http_ssl_module模块提供HTTPS功能支持

1、ssl

语法:ssl on | off; 
    Default: ssl off; 
    Context: http, server

是否开启ssl功能

2、ssl_certificate

语法:ssl_certificate file; 
    Default: — 
    Context: http, server

当前虚拟主机使用PEM格式的证书文件;

3、ssl_certificate_key

语法:ssl_certificate_key file; 
    Default: — 
    Context: http, server

当前虚拟主机上与其证书匹配的私钥文件;

4、ssl_protocols

语法:ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]; 
    Default: ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    Context: http, server

支持ssl协议版本,默认为后三个;

5、ssl_session_cache

语法:ssl_session_cache off | none | [builtin[:size]] [shared:name:size]; 
    Default: ssl_session_cache none; 
    Context: http, server

builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;

[shared:name:size]:在各worker之间使用一个共享的缓存;

6、ssl_session_timeout

语法:ssl_session_timeout time; 
    Default: ssl_session_timeout 5m; 
    Context: http, server

客户端一侧的连接可以复用ssl session cache中缓存 的ssl参数的有效时长;

ssl配置示例

1.CA配置
IER37)V1[O`62D3K}]Y5B[J.png
2.nginx端生成签署请求
{YLZUTG~2FTP2$KPME{1Q`F.png
3.CA签证

`JLE)O@$}YAXN61HR3@UK3G.png

4.Nginx配置文件

5EBSJ$~V]R8O6K$A$GER77V.png

5.测试

6MTNY65{Y%VI6FZPYW[Y[[K.png

_YAEL7IHNN`~BOTT8_0A)L4.png

ngx_http_referer_module模块

ngx_http_referer_module模块是用来阻止访问一个在referer头域值无效请求的网站。

1、valid_referers

语法:valid_referers none | blocked | server_names | string …; 
    Default: — 
    Context: server, location

定义referer首部的合法可用值;

none:请求报文首部没有referer首部; 
blocked:请求报文的referer首部没有值; 
server_names:参数,其可以有值作为主机名或主机名模式; 
    arbitrary_string:直接字符串,但可使用*作通配符; 
    regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*.magedu.com;

配置示例

valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;

if($invalid_referer) {
   return 403;
}

原创文章,作者:zhai796898,如若转载,请注明出处:http://www.178linux.com/57665

(0)
zhai796898zhai796898
上一篇 2016-11-05
下一篇 2016-11-05

相关推荐

  • 第一周-N28

    1、描述计算机的组成及功能 我们现在常用的计算机,包括手机及智能设备,通常由五大部件组成(冯若依曼提出),如下图所示: 五大部件: 运算器:做算数运算(加减乘除取余)和逻辑运算(移位) 控制器:控制各部分协调的功能。 CPU包括以下四个部分:运算器、控制器、寄存器、缓存 I/O设备:即输入输出设备,用于跟外部交互。通常为磁盘、键盘、鼠标、显示器、打印机等。I…

    2017-12-04
  • bash编程尾声

    数组 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合。 数组名和索引     索引:编号从0开始,属于数值索引     注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引, bash4.0版本之后开始支持。  &nb…

    Linux干货 2016-08-25
  • vim 编辑器 定时任务 bash基础

    vim 编辑器 定时任务 bash基础

    2017-10-17
  • alias——Linux基本命令(4)

    1.     alias别名 (1)查看、设置别名 Linux系统提供了一个有用的工具叫alias,可以让我们将一些需要频繁使用的但又过于冗长的命令设置一个别名,这样一来,以后只需输入一个简短的别名就可以达到同样的作用。 alias显看当前已定义的别名   使用aliasaliname=’comm…

    2017-07-13
  • 第十九周作业

    1.描述tomcat的架构 tomcat服务器是一种Servlet/jsp容器,更实质性的说是Servlet容器,因为jsp最终还是被编译成servlet来执行的。而对于servlet来说,其最长见的用途是扩展java web服务器功能,为来自web客户的请求提供服务。它完全运行在java虚拟机上。由于它的运行在服务器端,因此他的运行不依赖于浏览器。 tom…

    2017-07-11
  • 第一周总结(linux系统初识和简单命令)

    一、linux操作系统初识         了解操作系统之前我们需要先了解一下计算机的硬件组成,因为操作系统都是运行在硬件之上。遵循冯诺依曼体系,计算机是由控制器、运算器、存储器、输入设备、输出设备五部分组成。对应到我们现在使用计算机上硬件分别为:        &nb…

    Linux干货 2016-12-26