3-3nginx添加ssl证书➕核心配置文件说明

从0到1学运维:欢迎订阅专栏~,永久更新。帮助大家速成运维基本功~

往期文章

1-Linux源码安装部署MySQL

1-2 Mysql主从复制及其优化

1-3Linux读写分离MySQL

2-Redis服务端客户端使用与主从集群

3-1Nginx部署与配置多域名网站

3-2nginx负载均衡tomcat➕动静分离

一:添加ssl证书

为什么要添加ssl证书?

超文本传输安全协议(Hyper Text Transfer Protocol over Secure Socket Layer,HTTPS),是以安全为目标的HTTP通道,简单来说就是HTTP的安全版。HTTPS由两个部分组成:HTTP + SSL / TLS,在HTTP基础上又加了一层处理加密信息的模块,服务端和客户端的信息传输都会通过TLS进行加密,传输的数据都是加密后的数据。

为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

SSL证书是一种数字证书,它使用Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听。而且用户可以通过服务器证书验证他所访问的网站是否真实可靠。

加密的HTTP传输通道,浏览器访问格式为:https://url,其基于HTTP+TLS,现被广泛应用于互联网上安全敏感的通信,例如安全登录、订单交易、支付结算等方面。

HTTPS和HTTP的区别,超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。

HTTPS加密、解密、验证完整过程,如图

如下为HTTPS传输八个步骤内容详解:

(1) 客户端发起HTTPS请求,用户在浏览器里输入https网址,然后连接到Nginx Server的443端口。

(2) 服务器端采用HTTPS协议有一套数字证书,该证书可以自行配置,也可以向证书管理组织去申请,该证书其本质是公钥和私钥。

(3) 将公钥传送证书传递给客户端,证书包含了很多信息,例如如证书的颁发机构,过期时间、网址、公钥等等。

(4) 客户端解析证书,由客户端的TLS来完成,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出警告框,提示证书存在问题。如果证书没有问题,就会生成一个随机值。然后用证书对该随机值进行加密。

(5) 将证书加密后的随机值传送至服务器,让服务端获取该随机值,后续客户端和服务端的通信可以通过该随机值来进行加密解密。

(6) 服务端用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该值进行对称加密。

(7) 服务器端将用私钥加密后的信息发给客户端。

(8) 客户端用之前生成的私钥来解密服务端发送过来的信息,获取解密后的内容。

至于证书的申请,大家自己在网上购买或者阿里云腾讯云之类的白嫖,网上有相关教程。这里就不赘述了。总之最后会得到两个文件,大概这样子

二:之后编写nginx.conf文件

rver {
listen        443 ssl;
server_name       www.xxxx.com xxx.xxx.xxx.xxx(填你的域名和对应的IP);
ssl_certificate      www.xxxx.pem
ssl_certificate_key  www.xxxx.key
ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;
ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on;
location / {
root   xxx/xxx/xxx/xxx/...(填你的发布目录);
index  index.html index.htm;
}
}

然后重启nginx,访问web网页

三:核心配置文件说明(nginx.conf)

#定义Nginx运行的用户和用户组

user www www;

#启动进程,通常设置成和cpu的数量相等

worker_processes 8;

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

#为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。

worker_rlimit_nofile 102400;

#该指令是当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。

#全局错误日志及PID文件

error_log /usr/local/nginx/logs/error.log;

vents {

use epoll;

#epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能.

worker_connections 102400;

#单个后台worker process进程的最大并发链接数 (最大连接数=连接数*进程数)

multi_accept on;

#尽可能多的接受请求.

}

#设定http服务器,利用它的反向代理功能提供负载均衡支持

http {

#设定mime类型,类型由mime.type文件定义

include mime.types;

default_type application/octet-stream;

#设定日志格式

access_log /usr/local/nginx/log/nginx/access.log;

sendfile on;

#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用必须设为 on

#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime。

#autoindex on;

#开启目录列表访问,合适下载服务器,默认关闭。

tcp_nopush on;

#防止网络阻塞

#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://jfedu_www; #请求转向后端定义的均衡模块

}

# 定义错误提示页面

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

四:nginx location详解

Rewirte规则也称为规则重写,主要功能是实现浏览器访问HTTP URL的跳转,其正则表达式是基于Perl语言。通常而言,几乎所有的WEB服务器均可以支持URL重写。Rewrite URL规则重写的用途:

q 对搜索引擎优化(Search Engine Optimization,SEO)友好,利于搜索引擎抓取网站页面;

q 隐藏网站URL真实地址,浏览器显示更加美观;

q 网站变更升级,可以基于Rewrite临时重定向到其他页面。

Nginx Rewrite规则使用中有三个概念需要理解,分别是:Rewrite结尾标识符、Rewrite规则常用表达式、Nginx Rewrite变量,如下为三个概念的详解:

  1. Nginx Rewrite结尾标识符,用于Rewrite规则末尾,表示规则的执行属性。

last :相当于Apache里的(L)标记,表示完成rewrite匹配;

break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。  

redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址。  

permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。  

其中last和break用来实现URL重写时,浏览器地址栏URL地址不变。2

   2.Nginx Rewrite规则常用表达式,主要用于匹配参数、字符串及过滤设置

. 匹配任何单字符;

[word] 匹配字符串:word;

[^word]     不匹配字符串:word;

jfedu|jfteach     可选择的字符串:jfedu|jfteach;

? 匹配0到1个字符;

* 匹配0到多个字符;

+ 匹配1到多个字符;

^ 字符串开始标志;

$ 字符串结束标志;

\n 转义符标志。

   3.Nginx Rewrite变量,常用于匹配HTTP请求头信息、浏览器主机名、URL等。

HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_HOST, HTTP_ACCEPT;

connection & request: REMOTE_ADDR, QUERY_STRING;

server internals: DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOL;

system stuff: TIME_YEAR, TIME_MON, TIME_DAY。

详解如下:

HTTP_USER_AGENT 用户使用的代理,例如浏览器;

HTTP_REFERER 告知服务器,从哪个页面来访问的;

HTTP_COOKIE     客户端缓存,主要用于存储用户名和密码等信息;

HTTP_HOST 匹配服务器ServerName域名;

HTTP_ACCEPT 客户端的浏览器支持的MIME类型;

REMOTE_ADDR     客户端的IP地址

QUERY_STRING URL中访问的字符串;

DOCUMENT_ROOT 服务器发布目录;

SERVER_PORT 服务器端口;

SERVER_PROTOCOL 服务器端协议;

TIME_YEAR 年;

TIME_MON 月;

TIME_DAY 日;

4.Nginx Rewrite以下配置均配置在nginx.conf或者vhosts.conf中,企业中常用的Nginx Rewrite案例如下:

1.将yuhan.net跳转至www.yuhan.net。

if ($host = 'yuhan.net' ) {

        rewrite ^/(.*)$ http://www.yuhan.net/$1  permanent;

}

2.访问www.yuhan.net跳转www.test.com/new.index.html

rewrite   ^/$  http://www.test.com/index01.html  permanent;

3.访问/yuhan/test01/跳转至/newindex.html,浏览器地址不变。

rewrite   ^/yuhan/test01/$     /newindex.html     last;

4.多域名跳转到www.yuhan.net。

if ($host != ‘www.yuhan.net’ ) {

rewrite ^/(.*)$  http://www.yuhan.net/$1  permanent;

}

5.访问文件和目录不存在跳转至index.php。

if ( !-e $request_filename )

{

rewrite  ^/(.*)$  /index.php  last;

}

6.目录对换 /xxxx/123456  ====>  /xxxx?id=123456。

rewrite    ^/(.+)/(\d+)      /$1?id=$2       last;

7.判断浏览器User Agent跳转。

if( $http_user_agent  ~ MSIE)

{

rewrite ^(.*)$ /ie/$1 break;

}

8.禁止访问以.sh,.flv,.mp3为文件后缀名的文件。

location ~ .*\.(sh|flv|mp3)$

{

return 403;

}  

9.将移动用户访问跳转至移动端。

if ( $http_user_agent ~* "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)" )

{

rewrite ^/$      http://m.jfedu.net/       permanent;

}

10.匹配URL访问字符串跳转。

if ($args ~* tid=13){

 return 404;

}

11.访问/10690/jfedu/123跳转至/index.php?tid/10690/items=123,[0-9]表示任意一个数字,+表示多个,(.+)表示任何多个字符。

rewrite   ^/([0-9]+)/jfedu/(.+)$     /index.php?tid/$1/items=$2     last;

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值