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

相关推荐

  • 备份练习

    课外整理 cp 功能: 复制文件或目录说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息参数:     -a 或 –archiv…

    Linux干货 2016-08-08
  • 马哥教育网络班第21期+第三周课程作业

    1. 列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who | awk  '{print $1}'|uniq 2.列出最后登录到当前系统的用户的相关信息 last | head -1   3. 读取当前系统上被用户当做其默认shell最多的那个shell cat /etc/pa…

    Linux干货 2016-07-26
  • 推荐-​以各种方式实现yum源,简单暴力,绝对实操干货!

    以各种方式实现yum源,简单暴力,绝对实操干货! 科普:yum不是程序包安装工具,而是rpm包前端管理工具,通过yum可以更好的管理rpm的安装卸载 以各种方式实现yum源,简单暴力,绝对实操干货! 一、本地yum源之“挂载光盘镜像实现”! 二、本地yum源之“挂载本地磁盘上的镜像文件”! 三、如能上网,实现自定义指定镜像网站yum源 四、炸天重磅来袭!!!…

    Linux干货 2016-04-11
  • sed与vim相关练习

    sed 练习 以行为单位的新增/删除功能 1将 /etc/passwd 的内容列出并且打印行号,同时,请将第 2~5 行删除! 2在第二行后(亦即是加在第三行)加上“the is xing line?”字样! 3在第二行前(亦即是加在第而行)加上“the is xing line?”字样! 4在第二行后面加入两行字,例如“the is xing line &…

    Linux干货 2016-08-10
  • 一个PHP程序员学习运维的转型

         我是一位PHP开发工程师,平时负责前端、后端以及服务器端的工作,但是称不上是个牛逼的程序员。网上热烈讨论一则传闻,“全栈工程师”(Full Stack Engineer),要求应征者对开发堆栈的每个方面都有所掌握。那究竟何为 “全栈工程师”呢?从字面上来理解,全栈工程师必须熟悉开发堆栈的每一个层次,或者至少熟悉绝大多数…

    Linux干货 2017-04-02
  • mysql进阶之MySQL查询

    一、MySQL多表查询和子查询 别名:as        表别名        字段别名        查询结果亦可命名别名   联结查询:事先将两张或多张表join,根…

    2016-11-18