企业场景常用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个原因:
- 没有首页,并且禁止目录浏览功能。
- 站点目录没有访问权限。
- 通过访问控制限制了访问。
(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模块(深度学习别的模块及原理)!!