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 15:22
下一篇 2016-11-05 19:11

相关推荐

  • 3.26第一篇博客

    1.安装VNC viewer (VNC是一款远程控制软件,即便版本不一样也可以互通) 安装好后,进入界面,可以直接在上方数据栏里输入服务器端的主机名或IP地址,即可建立连接。 二.安装VMware (VMware是一款可以控制和管理虚拟化的IT环境 可以跑各种的操作系统) 1.首先在内网ftp://172.16.0.1/pub/tools找到VMware版本…

    2018-03-26
  • RAID磁盘冗余探究

    RAID磁盘冗余探究 RAID的全称是Redundant Arrays of Inexpensive Disk,可以翻译为廉价的磁盘冗余阵列。由加利福尼亚大学伯克利分校的一位教授在1988年提出,是一种磁盘管理方式。其产生的初衷是为了降低成本,但是为了达到RAID的功能,其造价并不便宜,所以后来改为Redundant Arrays of Independen…

    2017-08-26
  • ThirdWeek_SecondDay

    Python学习笔记整理

    Linux干货 2017-10-09
  • Ansible的常用模块

    command模块: 目的:在指定节点上运行hostname命令 命令:ansible 192.168.1.16 -m command  ‘hostname’copy模块:目的:把主控端/root目录下的a.sh文件拷贝到到指定节点上 命令:ansible 192.168.1.16 -m copy -a ‘src=/roo…

    Linux干货 2017-10-31
  • Git 分布式 Moosefs + Corosync + DRBD 集群

        对于 Git 集群来说,在不采用存储阵列的情况下,分布式存储系统是一个很好的解决方案。目前可使用的分布式文件系统,初步了解了一下,Git 是属于小文件的应用,因此可考量的我想就只有目前的 Moosefs、Ceph 了,Ceph 目前好似国内应用不多,貌似不太稳定。至于 GlusterFS 其比较适用于大文件的应…

    Linux干货 2016-02-22
  • Linux 文本处理,文本工具,查看,分析,统计文本文件,grep,正则表达式

    文本处理 各种文本工具,查看,分析,统计文本文件 grep 正则表达式 扩展正则表达式 sed cat -n f1 加行号(空格行都计算) cat -b f1 加行号(只计算有字符的行) cat -ns f1 加行号(压缩空行) cat -v f1 能看windows文件的M`符号 cat -T f1 能够显示里面的tab空位,显示为^I cat -A f1…

    Linux干货 2016-08-07