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

相关推荐

  • Linux的哲学思想

    Linux的哲学思想 linux有个哲学的思想是一切皆文件 其中linux硬件设备也是通过文件来表示的 物理终端 物理终端指的是显示器等硬件终端设备,文件存在于 /dev/console 这个路径下 虚拟终端 虚拟终端指的是在linux命令行连接的终端,文件存在于 /dev/tty# [1,6] 这个路径下 串行终端 指的是使用计算机串行端口连接的终端设备,…

    Linux干货 2018-02-23
  • 基础指令的使用篇2 Linux版

    #echo -e "\033[41;33:4:5m"\033[0m] man命令 /usr/share/man 地址 whatis passwd 查看passwd的man 章节 man n passwd 显示passwd的第几章man文件 man -a passwd 列出所有的章节     -f   &nbs…

    Linux干货 2016-08-04
  • Nginx 编译安装

    简介 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配…

    Linux干货 2016-12-01
  • 马哥教育网络21期+第十一周练习博客(下)

    马哥教育网络21期+第十一周练习博客(下) 3、描述DNS查询过程以及DNS服务器类别。 DNS:Domain Name Service 通俗的称为地址解析,使用TCP和UDP的53端口,是属于应用层的协议; DNS查询有2种方式:     递归查询:至发送一次请求,就能找到最终的结果的查…

    Linux干货 2016-09-26
  • mariadb基础应用

    mariadb基础应用 一、 前言 MariaDB is one of the most popular database servers in the world. It’s made by the original developers of MySQL and guaranteed to stay open source. Notable users …

    Linux干货 2016-12-16
  • 程序包的编译安装

    程序包的编译安装 之所以需要安装编译程序包,是为了能及时更新程序包,制作好的rpm包,版本一般都有点老了,所以编译安装是必报的,而且我们可以自己定义安装路径,想卸载直接删除就KO了; 在centos7.3环境下安装apache http服务: 1.首先获取最新的apache源码包下载到/root目录下; 2.检查安装环境,没有就安装环境:   记住…

    Linux干货 2017-03-09