我是靠谱客的博主 现实身影,最近开发中收集的这篇文章主要介绍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,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一.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证书

什么是证书?

        证书就是公钥和私钥

证书包含哪些内容?

  1.         证书的发布机构
  2.         证书的有效期
  3.         公钥
  4.         证书所有者(Subject)
  5.         签名所使用的算法
  6.         指纹以及指纹算法

为什么需要证书?

        为了安全,确定要访问的服务器是真正的我要访问的,不是钓鱼网站;企业用户才会需要购买证书,提升网站的可信度

证书是需要和域名绑定的

证书品牌:

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部