您的位置:首页 > 运维架构 > Nginx

Nginx详解以及LNMP的搭建

2017-11-07 11:05 281 查看

http://www.cnblogs.com/keerya/p/7797610.html

1.1 特性:
1.2 nginx 架构
1.4 nginx 的功用
2.1 nginx 命令
2.2 配置文件的组成部分:
3.1 Main 全局配置段常见的配置指令分类
3.1.1 介绍
3.1.2 一些设置

3.2 http 协议段的相关配置
3.3 与套接字相关的配置
3.4 定义路径相关的配置
3.5 定义客户端请求的相关配置
3.6 对客户端进行限制的相关配置
3.7文件操作优化的配置
4.1 权限控制
4.2 身份验证
 
4.3 状态信息页面
4.4 日志的设置
4.5 压缩
4.6 ssl 加密的实现
4.7 地址重写
1、安装包,开启服务
2、修改nginx的配置文件
3、修改php-fpm的配置文件
4、运行mysql ,创建一会网页需要的库
6、网页登录
7、实验成功,登录查看
8、ab 可以压力测试

(1)一个物理服务器设置一个https
1、创建存放证书的目录
2、自签名证书
3、把证书和私钥cp 到nginx存放证书目录
4、修改配置文件,加一段server
5、测试,网页打开 https://192.168.30.7/
(2)一个物理服务器设置多个https
1、生成3个证书和私钥
2、把证书和私钥cp 到nginx存放证书目录,并解开私钥的加密
3、创建各自对应的访问网页
4、测试访问,成功

 

一、nginx 介绍




1.1 特性:

模块化设计,较好的扩展性

高可靠性

支持热部署:不停机更新配置文件,升级版本,更换日志文件

低内存消耗:10000 个keep-alive 连接模式下的非活动连接,仅需要2.5M 内存

event-driven,aio,mmap,sendfile

基本功能:

静态资源的web 服务器

http 协议反向代理服务器,负载均衡

pop3/imap4 协议反向代理服务器

FastCGI(lnmp),uWSGI(python) 等协议

模块化(非DSO ),如zip ,SSL模块

web 服务相关的功能:

虚拟主机(server

支持 keep-alive  和管道连接

访问日志(支持基于日志缓冲提高其性能)

url rewirte

路径别名

基于IP 及用户的访问控制

支持速率限制并发数限制

重新配置和在线升级而无须中断客户的工作进程

Memcached 的GET  接口

 


1.2 nginx 架构

 



nginx 的程序架构 :

master/worker 结构

一个master 进程:

负载加载和分析配置文件、管理worker 进程、平滑升级

 一个或多个worker 进程

处理并响应用户请求

缓存相关的进程:

cache loader :载入缓存对象

cache manager:管理缓存对象

 

1.3 nginx 高度模块化

但其模块早期不支持DSO 机制;1.9.11版本支持动态装载和卸载

模块分类:

核心模块:core module

标准模块:

• HTTP : 模块: ngx_http_*

HTTP Core modules 默认功能

HTTP Optional modules  需编译时指定

• Mail  模块 ngx_mail_*

• Stream 块 模块 ngx_stream_*

第三方模块

 


1.4 nginx 的功用

静态的web 资源服务器

html,图片,js ,css ,txt 等静态资源

结合FastCGI/uWSGI/SCGI 等协议反向代理动态资源请求

http/https 协议的反向代理

imap4/pop3 协议的反向代理

tcp/udp 协议的请求转发(反向代理)

 

 

二、nginx 目录结构和命令


2.1 nginx 命令

ls /usr/local/nginx/

html 是测试页,sbin 是主程序

ls /usr/local/nginx/sbin/

nginx  只有一个程序文件

ls /usr/local/nginx/html/

50x.html index.html  测试网页

Nginx :默认为启动nginx

-h  查看帮助选项

-V  查看版本和配置选项

-t  测试nginx 语法错误

-c filename  指定配置文件(default: /etc/nginx/nginx.conf)

-s signal  发送信号给master 进程,signal 可为:

stop, quit,reopen, reload  示例:-s stop  停止nginx -s reload  加载配置文件

注意:不要和systemctl 混合使用

-g directives  在命令行中指明全局指令

 


2.2 配置文件的组成部分:

主配置文件:nginx.conf

子配置文件 include conf.d/*.conf

fastcgi,uwsgi ,scgi 等协议相关的配置文件

mime.types :支持的mime 类型

主配置文件的配置指令:

directive value [value2 ...];

注意:

(1)  指令必须以分号结尾

(2)  支持使用配置变量

内建变量:由Nginx 模块引入,可直接引用

自定义变量:由用户使用set 命令定义

set variable_name value;

引用变量:$variable_name

 

三、nginx 主配置文件的介绍和设置


3.1 Main 全局配置段常见的配置指令分类

3.1.1 介绍

- 正常运行必备的配置

- 优化性能相关的配置

- 用于调试及定位问题相关的配置

- 事件驱动相关的配置

3.1.2 一些设置

user nginx;                 //nginx运行时是以谁的身份开启的子进程

worker_processes auto;      //进程数,auto是自动和CPU核数相对应

worker_priority number;     //指定worker 进程的nice 值,设定worker 进程优先级:[-19,19]

error_log  /var/log/nginx/error.log  info;  //错误日志的路径和级别

pid /var/run/nginx.pid;     //指定存储nginx 主进程PID 的文件路径

include file                //指明包含进来的其它配置文件片断

events {

    worker_connections  30000;  //每个worker 进程所能够打开的最大并发连接数数量,默认是1024,一般都不够,调大

    use epoll;      //指明并发连接请求的处理方法, 默认自动选择最优方法

}

accept_mutex on/off;        //前台|后台运行



 


3.2 http 协议段的相关配置

格式介绍

http {   //可以放多个server段

    ... ...

    server {

        ...

        server_name

        root

        location [OPERATOR] /uri/ {

        ...

        }

    }

    server {

    ...

    }

}

 


3.3 与套接字相关的配置

(1)server 配置虚拟主机

server {

listen address[:PORT]|PORT;

server_name SERVER_NAME;

root /PATH/TO/DOCUMENT_ROOT;

}



 

(2)listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE

listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]

default_server  设定为默认虚拟主机

ssl  限制仅能够通过ssl 连接提供服务

backlog=number  超过并发连接数后,新请求进入后援队列的长度

rcvbuf=size  接收缓冲区大小

sndbuf=size  发送缓冲区大小

注意:

① 基于port;

listen PORT; 指令监听在不同的端口

② 基于ip 的虚拟主机

listen IP:PORT; IP  地址不同

③ 基于hostname

server_name fqdn; 指令指向不同的主机名

 

(3)server_name name ...;

虚拟主机的主机名称后可跟多个由空白字符分隔的字符串

支持* 通配任意长度的任意字符

server_name *.magedu.com www.magedu.*

支持~ 起始的字符做正则表达式模式匹配,性能原因慎用

server_name  ~^www\d+\.magedu\.com$

\d 表示 [0-9]

匹配优先级机制从高到低:

① 首先是字符串精确匹配  如:www.magedu.com

② 左侧*通配符 如:*.magedu.com

③ 右侧* 通配符 如:www.magedu.*

④ 正则表达式 : 如: ~^.*\.magedu\.com$ ,因为消耗cpu运算

⑤ default_server

 

(4)tcp_nodelay on | off;    在长连接的情况下,是否延迟

在keepalived 模式下的连接是否启用TCP_NODELAY 选项

当为off 时,延迟发送,合并多个请求后再发送

默认On 时,不延迟发送

可用于:http, server, location

 

(5)sendfile on | off;

是否启用sendfile 功能,在内核中封装报文直接发送,默认Off

 

(6)server_tokens on | off | build | string

是否在响应报文的Server 首部显示nginx版本

 


3.4 定义路径相关的配置

(7)root

设置web 资源的路径映射;用于指明请求的URL 所对应的文档的主目录路径,可用于http, server, location, if in location

server {

...

root /data/www/vhost1;

}

示例
http://www.magedu.com/images/logo.jpg --> /data/www/vhosts/images/logo.jpg

注意:root 不仅可以用在server段,还可用于http、server、location、if in locatin

 

(8)location [ = | ~ | ~* | ^~ ] uri { ... }  主要控制URL路径

location @name { ... }

在一个server 中location 配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix 会根据用户请求的URI 来检查定义的所有location ,并找出一个最佳匹配,而后应用其配置

示例:

① server {...

server_name www.magedu.com;

location /images/ {

root /data/imgs/;

}

}
http://www.magedu.com/images/logo.jpg --> /data/imgs/images/logo.jpg

② = :对URI 做精确匹配;

location = / {

...

}
http://www.magedu.com/  匹配 http://www.magedu.com/index.html  不匹配
③ 正则符号的作用

^~:对URI 的最左边部分做匹配检查,不区分字符大 小写

~:对URI 做正则表达式模式匹配,区分字符大小写

~* :对URI 做正则表达式模式匹配,不区分字符大小写

不带符号:匹配起始于此uri 的所有的uri

④ 匹配优先级从高到低:

=, ^~,  ~/ ~*, 不带符号



 

(9)alias path;

路径别名,文档映射的另一种机制;仅能用于location 上下文

示例:
http://www.magedu.com/bbs/index.php
location /bbs/ {

alias /web/forum/;

} --> /web/forum/index.html

location /bbs/ {

root /web/forum/;

} --> /web/forum/bbs/index.html

注意:location 中使用root 指令和alias 指令的意义不同

(a) root ,给定的路径对应于location 中的/uri/左 侧的/

(b) alias ,给定的路径对应于location 中的/uri/右 侧的/,完全置换

 

(10)index file ...;

指定默认网页资源,注意:ngx_http_index_module 模块

例:index index.php index.html

 

(11)error_pagecode ... [=[response]] uri;   错误页面

模块:ngx_http_core_module

定义错误页, 以指定的响应状态码进行响应

可用位置:http, server, location, if in location

error_page 404 /404.html

error_page 404 =200 /404.html   错误状态码改为200,还是原来的错误页面



 

(12)try_files file ... uri;

    try_files file ... =code;

按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI 的指向。最后一个参数是回退URI 且必须存在,否则会出现内部500 错误

location /images/ {

try_files $uri /images/default.gif;

}

location / {

try_files $uri $uri/index.html $uri.html =404;

}



 


3.5 定义客户端请求的相关配置

(13)keepalive_timeout timeout [header_timeout];

设定保持长连接超时时长,0 表示禁止长连接,默认为75s



 

(14)keepalive_requests number;

一次长连接上所允许请求的资源的最大数量,默认为100

 

(15)keepalive_disable none | browser ...  略,没有那么老版本的浏览器

对哪种浏览器禁用长连接

(16)send_timeout time;

向客户端发送响应报文的超时时长,此处是指两次写操作之间的间隔时长,而非整个响应过程的传输时长

 

(17)client_body_buffer_size size;   缓存,hash值,取32位的后1位,2位,2位做几级目录

用于接收每个客户端请求报文、上传的body 部分的缓冲区大小;默认为16k超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置

 

(18)client_body_temp_path path [level1 [level2 [level3]]];

设定用于存储客户端请求报文的body 部分的临时存储路

径及子目录结构和数量

目录名为16 进制的数字;

client_body_temp_path /var/tmp/client_body 1 2 2

1级目录占1位16进制,即2^4=16个目录 0-f

2级目录占2位16进制,即2^8=256个目录 00-ff

2级目录占2位16进制,即2^8=256个目录 00-ff



 


3.6 对客户端进行限制的相关配置

(19)limit_rate rate;  限速

限制响应给客户端的传输速率,单位是bytes/second,默认值0表示不限速

 

(20)limit_except method ... { ... } ,仅用于location,限制客户端使用除了指定的请求方法之外的其它方法

method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

limit_except GET {

allow 192.168.1.0/24;

deny all;

}  除了GET 和HEAD 之外 其它方法 仅允许192.168.1.0/24网段主机



 


3.7文件操作优化的配置

(21)aio on | off | threads[=pool]; 是否启用aio 异步io功能,异步写磁盘

(22)directio size | off;  是否同步(直接)写磁盘,而非写缓存,在Linux 主机启用O_DIRECT 标记, 则文件大于等于给定大小时使用,例如directio 4m

(23)open_file_cache off;

open_file_cache max=N [inactive=time];

nginx 可以缓存以下三种信息:

① 文件元数据文件的描述符、文件大小和最近一次的修改时间

② 打开的目录结构

③ 没有找到的或者没有权限访问的文件的相关信息

max=N:可缓存的缓存项上限;达到上限后会使用LRU (最近最少使用)算法实现管理

inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses 指令所指定的次数的缓存项,即为非活动项 , 将被删除

(24)open_file_cache_errors on | off;

是否缓存查找时发生错误的文件一类的信息 ,默认值为off

(25)open_file_cache_min_uses number;

open_file_cache 指令的inactive 参数指定的时长内,至少被命中此处指定的次数方可被归类为活动 项,默认值为1

(26)open_file_cache_valid time;

缓存项有效性的检查频率,默认值为 为60s

 

 

四、重要常用的配置


4.1 权限控制

ngx_http_access_module 模块 ,实现基于ip 的访问控制功能

① allow address | CIDR | unix: | all;

② deny address | CIDR | unix: | all;

http, server, location, limit_except 段,都能使用

自上而下检查,一旦匹配,将生效,条件严格的置前

示例:

location / {

deny 192.168.1.1;

allow 192.168.1.0/24;

allow 10.1.1.0/16;

allow 2001:0db8::/32;

deny all;

}



 


4.2 身份验证

ngx_http_auth_basic_module 模块,实现基于用户的访问控制,使用basic 机制进行用户认证

① auth_basic string | off;

② auth_basic_user_file file;

location /admin/ {

auth_basic "Admin Area";   “提示字”

auth_basic_user_file /etc/nginx/.ngxpasswd;

}



用户口令文件:

① 明文文本:格式name:password:comment

② 加密文本:由htpasswd 命令实现,httpd-tools 包所提供




 


4.3 状态信息页面

ngx_http_stub_status_module 模块,用于输出nginx 的基本状态信息

① 设置



② 输出信息示例:

Active connections: 291

server accepts handled requests

16630948  16630948  31070465  三个数字分别对应accepts,handled,requests 三个值

Reading: 6 Writing: 179 Waiting: 106



③ 定义

Active connections: 当前状态,活动状态的连接数

accepts :统计总值,已经接受的客户端请求的总数

handled :统计总值,已经处理完成的客户端请求的总数

requests :统计总值,客户端发来的总的请求数

Reading :当前状态,正在读取客户端请求报文首部的连接的连接数

Writing :当前状态,正在向客户端发送响应报文过程中的连接数

Waiting:当前状态,正在等待客户端发出请求的空闲连接数

 


4.4 日志的设置

ngx_http_log_module 模块,指定日志格式记录请求

① log_format name string ...;   定义日志格式

string 可以使用nginx 核心模块及其它模块内嵌的变量

② access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];  调用日志

access_log 路径  日志名 ;

访问日志文件路径,格式及相关的缓冲的配置

buffer=size  缓存大小

flush=time   多长时间清除缓存

示例:

log_format compression '$remote_addr-$remote_user [$time_local] '

'"$request" $status $bytes_sent '

'"$http_referer" "$http_user_agent" "$gzip_ratio"';

access_log /spool/logs/nginx-access.log compression buffer=32k;



③ 略:open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];

open_log_file_cache off;

缓存各日志文件相关的元数据信息

max :缓存的最大文件描述符数量

min_uses :在inactive 指定的时长内访问大于等于此值方

可被当作活动项

inactive :非活动时长

valid: 验证缓存 中各缓存项是否为活动项的时间间隔

 


4.5 压缩

ngx_http_gzip_module  用gzip 方法压缩响应数据,节约带宽,默认没有设置开启

 gzip on | off;

启用或禁用gzip 压缩

② gzip_comp_level level;

压缩比由低到高:1 到 9,默认:1

③ gzip_disable regex ...;

匹配到客户端浏览器不执行压缩

④ gzip_min_length length;

启用压缩功能的响应报文大小

⑤ gzip_http_version 1.0 | 1.1;

设定启用压缩功能时,协议的最小版本,默认:1.1

⑥ gzip_buffers number size;

支持实现压缩功能时缓冲区数量每个缓存区的大小,默认:324k 或 168k

⑦ gzip_types mime-type ...;

指明仅对哪些类型的资源执行压缩操作;即压缩过滤器

默认包含有text/html不用显示指定,否则出错

查看nginx的mime类型:cat /etc/nginx/mime.types

⑧ gzip_vary on | off;

如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”

⑨ gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;

nginx:对于代理服务器请求的响应报文,在何种条件下启用压缩功能

off :对被代理的请求不启用压缩

expired,no-cache, no-store ,private :对代理服务器请求的响应报文首部Cache-Control 值任何一个,启用压缩功能

示例:

gzip on;

gzip_comp_level 6;

gzip_min_length 64;

gzip_proxied any;

gzip_types text/xml text/css application/javascript;



测试压缩效果:



 


4.6 ssl 加密的实现

https ssl 的实现

(1)server 里的选项:

1 、ssl on | off;

为指定虚拟机启用HTTPS protocol,建议用listen 指令代替

2 、ssl_certificate file;

当前虚拟主机使用PEM 格式的证书文件路径

3 、ssl_certificate_key file;

当前虚拟主机上与其证书匹配的私钥文件路径

4 、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];

支持ssl 协议版本,默认为后三个

5 、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

builtin[:size] :使用OpenSSL 内建缓存,为每worker 进程私有

[shared:name:size] :在各worker 之间使用一个共享的缓存

6、ssl_session_timeout time;

客户端连接可以复用ssl session cache 中缓存的ssl 参数的有效时长,默认5m

示例:

server {

listen 443 ssl;

server_name www.magedu.com;

root /vhosts/ssl/htdocs;

ssl on;  //可省略

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

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

ssl_session_cache shared:sslcache:20m;

ssl_session_timeout 10m;

}



 


4.7 地址重写

ngx_http_rewrite_module 模块:

The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions,return redirects, and conditionally select configurations.

将用户请求的URI 基于PCRE regex 所描述的模式进行检查,而后完成重定向替换

示例:
http://www.magedu.com/hn --> http://www.magedu.com/henan
http://www.magedu.com --> https://www.magedu.com/

(1)rewrite regex replacement [flag]

将用户请求的URI 基于regex 所描述的模式进行检查,匹配到时将其替换为replacement 指定的新的URI

注意:如果在同一级配置块中存在多个rewrite 规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查

隐含有循环机制, 但不超过10 次;如果超过,提示500响应码,[flag] 所表示的标志位用于控制此循环机制

如果replacement 是以http:// 或https:// 开头,则替换结果会直接以重向返回给客户端

301 :永久重定向  302:临时重定向



分析:目录跳转,正则匹配到zz开头的,都永久重定向到zhengzhou,且后边的uri不变,如:index.html,

[flag]:

① last :重写完成后停止对当前URI 在当前location 中后续的其它重写操作,而后对新的URI 启动新一轮重写检查;提前重启新一轮循环,不建议在lation 中使用

② break :重写完成后停止对当前URI 在当前location 中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location 中使用

③ redirect :临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI 给客户端,由客户端重新发起请求;不能以http:// 或https:// 开头,使用相对路径,状态码:302

 permanent: 重写完成后以永久重定向方式直接返回重写后生成的新URI 给客户端,由客户端重新发起请求,状态码 :301

 

(2)return

return code [text];   例:return 403 "error";

return code URL;    例:return 302 http://www.baidu.com/;
return URL;             例:return http://www.baidu.com/;
停止处理,并返回给客户端指定的响应码



例:连续跳转,image永久重定向到img,img又跳到www.baidu.com

location /image {

rewrite ^/image/(.*)$   /img/$1 permanent;

}

location /img {

return  http://www.baidu.com/ ;

}

(3)rewrite_log on | off;  把跳转的信息写到日志中

是否开启重写日志,  发送至error_log (notice level)

(4)set $variable value;

用户自定义变量,注意:变量定义和调用都要以$ 开头

(5)if (condition) { ... }

引入新的上下文, 条件满足时,执行配置块中的配置指令;server, location

condition:

比较操作符:

== 相同

!= 不同

~ :模式匹配,区分字符大小写

~* :模式匹配,不区分字符大小写

!~ :模式不匹配,区分字符大小写

!~* :模式不匹配,不区分字符大小写

文件及目录存在性判断:

-e, !-e  存在(包括文件,目录,软链接)

-f, !-f 文件

-d, !-d 目录

-x, !-x 执行



 

实验一:搭建lnmp及类小米等商业网站的实现

环境:关闭防火墙,selinux

1、安装包,开启服务

yum -y install nginx mariadb-server php-fpm php-mysql

systemctl start nginx

systemctl start mariadb

systemctl start php-fpm

 

2、修改nginx的配置文件

cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf  有个模板例子覆盖了配置文件

vim  /etc/nginx/nginx.conf  修改下面几类

① user  nobody;   使用用户

error_log  /var/log/nginx/error.log  info;   错误日志

 

② events {

    worker_connections  65535;   

}

 

③ tcp_nopush     on;     tcp优化

tcp_nodelay    on;

gzip  on;

 

④ server {

        listen       80;

        server_name  xiaomi.along.com;   根据自己顺便写

        root    /data/web;   主站点的目录根

location / {

            index  index.php index.html index.htm; 

        }

 

⑤ location ~ \.php$ {      开启.php,配置文件有例子,只需去掉注释,修改一行即可

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include        fastcgi_params;

        }

 

修改完,可以nginx -t 查看

systemctl restart nginx  重启服务,发现有warn

ulimit -n  查看linux系统里打开文件描述符的最大值,一般缺省值是1024,对一台繁忙的服务器来说,这个值偏小,所以有必要重新设置linux系统里打开文件描述符的最大值

ulimit -n 65535 修改内核参数

 

3、修改php-fpm的配置文件

vim /etc/php.ini  改两行

date.timezone = Asia/Shanghai  时区

short_open_tag = On   允许短标签

 

vim /etc/php-fpm.d/www.conf  改两行

user = nobody

group = nobody

 

systemctl restart php-fpm

 

4、运行mysql ,创建一会网页需要的库

create database xiaomi;

 

5、把事先找好的小米网站传进来 rz

mkdir /data/web -p  创建一个目录专门放小米的网页配置

unzip -d /data/web/ xiaomi.zip  解压到目录

cd /data/web/

chown -R nobody.nobody *  为了安全,递归把所有文件的所属人和所属组改为权限有限的nobody

 

6、网页登录

① 用户:admin

密码:123456



② 参数设置:就是连接上自己的数据库



也可以在命令行连上自己的数据库:

vim /data/web/data/config.php



③ 把数据写到数据库中,恢复数据



 

7、实验成功,登录查看



后台登录,可以自己随便修改
http://192.168.30.107/admin


8、ab 可以压力测试

 

实验二:实现ssl 加密


(1)一个物理服务器设置一个https

1、创建存放证书的目录

mkdir /etc/nginx/ssl

 

2、自签名证书

cd /etc/pki/tls/certs/

make nginx.crt



openssl rsa -in nginx.key -out nginx2.key  因为刚私钥被加密了,为了后边方便,解密

 

3、把证书和私钥cp 到nginx存放证书目录

cp nginx.crt nginx2.key /etc/nginx/ssl/

cd /etc/nginx/ssl/

mv nginx2.key nginx.key  把名字改回来

 

 

4、修改配置文件,加一段server

server {

        listen 443 ssl;

        server_name www.along.com;

        ssl on;

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

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

        ssl_session_cache shared:sslcache:20m;

        ssl_session_timeout 10m;

        }



5、测试,网页打开 https://192.168.30.7/



windows 信任证书



 


(2)一个物理服务器设置多个https

因为nginx 强大,可以实现多个虚拟主机基于不同的FQDN 实现ssl加密,httpd不能实现

1、生成3个证书和私钥

make nginx.crt

make nginx2.crt

make nginx3.crt



 

2、把证书和私钥cp 到nginx存放证书目录,并解开私钥的加密

cp nginx{1,2,3}* /etc/nginx/ssl/

openssl rsa -in nginx.key -out nginx.key

openssl rsa -in nginx2.key -out nginx2.key

openssl rsa -in nginx3.key -out nginx3.key

 

3、创建各自对应的访问网页

mkdir /app/website{1,2,3}

echo website1 > /app/website1/index.html

echo website1 > /app/website2/index.html

echo website1 > /app/website3/index.html



 

4、测试访问,成功

 

client_body_temp_path /var/tmp/client_body 1 2 2

1 级目录占1 位16进制,即2^4=16个目录 0-f

2 级目录占2 位16 进制 ,即2^8=256个目录 00-ff

3 级目录占2 位16进制,即 即2^8=256个目录 00-ff
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx