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

相关推荐

  • Tomcat

    简介 Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTT…

    2017-05-25
  • N22-第十二周作业

    1、请描述一次完整的http请求处理过程; (1)建立或处理连接:接受请求或拒绝请求 (2)接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程 (3)处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息 (4)访问资源:获取请求报文中请求的资源 (5)构建响应报文 (6)发送响应报文 (7)记录日志:访问日志和错误日志 …

    Linux干货 2016-11-04
  • 使用安装光盘恢复rpm软件包

    rpm作为linux最重要的软件管理工具,有着不可或缺的地位,连yum都要依赖于rpm的存在才能正常使用,所以掌握rpm的恢复还是很重要的,下面就来看一下如何恢复rpm。       卸载rpm软件包 [root@localhost ~]$ rpm -e rpm err…

    Linux干货 2016-08-25
  • Redis 代理服务Twemproxy

    1、twemproxy explore       当我们有大量 Redis 或 Memcached 的时候,通常只能通过客户端的一些数据分配算法(比如一致性哈希),来实现集群存储的特性。虽然Redis 2.6版本已经发布Redis Cluster,但还不是很成熟适用正式生产环境。 Redis 的 Clust…

    Linux干货 2015-04-04
  • linux发展史-

    前言: 人类文明的进步伴随着战争,战争留下的产物也是非常伟大的。 最初用于战争的通电钢铁,如今以进入人们生活。 而它的附带产物如今也是变得妙不可言。 本文简要说明操作系统的发展过程,以及该大树下一些分支。         简 述   Linux是诞生与UNIX下的一款操系统,有着安全稳定的文件系统,…

    Linux干货 2016-10-19
  • DNS

    配置缓存服务器: #vim /etc/named.conf Options { Listen-on port 53 { 127.0.0.1;172.16.0.68;}; //listen-on-v6 port 53 {::1;}; ……. Allow-query {any;}; …… Dnssec-enable…

    2017-06-04