高性能web服务器nginx(二)之常用功能举例

一、配置使用nginx

1、提供测试页

1

2

3

4

[[email protected] ~]# mkdir /www/a.com/htdoc

[[email protected] ~]# cat /www/a.com/htdoc/index.html 

<h1>www.a.com</h1>

[[email protected] ~]# chown -R nginx.nginx /www/a.com/htdoc/


2、备份配置文件并简要更改配置文件

1

2

3

4

5

6

7

8

9

10

11

[[email protected] ~]# cp /etc/nginx/nginx.conf{,.bak}

[[email protected] ~]# vim /etc/nginx/nginx.conf

server {

      listen       80;

      server_name  localhost;

      #charset koi8-r;

      #access_log  logs/host.access.log  main;

      location / {

          root   /data/www;

          index  index.html index.htm;

      }


3、从新加载配置文件

1

2

3

4

[[email protected] ~]# service nginx reload

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

重新载入 nginx:               [确定]


4、测试

wKiom1XyiyOgheqhAABzhjDnpro808.jpg

二、置Nginx的虚拟主机

1、修改配置文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[[email protected] ~]# vim /etc/nginx/nginx.conf

 server {        

             listen       80;

          server_name  www.a.com;

        location / {

            root   /www/a.com/htdoc;

            index  index.html index.htm;

        }

    }

    server {

        listen       80;

        server_name  www.b.org;

        location / {

            root   /www/b.org/htdoc;

            index  index.html index.htm;

        }

    }


2、提供测试页面

1

2

3

4

[[email protected] ~]# mkdir /www/b.org/htdoc

[[email protected] ~]# cat /www/b.org/htdoc/index.html 

<h1>www.b.org<h1>

[[email protected] ~]# chown -R nginx.nginx /www/b.org/htdoc/


3、重新加载nginx配置

1

2

3

4

[[email protected] ~]# service nginx reload

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

重新载入 nginx:             [确定]


4、修改windows的hosts文件

Windows 10下路径:C:\Windows\System32\drivers\etc\hosts

1

2

3

4

192.168.1.8 www.a.com

192.168.1.8 www.c.net

192.168.1.8 www.b.org

192.168.1.8 www.example.com


5、测试一下

wKiom1XyizSiofsPAABwT_NjNQY254.jpg

wKiom1Xyi1KRGsdqAAByb9BjXKU186.jpg

三、配置Nginx基于用户的访问控制

1、提供测试文件

1

2

3

[[email protected] ~]# mkdir /www/b.org/bbs

[[email protected] ~]# cat /www/b.org/bbs/test.html

 <h1>Auth Page! </h1>


2、修改配置文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

    server {

            listen       80;

        server_name  www.b.org;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

            root   /www/b.org/htdoc;

            index  index.html index.htm;

        }

      location /bbs {

            root   /www/b.org;

            index  index.html index.htm;

            auth_basic  "Auth Page";

            auth_basic_user_file /etc/nginx/.user;

        }

    }


3、生成认证文件及用户

注意需要安装httpd才能使用此命令!

1

2

3

4

[[email protected] ~]# htpasswd -c -m /etc/nginx/.user  admin

New password: 

Re-type new password: 

Adding password for user admin


4、重新加载一下nginx配置文件

1

[[email protected] ~]# service nginx reload

            

5、测试一下

wKiom1Xyi36gk1-aAACdBasZiss769.jpg

wKioL1Xyja7jZqD7AACJ6OA2GrQ025.jpg

四、配置Nginx提供状态页面

1、修改配置文件

1

2

3

4

5

6

        location /status {

            root   /;

            stub_status on;

            auth_basic "Nginx Status";

            auth_basic_user_file /etc/nginx/.user;

        }


2、重新加载一下配置文件


3、输入密码后测试

wKioL1XyjdjA_MT4AACTv1O1hGg322.jpg


  • Active connections表示当前活跃的连接数。 

  • 第三行的3个数字表示 Nginx当前总共处理了36个连接, 成功创建了36次握手,总共处理了90个请求。 

  • 最后一行的Reading表示Nginx读取到客户端Header信息数; Writing表示Nginx返回给客户端的Header信息数;Waiting表示Nginx已经处理完、正在等候下一次请求指令时的驻留连接数。


五、配置Nginx的错误页面

1、提供404错误页面

1

2

3

4

5

[[email protected] ~]# cat /www/b.org/htdoc/404.html

<h1>404 error</h1>

<h1>404 error</h1>

<h1>404 error</h1>

<h1>404 error</h1>


2、修改配置文件

1

2

3

[[email protected] ~]# vim /etc/nginx/nginx.conf

在对应的虚拟主机中添加以下:

error_page  404                 /404.html;


3、重新加载一下nginx配置文件


4、访问不存在的页面测试

wKioL1XyjgCAGxpXAADPCSRDy74306.jpg


六、建立下载站点autoindex模块

1、指令说明 

   Nginx默认是不允许列出整个目录的。如需此功能,打开nginx.conf文件,在location server 或 http段中加入autoindex on;另外两个参数最好也加上去:

  • autoindex_exact_size off;默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB。 

  • autoindex_localtime on;默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间。


2、修改配置文件

1

2

3

4

5

6

7

 location /download {

            root   /www/b.org;

            index  index.html index.htm;

            autoindex on ;

            autoindex_exact_size on;

            autoindex_localtime on;

        }


3、创建下载目录

1

2

[[email protected] ~]# mkdir /www/b.org/download

[[email protected] ~]# cp /etc/fstab /www/b.org/download


4、加载配置文件


5、浏览器测试

wKioL1XyjiSwNv_2AADDD2-AENU606.jpg

七、定义防盗链

1、定义防盗链的步骤

  • 定义合规的引用  valid_referers none | blocked | server_names | string ...;

  • 拒绝不合规的引用

1

2

3

         if  ($invalid_referer) {

          rewrite ^/.*$ http://www.b.org/403.html

         }

2、referer模块简介

   nginx_http_referer_module模块通常用于阻挡来源非法的域名请求.我们应该牢记,伪装Referer头部是非常简单的事情,所以这个模块只能用于阻止大部分非法请求.我们应该记住,有些合法的请求是不会带referer来源头部的,所以有时候不要拒绝来源头部(referer)为空的请求。

防盗链模块指令 :

1

2

3

4

referer_hash_bucket_size

语法:  referer_hash_bucket_size  size; 

默认值为64: referer_hash_bucket_size  64; 

配置段:server,location

1

2

3

4

referer_hash_max_size

语法:   referer_hash_max_size  size; 

默认值2048k:  referer_hash_max_size  2048; 

配置段: Context:  server,location

1

2

3

valid_referers

语法: valid_referers none | blocked | server_names | string ...; 

配置段:  server,location

   指定合法的来源’referer’, 他决定了内置变量$invalid_referer的值,如果referer头部包含在这个合法网址里面,这个变量被设置为0,否则设置为1。记住,不区分大小写的。

  • none                 #“Referer” 来源头部为空的情况;从浏览器输入的。 

  • blocked            #“Referer” 来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头. 

  • server_names       #“Referer”来源头部包含当前的server_names(当前域名) 

  • arbitrary string   #任意字符串,定义服务器名或者可选的URI前缀.主机名可以使用*开头或者结尾,在检测来源头部这个过程中,来源域名中的主机端口将会被忽略掉 

  • regular expression  #正则表达式,~表示排除https://或http://开头的字符串.


3、实例:

1

2

3

4

5

6

7

location ~* \.(gif|jpg|png|bmp)$ {

   valid_referers none blocked *.b.org  server_names ~\.google\.~\.baidu\.;

   if ($invalid_referer) {

       return 403;

     #rewrite ^/ http://www.b.org/403.jpg;

    }

}


4、防盗链应用举例

编辑配置文件添加图片的防盗链:

1

2

3

4

5

6

7

8

[[email protected] ~]# vim /etc/nginx/nginx.conf

 location ~* \.(jpg|gif|jpeg|png|)$ {

            root /www/b.org/;

            valid_referers none blockd www.b.org *.b.org;

            if ($invalid_referer){

               rewrite ^/ http://www.b.org/403.html;

             }

        }

在网站a.com中引用b.org网站的内容:

1

2

3

[[email protected] ~]# cat /www/a.com/htdoc/test.html

<h1>www.a.com</h1>

<img src="http://www.b.org/images/1.jpeg">

浏览器测试:

wKioL1Xyjk3DQYpqAACV5RP8i8I573.jpg

查看日志:

1

2

[[email protected] ~]# tail  -1 /var/log/nginx/error.log 

2015/09/09 22:48:00 [error] 8327#0: *31 open() "/www/b.org/404.html" failed (2: No such file or directory), client: 192.168.1.103, server: www.b.org, request: "GET /403.html HTTP/1.1", host: "www.b.org", referrer: "http://www.a.com/test.html"


八、重写模块

1、重写模块介绍

   Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10次,超过后nginx将返回500错误。同时,重写模块包含set指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。


2、重写模块指令

1

2

3

break指令: 完成当前设置的重写规则,停止执行其他的重写规则。

语法:  break; 

应用配置段: server,location, if

1

2

3

4

if指令:

语法: if(condition) { ... } 

应用配置段: server,location

注意:尽量考虑使用try_files代替。

判断的条件:

  • 一个变量的名称:空字符传”“或者一些“0”开始的字符串为false。

  • 字符串比较:使用=或!=运算符

  • 正则表达式匹配:使用~(区分大小写)和~*(不区分大小写),取反运算!~和!~*。

  • 文件是否存在:使用-f和!-f操作符

  • 目录是否存在:使用-d和!-d操作符

  • 文件、目录、符号链接是否存在:使用-e和!-e操作符

  • 文件是否可执行:使用-x和!-x操作符

1

2

3

4

5

return指令:

语法: returncode [text];

            returncode URL;

            returnURL;

应用配置段:server,location, if

   停止处理并为客户端返回状态码。非标准的444状态码将关闭连接,不发送任何响应头。可以使用的状态码有:204,400,402-406,408,410, 411, 413, 416与500-504。如果状态码附带文字段落,该文本将被放置在响应主体。相反,如果状态码后面是一个URL,该URL将成为location头补值。没有状态码的URL将被视为一个302状态码。

1

2

3

rewrite指令:

语法:rewriteregex replacement [flag];

应用配置段: server,location, if

 

按照相关的正则表达式与字符串修改URI,指令按照在配置文件中出现的顺序执行。可以在重写指令后面添加标记。

 

注意:如果替换的字符串以http://开头,请求将被重定向,并且不再执行多余的rewrite指令。

尾部的标记(flag)可以是以下的值:

  • last      #停止处理重写模块指令,之后搜索location与更改后的URI匹配。

  • break     #完成重写指令。

  • redirect  #返回302临时重定向,如果替换字段用http://开头则被使用。

  • permanent #返回301永久重定向。

关于last、break的详细说明:

  • last:解决死循环,对当前请求的处理检查URL重写规则,如果匹配规则需要被重写,服务器对后续规则无需再检查,让客户端将新的重写请求发送给服务器,服务器重新发起检查,这次检查会重头到尾检查一遍。

  • 如果没用last:一个location中多条URL重写规则,对请求的处理会检查规则,匹配到后发现需要重写,服务器会通知客户端请求需要重写,客户端就重新发重写过后的请求到服务器,服务器对新的重写好的请求还是需要检查规则,如果检查到匹配某条规则后就又需要重写,客户端就又要发送新的重写请求到服务器,形成循环重写了。

  •  break:客户端发送请求URL到服务器,服务器发现其需要匹配URL重写规则,服务器通知客户端请求需要重写,客户端就将重写过的请求URL发送给服务器,服务器不再检查URL重写规则,直接响应。

 

1

2

3

4

rewrite_log指令:启用时将在error log中记录notice级别的重写日志。

语法: rewrite_log  on | off;

默认值: rewrite_log  off;

应用配置段: http,server, location, if

1

2

3

set指令:为给定的变量设置一个特定值。

语法: set$variable value;

应用配置段:server,location, if

1

2

3

4

uninitialized_variable_warn指令:控制是否记录未初始化变量的警告信息。

语法:uninitialized_variable_warnon | off;

默认值: uninitialized_variable_warnon;

应用配置段: http,server, location, if

3、举例

1

2

3

4

5

6

7

server {

   ...

   rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;

   rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;

   return  403;

   ...

}

解释:

如果访问URI为download开头后面跟任意内容,后跟media下跟一个任意名称的以.结尾的所有内容都替换成为download开头后面跟任意内容,把media替换成mp3下跟任意名称以.mp3结尾的内容了,实现了后向引用。


4、rewrite重写应用举例

在配置文件中添加如下:

1

2

3

4

5

location /download {

            root   /www/b.org;

            autoindex on ;

            rewrite ^/download/(.*\.(jpg|gif|jpeg|png|))$ /images/$1 last;

        }

在images目录中放入图片,:

1

2

3

4

[[email protected] ~]# ls /www/b.org/images/

1.jpeg

[[email protected] ~]# ls /www/b.org/download/

fstab

浏览器测试:

wKioL1XyjoCiyIwrAAJGN7RKzxU578.jpg

5、rewrite_log记录日志功能举例

将记录错误日志的级别提高:error_log  /var/log/nginx/error.log  notice;

开启rewrite_log:rewrite_log on ;

浏览几次页面后查看错误日志:

1

2

[[email protected] ~]# tail -2 /var/log/nginx/error.log 

2015/09/09 22:30:36 [notice] 8301#0: *29 "^/download/(.*\.(jpg|gif|jpeg|png|))$" matches "/download/1.jpeg", client: 192.168.1.103, server: www.b.org, request: "GET /download/1.jpeg HTTP/1.1", host: "www.b.org"2015/09/09 22:30:36 [notice] 8301#0: *29 rewritten data: "/images/1.jpeg", args: "", client: 192.168.1.103, server: www.b.org, request: "GET /download/1.jpeg HTTP/1.1", host: "www.b.org"


九、gzip压缩模块

1、基于gzip实现资源文件压缩模块

发送给客户端的资源结果做压缩: ngx_http_gzip_module 

整个网站内容压缩了: ngx_http_gzip_static_module 

注意需要编译:--with-http_gzip_static_module

   此模块的作用就是在接到请求后,会到url相同的路径的文件系统去找扩展名为“.gz”的文件,如果不存在,再将文件进行gzip压缩,再发送出去,这样可以避免重复的压缩无谓的消耗资源,这个模块不受gzip_types限制,会对所有请求有效。所以建议不要在全局上使用,因为一般来说大部分都是动态请求,是不会有.gz这个文件的,建议只在局部我们确认有.gz的目录中使用。   我们常用的是对发送给客户端的资源结果做压缩。


2、模块说明

1

2

3

4

5

gzip压缩模块是ngx_http_gzip_module,是nginx内置的。

gzip:决定是否开启gzip模块。

语法: gzip on | off; 

默认关闭: gzip off; 

配置段: http, server, location, if in location

1

2

3

4

gzip_buffers:设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间。

语法: gzip_buffers number size; 

默认值: gzip_buffers 32 4k|16 8k; 

配置段: http, server, location

1

2

3

4

gzip_comp_level:设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大。

语法: gzip_comp_level level; 

默认压缩比是1: gzip_comp_level 1; 

配置段: http, server, location

1

2

3

4

gzip_min_length:当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩

语法: gzip_min_length length; 

默认值是20byte: gzip_min_length 20; 

配置段: http, server, location

1

2

3

4

gzip_http_version:用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项,目前此项基本可以忽略。

语法: gzip_http_version 1.0 | 1.1; 

默认版本是1.1: gzip_http_version 1.1; 

配置段: http, server, location

1

2

3

4

gzip_proxied:Nginx做为反向代理的时候启用

语法: gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...; 

默认关闭: gzip_proxied off; 

配置段: http, server, location

指令参数详解:

  • off        #关闭所有的代理结果数据压缩 

  • expired    #启用压缩,如果header中包含”Expires”头信息 

  • no-cache   #启用压缩,如果header中包含”Cache-Control:no-cache”头信息 

  • no-store   #启用压缩,如果header中包含”Cache-Control:no-store”头信息 

  • private    #启用压缩,如果header中包含”Cache-Control:private”头信息 

  • no_last_modified   #启用压缩,如果header中包含”Last_Modified”头信息 

  • no_etag    #启用压缩,如果header中包含“ETag”头信息 

  • auth       #启用压缩,如果header中包含“Authorization”头信息 

  • any        #无条件压缩所有结果数据 

1

2

3

4

gzip_types:设置需要压缩的MIME类型,非设置值不进行压缩。

语法: gzip_types mime-type ...; 

默认压缩html文件: gzip_types text/html; 

配置段: http, server, location


3、nginx官网实例

1

2

3

4

gzip            on;

gzip_min_length 1000;

gzip_proxied    expired no-cache no-store private auth;

gzip_types      text/plain application/xml;

开启gzip压缩;

最小压缩文件大小是1000字节;

如果header中包含”Cache-Control:no-cache”头信息,”Cache-Control:no-store”头信息,Cache-Control:private”头信

息,“Authorization”头信息就启用压缩 压缩的类型为text和xml文件 ;


4、应用举例

编辑配置文件启用gzip压缩功能:

1

2

3

4

5

6

[[email protected] ~]# vim /etc/nginx/nginx.conf

    gzip on;

    gzip_http_version 1.0;      

    gzip_comp_level 2;

    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;

    gzip_disable msie6;

重新载入配置文件:

1

[[email protected]  ~]# service nginx reload

浏览器测试:

wKioL1Xyjszx9LSXAAFQPtUfYnQ333.jpg


十、http首部报文模块 

1、模块介绍

   ngx_http_headers_module模块提供了两个重要的指令add_header和expires,来添加 “Expires” 和 “Cache-Control” 头字段,对响应头添加任何域字段。add_header可以用来标示请求访问到哪台服务器上。expires指令用来对浏览器本地缓存的控制。


2、模块指令

1

2

3

4

add_header指令

语法: add_header name value [always]; 

配置段: http, server, location, if in location 

对响应代码为200,201,204,206,301,302,303,304,或307的响应报文头字段添加任意域。如: add_header From example.com

1

2

3

4

5

expires指令

语法: expires [modified] time; 

expires epoch | max | off;

默认关闭: expires off; 

应用配置段: http, server, location, if in location

   在对响应代码为200,201,204,206,301,302,303,304,或307头部中是否开启对“Expires”和“Cache-Control”的增加和修改操作。 可以指定一个正或负的时间值,Expires头中的时间根据目前时间和指令中指定的时间的和来获得。 epoch表示自1970年一月一日00:00:01 GMT的绝对时间,max指定Expires的值为2037年12月31日23:59:59,Cache-Control的值为10 years。


Cache-Control头的内容随预设的时间标识指定:

设置为负数的时间值:Cache-Control: no-cache。

设置为正数或0的时间值:Cache-Control: max-age = #,这里#的单位为秒,在指令中指定。

参数off禁止修改应答头中的”Expires”和”Cache-Control”。

实例:对图片,flash文件在浏览器本地缓存30天

1

2

3

4

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

 {

           expires 30d;

 }


十一、配置Nginx基于ssl提供https服务

1、模块指令

  • SSL指令 :为一个server{...}虚拟主机开启HTTPS

语法: ssl on | off; 

默认值: ssl off; 

应用配置段:http, server 

  • ssl_certificate指令 :为当前的虚拟主机指定PEM格式的证书文件。

语法: ssl_certificate file; 

配置段: http, server 

  • ssl_certificate_key指令 :为当前的虚拟主机指定PEM格式的私钥文件。

语法: ssl_certificate_key file; 

配置段: http, server 

  • ssl_client_certificate指令

语法: ssl_client_certificate file; 

配置段: http, server 

  • ssl_dhparam指令:此指令出现于nginx 0.7.2版 ,指定PEM格式含有Diffie-Hellman参数的文件,用于TLS会话键。

语法: ssl_dhparam file; 

配置段:http, server

  • ssl_ciphers指令:指定许可密码的描述。密码以openssl支持的格式指定;使用以下命令可以查看openssl支持的完整格式列表:openssl ciphers。

语法:ssl_ciphers ciphers;

默认值:ssl_ciphers HIGH:!aNULL:!MD5;

配置段:http, server

  • ssl_crl指令:此指令在nginx 0.8.7版本开始出现,指定一个PEM格式的证书吊销文件,用于检查客户端证书。

语法:ssl_crl file;

配置段:http, server

  • ssl_prefer_server_ciphers指令:对SSLv3和TLSv1协议的服务器端密码需求优先级高于客户端密码。

语法:ssl_prefer_server_ciphers on | off;

默认值:ssl_prefer_server_ciphers off;

配置段:http, server

  • ssl_protocols指令:指定使用的SSL协议

语法:ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];

默认值:ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

配置段:http, server

  • ssl_verify_client:是否开启客户端证书验证。参数“ask”在客户端主动提出检查证书时,对客户端证书进行检查。

语法:ssl_verify_client on | off | optional | optional_no_ca;

默认值:ssl_verify_client off;

配置段:http, server

  • ssl_verify_depth:设置客户端证书链的深度。

语法:ssl_verify_depth number;

默认值:ssl_verify_depth 1;

配置段:http, server

  • ssl_session_cache指令:设置用来存储SSL会话缓存类型和大小。

语法:ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

默认值:ssl_session_cache none;

配置段:http, server

缓存类型分类:

off         #硬关闭:明确告诉客户端这个会话不可用;
none     #软关闭:告诉客户端会话能被重用,但Nginx实际上不会重用它们。
builtin     #OpenSSL内置缓存,仅可用于一个工作进程;缓存大小用户会话数来指定。注意:使用该指令会导致内存碎片,慎用。
shared      #位于所有工作进程的共享缓存。缓存大小用字节数指定,1MB缓存能容纳4000会话。每个共享缓存必须拥有字节的名称,同名的缓存可以用于多个虚拟主机。

  • ssl_session_timeout指令:设置客户端能够重复使用存储在缓存中的会话参数时间。

语法:ssl_session_timeout time;

默认值:ssl_session_timeout 5m;

配置段:http, server


2、应用举例

创建CA自签证书:

1

2

3

4

5

6

7

8

9

10

11

12

[[email protected] ~]# cd /etc/pki/CA/private/

[[email protected] private]# (umask 077; openssl genrsa 2048 > cakey.pem)

[[email protected] private]# ls

cakey.pem

[[email protected] private]# openssl req -new -x509 -key ./private/cakey.pem -out cacert.pem

[[email protected] private]# cd ..

[[email protected] CA]# openssl req -new -x509 -key ./private/cakey.pem -out cacert.pem

[[email protected] CA]# ls

cacert.pem  crl        index.txt       index.txt.old  private  serial.old

certs       crlnumber  index.txt.attr  newcerts       serial

[[email protected] CA]# touch serial index.txt ^C

[[email protected] CA]# echo 01 > serial

生成证书申请:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

[[email protected] CA]# mkdir /etc/nginx/ssl

[[email protected] CA]# cd /etc/nginx/ssl

[[email protected] ssl]# (umask 077; openssl genrsa 1024 > nginx.key) 

[[email protected] ssl]# openssl req -new -key nginx.key -out nginx.csr

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [CN]:

State or Province Name (full name) [Henan]:

Locality Name (eg, city) [Xinyang]:

Organization Name (eg, company) [Companyname]:

Organizational Unit Name (eg, section) [Linuxer]:

Common Name (eg, your name or your server's hostname) []:www.test.com

Email Address []:

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

让CA签名并颁发证书:

[[email protected] ssl]# openssl ca -in nginx.csr -out nginx.crt -days 3650

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

        Serial Number: 3 (0x3)

        Validity

            Not Before: Sep 10 03:14:41 2015 GMT

            Not After : Sep  7 03:14:41 2025 GMT

        Subject:

            countryName               = CN

            stateOrProvinceName       = Henan

            organizationName          = Companyname

            organizationalUnitName    = Linuxer

            commonName                = www.test.com

        X509v3 extensions:

            X509v3 Basic Constraints: 

                CA:FALSE

            Netscape Comment: 

                OpenSSL Generated Certificate

            X509v3 Subject Key Identifier: 

                65:A0:4E:DC:8C:5B:2C:22:5B:78:33:C6:11:85:33:A2:3E:4A:59:B5

            X509v3 Authority Key Identifier: 

                keyid:C4:67:DE:CF:AD:0B:94:03:C0:ED:5D:86:90:DE:36:B4:AE:DF:B1:2F

 

Certificate is to be certified until Sep  7 03:14:41 2025 GMT (3650 days)

Sign the certificate? [y/n]:y

 

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

修改配置文件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

[[email protected] ssl]# vim /etc/nginx/nginx.conf

 server {

        listen        443;

        server_name  www.b.org;

        ssl                  on;

        ssl_certificate      /etc/nginx/ssl/nginx.crt;

        ssl_certificate_key  /etc/nginx/ssl/nginx.key;

        ssl_session_timeout  5m;

        ssl_protocols  SSLv2 SSLv3 TLSv1;

        ssl_ciphers  HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers   on;

        #error_page 404  /www/b.org/404.html;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

            root   /www/b.org/htdoc;

            index  index.html index.htm;

         }

      }

从新载入配置文件:

1

[[email protected] ssl]# service nginx restart

测试:

注意在浏览器中可能出现证书不受信任,只需要跳过即可。

wKioL1XyjwOh7FvsAAB8Y95Bu3k061.jpg




你可能感兴趣的:(高性能web服务器nginx(二)之常用功能举例)