概述
目录
一.http_core_module模块之nginx隐藏版本功能
二.http_sub_status_module模块之状态统计功能
三.http_auth_basic_module模块之基本认证功能
四.http_access_module模块之限制功能
五.http_core_module模块之下载功能
六.http_core_module模块之location对uri的匹配顺序
URL和URI之间的主要区别
七.http_ssl_module模块之https
SSL证书
在nginx里部署http服务
一.http_core_module模块之nginx隐藏版本功能
为什么要隐藏nginx的版本?
因为正常情况下,别人访问你的nginx服务器,是可以通过网页的检查,看到你的server的版本的,而每个版本都有他的bug,这样就很容易被黑客查找到你的漏洞,对于服务器安全来说是不利的。
如何隐藏nginx的版本?
在nginx的配置文件nginx.conf的http块中增加server_tokens off;
浏览器抓包查看:
隐藏前
隐藏后
二.http_sub_status_module模块之状态统计功能
所谓状态统计,就是能够清楚的知道有多少人正在访问我的nginx服务
打开nginx的状态统计,就是在nginx.conf文件的http块的server块中新增一个location:
在浏览器中访问的效果:
详细解析:
Active connections: 1
server accepts handled requests
6 6 11
Reading: 0 Writing: 1 Waiting: 0
##这些东西都是存放在nginx的内存中的,nginx重启之后就会消失
- Active connections活跃链接数量,正在访问观看网站的连接,也就是通过netstat查看established状态中nginx的的数量,它也包括等待访问的数量
[root@xieshan conf]# netstat -anplut|grep ES
tcp 0 0 192.168.2.43:22 192.168.2.147:52111 ESTABLISHED 15571/sshd: root@pt
tcp 0 0 192.168.2.43:22 192.168.2.117:50663 ESTABLISHED 16206/sshd: root@pt
tcp 0 0 192.168.2.43:22 192.168.2.117:49983 ESTABLISHED 16165/sshd: root@pt
tcp 0 0 192.168.2.43:80 192.168.2.117:52597 ESTABLISHED 16197/nginx: worker
server accepts handled requests
- accepts是总的连接数量
- handled是处理的连接数量,一般跟accepts数量一致
- requests是请求数,访问一次,请求数就会相应的加1,可以理解为pv数【pv 是衡量一个网站忙不忙的很重要的一个标志】
这些状态统计的值会存放在nginx的内存中,nginx重启会消失,那么请你编写一个脚本保存活跃链接数量:
#写这个脚本的价值在于了解到这个网站一天中访问量最大的数量,再将它写入数据库,可以分析,或者使用zabbix监控
[root@xieshan conf]# vim nginx_con.sh
[root@xieshan conf]# cat nginx_con.sh
#!/bin/bash
active_num=$(curl http://192.168.2.43/status 2>/dev/null |awk '/Active/{print $NF}')
echo $active_num
[root@xieshan conf]# bash nginx_con.sh
1
- Reading表示读请求报文的头部信息
- Writing表示正在回复的数量,可以看nginx忙不忙
- Waiting表示等着访问的数量,已经连接过来了,但是没有访问,闲着的(也就是活跃的连接数中有多少没有访问了,一会儿可能就会断开了)
官方文档中对状态统计的详细解释:
Active connections
The current number of active client connectionsincluding Waiting connections.
accepts
The total number of accepted client connections.
handled
The total number of handled connections.Generally, the parameter value is the same as acceptsunless some resource limits have been reached(for example, theworker_connections limit).
requests
The total number of client requests.
Reading
The current number of connections where nginx is reading the request header.
Writing
The current number of connectionswhere nginx is writing the response back to the client.
Waiting
The current number of idle client connections waiting for a request.
三.http_auth_basic_module模块之基本认证功能
比如上面的状态统计功能,正常情况下是所有人输入192.168.43/status都能够查看到结果,但是这样是不安全的,所以我么可以添加一个基本认证,对用户名密码进行验证,验证通过了才能查看
使用htpasswd命令来设置验证的用户和密码,并且对密码进行加密
[root@xieshan conf]# htpasswd -c /usr/local/sclilin99/conf/htpasswd cali
New password:
Re-type new password:
Adding password for user cali
[root@xieshan conf]# pwd
/usr/local/sclilin99/conf
[root@xieshan conf]# cat htpasswd
cali:$apr1$FqeDtLmy$B9t7FudDfgmVBY6BMdPn80
重新加载nginx后,再次查看状态,就会要求你输入用户名和密码了
在这里我出现了一个错误,输入了用户名和密码后,发现显示403错误
然后我查看了我的nginx日志(位置在/usr/local/sclilin99/log/error.log),发现他查找密码的目录有问题,它是在/usr/local/sclilin99/conf/conf/htpasswd里去查找,正确的应该是/usr/local/sclilin99/conf/htpasswd
所以再重新修改我的配置文件nginx.conf,把原来auth_basic_user_file conf/htpasswd改成auth_basic_user_file htpasswd
再重新访问,就能够成功了
四.http_access_module模块之限制功能
上面那个基本认证比较低级,我们可以直接在nginx中限制,允许哪些主机访问过来,不允许哪些访问,相当于设置一个黑白名单,也可以理解为nignx自带的一个iptables
配置如下:
匹配规则是第一个匹配上了就不往后匹配了,否则一直往后,都不匹配的话,就匹配默认的规则(跟iptables的规则匹配顺序一样)
五.http_core_module模块之下载功能
比如我们在html文件夹中创建一个download文件夹,里面放一些可供下载的文件,还要存在一个index.html(记住,必须要有index.html,否则访问不了页面)
正常访问,会出现index.html中定义的内容
如果我们把index.html改名为index.html.bak,那么会出现访问不了的情况,但是我们希望能够让用户下载download里面的内容。有index.html只会显示index.html里面的内容,没有的话又会出现403错误,那么应该如何让nginx实现下载功能呢?
解决方法很简单,我们在根的那位置添加autoindex on;开启自动路由功能就可以了
接下来就可以实现下载功能了(是不是觉得这个页面有点眼熟,kernel里面很多下载的地方也是这个页面,证明kernel官网使用的也是nginx服务器)
六.http_core_module模块之location对uri的匹配顺序
URL和URI之间的主要区别
URL是统一资源定位器,用于标识资源;URI(统一资源标识符)提供了更简单和可扩展的标识资源的方法。URL是URI的子集,下面我们就来看看一下URL和URI的主要区别是什么。
1、作用的区别
URL(统一资源定位符)主要用于链接网页,网页组件或网页上的程序,借助访问方法(http,ftp,mailto等协议)来检索位置资源。
URI(统一资源标识符)用于定义项目的标识,此处单词标识符表示无论使用的方法是什么(URL或URN),都要将一个资源与其他资源区分开来。
2、可以说URL是URI(URL是URI的子集),但URI永远不能是URL。
3、协议区别
URL指定要使用的协议类型,而URI不涉及协议规范。
######################################
nginx对uri的匹配不包括前面的IP地址或者域名
192.168.2.43/download uri是/download
####################################
URI匹配过程
##########################
匹配顺序:
= ---> ^~ ---> ~* ----> ~
七.http_ssl_module模块之https
https不是默认加载模块,需要自己指定,而且编译安装默认也不开启,需要指定选项参数--with-http_ssl_module
nginx中的配置文件里的https
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem; #公钥
# ssl_certificate_key cert.key; #私钥
# ssl_session_cache shared:SSL:1m; #缓存时间
# ssl_session_timeout 5m; #超时时间
# ssl_ciphers HIGH:!aNULL:!MD5; #加密算法
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
https是更加安全的,其中的s就是指ssl
HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的。
SSL(Secure Sockets Layer 安全套接字协议),以及它的继任者传输层安全(Transport Layer Security TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
TLS是SSL的创新安全协议,建立在SSL的基础之上
<可以把SSL理解为在传输层和应用层之间新增的一层>
SSL证书
什么是证书?
证书就是公钥和私钥
证书包含哪些内容?
- 证书的发布机构
- 证书的有效期
- 公钥
- 证书所有者(Subject)
- 签名所使用的算法
- 指纹以及指纹算法
为什么需要证书?
为了安全,确定要访问的服务器是真正的我要访问的,不是钓鱼网站;企业用户才会需要购买证书,提升网站的可信度
证书是需要和域名绑定的
证书品牌:
CA:权威认证机构,颁发数字证书的机构,而且CA给颁发的证书签名
数字证书:证明这个公钥是你的
数字签名:用来身份识别的,给CA颁发的数字证书签名,证明这个证书是某某公司的,具有可信性。是浏览器来认可CA颁发的证书,证书上有签名。浏览器和CA公司早就达成了合作关系(CA公司会给浏览器产商money)
数据加密:是数字签名认证通过后,确认证书是有效的,然后再发送数据,发送数据的过程中使用公钥和私钥的加密和解密
数字签名的制作过程[左边]:
SSL认证过程:(背后有CA和浏览器产商的作用)
在nginx里部署http服务
1.到阿里云去申请免费的证书digicert类型的免费证书,可以使用1年,下载下来
7318014_sanchuangedu.cn_nginx.zip
2.上传下载的证书到nginx服务器的conf目录下
[root@xieshan conf]# pwd
/usr/local/sclilin99/conf
[root@xieshan conf]# ls
7318014_sanchuangedu.cn_nginx.zip koi-utf scgi_params
fastcgi.conf koi-win scgi_params.default
fastcgi.conf.default mime.types uwsgi_params
fastcgi_params mime.types.default uwsgi_params.default
fastcgi_params.default nginx.conf win-utf
htpasswd nginx.conf.default
3.对证书进行解压
[root@xieshan conf]# yum install unzip -y
[root@xieshan conf]# unzip 7318014_sanchuangedu.cn_nginx.zip
Archive: 7318014_sanchuangedu.cn_nginx.zip
Aliyun Certificate Download
inflating: 7318014_sanchuangedu.cn.pem
inflating: 7318014_sanchuangedu.cn.key
[root@xieshan conf]# ls
7318014_sanchuangedu.cn.key htpasswd scgi_params
7318014_sanchuangedu.cn_nginx.zip koi-utf scgi_params.default
7318014_sanchuangedu.cn.pem koi-win uwsgi_params
fastcgi.conf mime.types uwsgi_params.default
fastcgi.conf.default mime.types.default win-utf
fastcgi_params nginx.conf
fastcgi_params.default nginx.conf.default
7318014_sanchuangedu.cn.key 私钥
7318014_sanchuangedu.cn.pem 公钥
4.修改配置文件中的https块,启动https服务
HTTP server
server {
listen 443 ssl;
server_name www.sanchuangedu.cn;
ssl_certificate 7318014_sanchuangedu.cn.pem;
ssl_certificate_key 7318014_sanchuangedu.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
5.重启nginx服务
[root@xieshan conf]# nginx -t
nginx: the configuration file /usr/local/sclilin99/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/sclilin99/conf/nginx.conf test is successful
[root@xieshan conf]# nginx -s reload
6.检验是否成功
[root@xieshan conf]# netstat -anplut|grep nginx
tcp 0 0 0.0.0.0:9001 0.0.0.0:* LISTEN 3883/nginx: master
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3883/nginx: master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3883/nginx: master
访问https://192.168.2.43
显示有风险,虽然我们的nginx开启了https功能,但是我们通过IP地址访问,浏览器无法确定域名跟IP地址是否对应;所以证书要与域名绑定
继续访问可以访问成功,但是浏览器还是会提示不安全【没有使用域名访问的效果,数字签名是对应一个域名的但是我们是使用IP去访问的】
如果我们使用域名访问,但是这个域名绑定的是老师的服务器IP,就会出现老师服务器nginx的效果
但是我们可以通过修改真实机器的hosts文件,让我们访问www.sanchuangedu.cnde的时候转到自己服务器上的nginx上来
mockingbird@MockingbirddeMacBook-Air ~ % vim /etc/hosts
mockingbird@MockingbirddeMacBook-Air ~ % cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
0.0.0.0 account.jetbrains.com
192.168.2.43 www.sanchuangedu.cn
直接通过IP的话,还是显示不安全,因为检查了证书,没有跟域名绑定
解决http跳转到https的方法: http_rewrite_module
【你会发现你在浏览器中输入http://www.baidu.com最后跳转到的网页显示的url还是https://www.baidu.com】
在nginx配置文件的监听80端口的哪个server里面修改,让它永久重定向【301】到https
方法一:return
[root@xieshan conf]# vim nginx.conf
[root@xieshan conf]# cat nginx.conf
http {
server {
listen 80;
server_name www.sanchuangedu.cn;
return 301 https://www.sanchuangedu.cn;
方法二:rewirte
[root@xieshan conf]# vim nginx.conf
[root@xieshan conf]# cat nginx.conf
http {
server {
listen 80;
server_name www.sanchuangedu.cn;
#return 301 https://www.sanchuangedu.cn;
rewrite ^/(.*) https://www.sanchuangedu.cn permanent; #permanent永久重定向;redirect临时重定向
访问测试:
在浏览器中输入http://www.sanchuangedu.cn会自动跳转到https://www.sanchuangedu.cn
其实过程就是先访问http://www.sanchuangedu.cn,出现一个200状态码,然后跳转到https://www.sanchuangedu.cn,状态码是301
Linux不会帮你跳转,可以看到更加直观的效果:
[root@xieshan conf]# curl http://www.sanchuangedu.cn
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.21.4</center>
</body>
</html>
推荐两篇讲解https非常详细的博客:
https://blog.csdn.net/iispring/article/details/51615631
https://zhuanlan.zhihu.com/p/27395037
最后
以上就是现实身影为你收集整理的Nginx---经常使用的一些模块、功能一.http_core_module模块之nginx隐藏版本功能二.http_sub_status_module模块之状态统计功能三.http_auth_basic_module模块之基本认证功能四.http_access_module模块之限制功能五.http_core_module模块之下载功能六.http_core_module模块之location对uri的匹配顺序七.http_ssl_module模块之https的全部内容,希望文章能够帮你解决Nginx---经常使用的一些模块、功能一.http_core_module模块之nginx隐藏版本功能二.http_sub_status_module模块之状态统计功能三.http_auth_basic_module模块之基本认证功能四.http_access_module模块之限制功能五.http_core_module模块之下载功能六.http_core_module模块之location对uri的匹配顺序七.http_ssl_module模块之https所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复