企业场景常用Nginx http模块汇总/ Nginx 企业搭建站点目录浏览功能、ngx_http_access_module模块企业案例

企业场景常用Nginx http模块汇总

ngx_http_core_moudle (核心http参数配置,对应nginx是配置为http区块部分)

ngx_http_access_module访问控制模块,用来控制网站用户对nginx的访问

ngx_http_gzip_moudle压缩模块,对nginx返回数据压缩,属于性能优化模块

ngx_http_fastcgi_moudle fastcgi模块,与动态应用相关的模块,如PHP

ngx_http_proxy_module proxy 代理模块

ngx_http_upstream_moudle 负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查

ngx_http_rewrite_moudle URL地址重写模块

ngx_http_limit_conn_moudle 限制用户并发连接数及请求模块

ngx_http_limit_req_moudle 根据定义的key限制nginx请求过程的速率

ngx_http_log_moudle 访问日志模块,指定的格式记录nginx客户访问日志等信息

ngx_http_auth_basic_moudle web认证模块,设置web用户通过账号密码访问nginx

ngx_http_stub_status_moudle记录nginx基本访问状态信息等的模块

nginx也有第三方好用模块,这里我就不列举了

Nginx 搭建站点目录浏览功能

Nginx默认是不允许列出整个目录的。如需此功能,打开你要启用目录浏览虚拟主机的配置文件,在server或location 段里添加上autoindex on;来启用目录浏览功能。

当Nginx找不到默认索引文件(index.html)时,通常会将请求传递给ngx_http_autoindex_module模块.

ngx_http_autoindex_module模块处理以斜杠字符("/")结尾的请求,并生成目录列表。

不要丢掉了结尾的斜线

1.指令说明

go 复制代码
#启用或禁用目录列表输出,on开启,off关闭。
Syntax:autoindex on|off;
Default:   autoindex  off;  #默认为off,默认是不允许列出整个日录的,
context:  http, server, location
#指定是否应在目录列表中输出确切的文件大小,on显示字节,off显示大单位
synatax:autoindex_exact_size on | off;
Default:  autoindex_exact_size on ;默认为on,显示出文件的确切大小,单位是bytes
#改为off后,显示文件的大小,单位是KB或MB或者GB

Context:   http,server,location

#根据指定目录列表中的时间是应以本地时区还是UTC输出,on本地时区,off UTC时间
Syntax:autoindex_locatime on | off;
Default:autoindex_localtime off;#默认为off,显示文件时间为GMT时间
#改为on后,显示的文件的服务器时间

Context:http,server,location

例1:

go 复制代码
gzip /etc/nginx/conf.d/default.conf

cd /etc/nginx/conf.d/
cat >/etc/nginx/conf.d/mirrors.wulin.org.conf<<EOF
server {
   listen 80;
   server_name mirrors.wulin.org;
   charset utf-8;  #设定字符集,防止中文字符乱码显示
   autoindex on;   #启用目录列表功能
   autoindex_exact_size off;
   autoindex_locatlime on;

   location / {
        root /data/blog;
    } 
}
EOF
#检测语法并重启
nginx -t && pkill nginx && lsof -i :80
systemctl start nginx && lsof -i :80
#创建测试目录与文件
mkdir /data/blog
echo wulinsss >/data/blog/index.html
cp /bin/{ls,cp} /data/blog

ngx_http_access_module模块

不配置首页测试,403权限问题、

(1)

bash 复制代码
[root@web01 conf.d]# curl -H "host:mirrors.wulin.org" 192.168.28.7

403 Forbidden

403 Forbidden


nginx/1.20.1

bash 复制代码
#终端:
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>

总结---403的3个原因:

  1. 没有首页,并且禁止目录浏览功能。
  2. 站点目录没有访问权限。
  3. 通过访问控制限制了访问。

(2) 配置首页index.html

bash 复制代码
[root@web01 conf.d]# echo wulinsss >/data/index.html
[root@web01 conf.d]# curl -H "host:mirrors.wulin.org" 192.168.28.7
wulin

(3)开启配置浏览功能,并删掉首页文件,增加文件后测试结果

go 复制代码
server {
    listen 80;
    server_name mirrors.wulin.org;
    #charset utf-8;      #设定字符集,防止中文字符乱码显示。
    autoindex on;        #启用目录列表功能。
    autoindex_exact_size off;
    autoindex_localtime on;
    location / {
         root /data/blog;
	     index  index.html;
    }
}

#注意:只开启1行: autoindex on; #启用目录列表功能。

bash 复制代码
nginx -t && systemctl start nginx

#删除首页文件增加其他文件

go 复制代码
[root@web01 conf.d]# rm -f /data/blog/index.html 
[root@web01 conf.d]# cp /bin/ls /bin/cp /data/blog
[root@web01 conf.d]# curl -H host:mirrors.wulin.org 192.168.28.7

Index of /

Index of /


复制代码
../
cp                                      02--2024 02:15               155176
ls                                      02--2024 02:15              117608
wulin2                                      02--2024 02:15              117602
wulin3                                      02--2024 02:15              117608

可以看到目录下列表了,使用浏览器解析,访问查看。

(4) 最终结果和阿里云的镜像(目录对比)对比

nginx中文乱码:

1.配置文件里面加上charset utf-8;

2.中文文件内容加上charset utf-8;

模拟搭建阿里云镜像站及yum仓库

bash 复制代码
[root@web01 ~]# gzip /etc/nginx/conf.d/mirrors.wulin.org.conf
[root@web01 ~]# cat /etc/nginx/conf.d/mirrors.wulin.org.conf
server {
    listen 80;
    server_name mirrors.wulin.org;
    charset utf-8;
    root /data/blog;   #正常站点目录

    location / {
        index index.html; #阿里云镜像首页
    }

    #yum仓库目录
    location /centos/ {
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
}

首页文件:

bash 复制代码
[root@web01 conf.d]# cat /data/blog/index.html 

Welcome to oldboyedu!

阿里云镜像首页

Thank you for use wulin阿里云.

这里可以做各种链接进行链接进去即可!!!
Welcome to oldboyedu!

Index of /centos/

复制代码
arp
ab                                      02--2024 02:15               155176
abrt-action-analivze-ccpp-local                                      02--2024 02:15              117608

打开发现这个镜像目录搭建与完成,还可以进行下载

使用rsync同步官方源到yum仓库

bash 复制代码
[root@web01 centos]# rsync -avz rsync://rsync.mirrors.ustc.edu.cn/repo/centos/  /data/centos/
receiving incremental file list
./
2 -> 2.1
......
7 -> 7.9.2009
8 -> 8.4.2105
HEADER.html
RPM-GPG-KEY-CentOS-3
.......
RPM-GPG-KEY-CentOS-Testing-7
dir_sizes
filelist.gz

nginx访问控制

  • 基于来源IP访问控制ngx_http_access_module模块
  • 基于使用用户密码登录 ngx_http_auth_basic_module模块

ngx_http_access_module模块允许限制对某些客户端地址的访问

指令:

bash 复制代码
#允许配置语法
Syntax: allow address | CIDR | unix: | all;
#语法中address表示地址。CIDR表示网段;unix:指定特殊值,允许访问所有UNIX	套接字,all表示所有
Default:      -
Context:   http,server,location,limit_except

#拒绝配置语法
Syntax: deny address |CIDR |unix : | all;
Default:    -
Content: http,server,location,limit_except

搭建只允许指定的来源IP能访问/centos,其他网段全部拒绝

  • 配置文件:
bash 复制代码
[root@web01 ~]# gzip /etc/nginx/conf.d/mirrors.wulin.org.conf
[root@web01 ~]# cat /etc/nginx/conf.d/mirrors.wulin.org.conf
server {
    listen 80;
    server_name mirrors.wulin.org;
    charset utf-8;
    root /data/blog;   #正常站点目录

    location / {
        index index.html; #阿里云镜像首页       #yum仓库目录
        location /centos/ {
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        deny 10.0.0.7;      #拒绝指定的地址或地址段
        deny 10.0.0.0/24;      #拒绝指定的地址或地址段
        allow all;          #允许所有的地址
    }  
    #先允许后拒绝的模式是企业生产场景重要的应用
    
    location /admin/ {           #网站后台,先进行办公源地址访问。
        allow 10.0.0.7;           #允许指定的地址或地址段
        deny all;                 #拒绝所有的地址
    }
}

注意:deny和allow的顺序是有影响的

默认情况下,从第一条规则进行匹配

如果匹配成功,则不继续匹配下面的内容。 如果匹配不成功,则继续往下寻找能匹配成功的内容。

打开浏览器显示即为成功!!!

生产用途:网站后台限制,运行源IP访问,限制在公司局域网内:

生产场景:

bash 复制代码
#在办公室还是公网访问
location /admin/ {网站后台限制,允许源IP访问
        allow 10.0.0.7;           #允许指定的地址或地址段,办公室出口IP。
        deny all;                 #拒绝所有的地址
    }
    #回家登录vpn,属于局域网内部访问,然后在访问172.16.1.7/admin

局限性:

面试题:在nginx反向代理后面的节点机器,如何获取最终网站用户客户端机器的IP?

x_forwarded_for

局限性解决方法总结:

  • 采用http头信息控制访问,如HTTP_X_FORWARD_FOR
  • 结合geo模块
  • 通过HTTP自定义变量传递

HTTP_X_FORWARD_FOR头信息控制访问会更好解决该问题:要求访问时必须带上所有用到的ip的地址信息,HTTP_X_FORWARD_FOR记录过程:

看日志文件:

今天先写到这里,后期更新nginx模块(深度学习别的模块及原理)!!

相关推荐
WolvenSec17 分钟前
网络基础:EIGRP
运维·网络·安全·智能路由器
踩着阴暗的自己向上爬1 小时前
Day05-04-持续集成总结
linux·运维·ci/cd
TiDB_PingCAP2 小时前
国产化新标杆:TiDB 助力广发银行新一代总账系统投产上线
运维·数据库·开源·tidb
qyhua2 小时前
Linux内网端口转公网端口映射
linux·运维·服务器
coisini.cn3 小时前
基于CentOS Stream 9平台搭建MinIO以及开机自启
运维·minio·centos stream 9
Python私教4 小时前
docker部署onlyoffice,开启JWT权限校验Token
运维·docker·容器
Ramboooooooo5 小时前
Nginx Lua Waf 插件一键部署
运维·nginx·lua·waf·lua waf·nginx waf
掘根6 小时前
【Linux】压缩命令——gzip,bzip2,xz
大数据·linux·运维
初学️计算6 小时前
网络协议与标准
运维·服务器·windows