2-5-运维必备核心技能-nginx实现模块化应用实战

nginx如何配置称为https服务器
ngx_http_ssl_module模块:---ssl功能仅能够基于ip地址来实现,如果只有一个ip却有多个server,只能有一个是基于ssl的
ssl的交互过程:1、三次握手2、服务端发送证书给客户端,并发送支持的加密方式等等3、客户端接收证书,选择验证方式,验证后选择一次性会话密钥,用对方的公钥加密传给服务器,完成密钥交换4、服务端就可以使用这个密码来加密客户端请求的url资源
1、ssl on | off;
Enables the HTTPS protocol for the given virtual server.
2、ssl_certificate file;
当前虚拟主机使用PEM格式的证书文件;
3、ssl_certificate_key file;
当前虚拟主机上与其证书匹配的私钥文件;
4、ssl_protocols [SSLv2][SSLv3][TLSv1][TLS1.1][TLS1.2];
支持ssl协议版本,默认为后三个;
5、ssl_session_cache off | none | builtin[:size];
builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;

6、ssl_session_timeout time;
    客户端一侧的连接可以复用ssl session cache中缓存的ssl参数的有效时长;

配置示例:
    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;
    }

如何创建一个ca服务器
cd /etc/pki/CA/
(umask 077;openssl genrsa -out private/cakey.pem 2048)---创建私钥,保存在private/cakey.pem---2048密钥长度
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365---365天验证期限,会弹出一个对话,输入证书的内容
touch index.txt
echo 01 > serial

然后nginx服务器申请证书文件:
mkdir /etc/nginx/ssl
(umask 077;openssl genrsa -out nginx.key 2048)
openssl req -new -x509 -key nginx.key -out nginx.csr---证书接入请求
scp nginx.csr 172.168.0.68:/tmp---放在CA服务器上

CA服务器
openssl ca -in /tmp/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365
scp certs/nginx.crt 172.16.0.67:/etc/nginx/ssl

nginx服务器:编辑nginx配置文件
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_protocols sslv3 tlsv1 tlsv1.1 tlsv1.2
ssl_session_cache shared:SSL:10m;
}
访问这个网站会提示不是私密连接

ngx_http_rewrite_module模块:---url重定向(这个域名不存在,或者是访问http80重定向到https443端口)其实就是查找替换
The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions,return redirects,and conditionally select configurations.

bbs.magedu.com/ -->www.magedu.com/bbs/,http://www.magedu.com/-->https://www.magedu.com/
http://www.magedu.com/login.php;username=tom-->http://www.magedu.com/tom/

将用户请求的URI基于regex所描述的模式进行检查,而后完成替换;
1、rewrite regex replacement[flag]---url重定向以后,会拿新url重新匹配整个配置文件的规则
将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为热捧;acement指定的新的URI;
注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;
如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端;
301:永久重定向;
[flag]:---标志位,last和break直接由nginx内部完成,客户端无需参与
last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环;
break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其他配置,结束循环;
redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;临时重定向200响应码,需要客户端重新发请求,会看到一个新url
permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;永久重定向301响应码,需要客户端重新发请求,会看到一个新url

示例:
server {
#rewrite /(.).png$ /$1.jpg;---前边是正则表达式,需要转意,把所有访问.png改为访问.jpg $1表示前边的
rewrite /(.
)$ https://www.ilinux.io/$1;
}

2、return
return code [text];
return code URL;
return URL;

Stop processing and returns the specified code to a client.

3、rewrite_log on | off;
是否开启重写日志;
4、if{condition}{...}
引入一个新的配置上下文;条件满足时,执行配置块中的配置指令;server,location;

condition:
    比较操作符:
        ==
        !=
        ~:模式匹配,区分字符大小写
        ~*:模式匹配,不区分字符大小写
        !~:模式不匹配,区分字符大小写;
        !-*:模式不匹配,不区分字符大小写;
    文件及目录存在性判断:
        -e,!-e
        -f,!-f
        -d,!-d
        -x,!-x

5、set $variable value;
用户自定义变量

ngx_http_referer_module模块:防盗链
The ngx_http_refer_module module is used to block access to a site for requests with invalid values in the "Referer" header field.
1、valid_referers none | blocked | server_names | string ...;---合法引用
定义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;---还可以返回到主页
}

原文地址:https://blog.51cto.com/13852573/2364138

时间: 2024-10-15 10:15:16

2-5-运维必备核心技能-nginx实现模块化应用实战的相关文章

2-2-运维必备核心技能-nginx基础入门

Nginx的程序架构:master/worker一个master进程:---主进程负载加载和分析配置文件.管理worker进程.平滑升级一个或多个worker进程---子进程处理并响应用户请求缓存相关的进程:cache loader:载入缓存对象cache manager:管理缓存对象特性:异步.事件驱动和非阻塞并发请求处理:通过kevent.epoll.select./dev/poll文件io:高级io sendfile,异步,mmapnginx模块:高度模块化,但其模块早期不支持dso机制(

2-4-运维必备核心技能-nginx实现web服务配置

定义客户端请求的相关配置 12.keepalive_timeout timeout [header_timeout] 设定保持连接的超时时长,0表示禁止长连接,默认为75s 13.keepalive_requests number 在一次长连接上所允许请求的资源的最大数量,默认为100,如果第12项设置为0,此项没有用处 14.keepalive_disable none | browser ... 对哪种浏览器禁用长连接,现在绝大多数浏览器都支持,但可以设置禁用(防止爬虫) 15.send_t

2-3-运维必备核心技能-nginx配置文件全面讲解

aio这种逻辑一般只能在磁盘io上实现绑定8颗cpu中的后4颗,从0开始掩码为4.0001 00005.0010 00006.0100 00007.1000 0000看哪个进程运行在哪个cpu上ps axo comm,pid,psr | grep nginxwatch -n.5 'ps axo comm,pid,psr | grep nginx'动态观测0.5秒这个命令的执行结果没有人访问,所以可能不会变化yum install -y httpd-toolsab -n 10000 -c 100

[运维] 第六篇:告警是数据中心运维的核心驱动力!

告警事件是数据中心运维的核心驱动力,我们做的所有运维工作都是要减少业务出现故障的概率,提供更高的业务可用性.不知道大家是否认可这句话?还是看这张图,通过这张图,把这个问题讲透:        作为综合事件管理平台自身,需要有这样几个部件:1 丰富事件接口.作为数据中心的核心驱动引擎,需要有丰富的事件接口可以将各种IT事件,甚至非IT事件接收过来,常见的接口有rest.web service.snmp.soap.socket.xml.文本.jdbc等.因为面对的对象不同,所以能够使用的方式是完全不

linux故障定位,运维必备

linux故障定位,运维必备 背景有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源.这时候就需要登录服务器进一步深入分析问题的根源.那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题.所以,分析问题和踩坑是非常锻炼一个人的成长和提升自我能力.如果我们有一套好的分析工具,那将是事半功倍,能够帮助大家快速定位问题,节省大家很多时间做更深入的事情. 说明本篇文章主要介绍各种问题定位的工具以及会结合案例分析问题. 分析问题的方法论套用5W2H方法,可以

02. SpringCloud实战项目-快速搭建Linux环境-运维必备

SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. PassJava 是一款Java面试刷题的开源系统,可以用零碎时间利用小程序查看常见面试题,夯实Java基础. PassJava 项目可以教会你如何搭建SpringBoot项目,Spring Cloud项目 采用流行的技术,如 SpringBoot.MyBatis.Redis. MySql. Mon

linux运维好书推荐:《高性能Linux服务器构建实战Ⅱ》热销中,附实例源码下载

由国内著名技术社区ChinaUnix.51CTO鼎力推荐.华章图书出品.2014年南非蚂蚁(高俊峰)最新技术力作:<高性能Linux服务器构建实战----系统安全.故障排查.自动化运维与集群架构>,已经上架发行,此书是<高性能Linux服务器构建实战---运维监控.性能调优.集群应用>的姊妹篇,仍然沿用了实战.实用.通俗.易懂的写作特点,在内容上更加实战化,从运维的多个方面以近似真实的环境介绍运维工作中的各个方方面面,此书新增加了运维中很容易忽略但是又是非常重要的安全章节,这部分内

ansible自动化运维必备工具详解

第2章 ansible简单介绍: 2.1 ansible是什么? ansible是新出现的 自动化 运维工具 , 基于Python研发 . 糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行命令等功能. 仅需在管理工作站上安装 ansible 程序配置被管控主机的 IP 信息,被管控的主机无客户端. ansible 应用程序存在于 epel( 第三方社区 ) 源,依赖于很多 python 组件 python语言是运维人员必会的语言!ansible是一个基于Python开

身为运维工程师怎么用Nginx部署DokuWiki

运维人员按区域组织,人员分散,集中培训成本比较高: 新入职运维人员除了培训手册,没有其它渠道可以持续深入了解公司产品: 运维人员的知识存在各自脑袋里,缺少有效的渠道来传播和分享: 运维知识体系需要积累,形成公司资产: 选择Wiki系统 最初公司遇到的问题是运维人员经常向研发人员或者上级领导咨询重复回答无数次的问题.我在接手这个需求时,首先想到的是百科系统,类似百度知道.设想是运维人员遇到问题,将问题描述写出来,由其它能解决问题的人(研发或者经验丰富的运维人员)来回答.在这个阶段,我查找了多个百科