Nginx最常用的七种模块配置

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
访问控制,不限时长
简介: 1.Nginx目录索引Nginx默认是不允许列出整个目录浏览下载配置目录索引的命令语法格式:autoindex on | off ; on开启 off关闭默认配置:autoindex off; 如果默认开启的话所有的文件都会以列表形式累出来,这些文件是不能给用户看到的配置区域:http(对所有站点生效)、server(对单个站点生效)、location(对单个页面生效,最常用)autoindex常用参数

Nginx基础模块

官方帮助文档

image.png


1.Nginx目录索引

Nginx默认是不允许列出整个目录浏览下载


配置目录索引的命令


语法格式:autoindex on | off ; on开启 off关闭

默认配置:autoindex off; 如果默认开启的话所有的文件都会以列表形式累出来,这些文件是不能给用户看到的

配置区域:http(对所有站点生效)、server(对单个站点生效)、location(对单个页面生效,最常用)

autoindex常用参数


autoindex_exact_size off; 修改为on表示显示出文件的确切大小,单位是bytes,修改为off表示显示出文件的大概大小,单位是kb或者mb或者gb

autoindex_localtime on; 修改为on表示显示的时间为服务器中文件的时间,修改为off表示显示文件时间为GMT时间

charset utf-8,gbk; 默认中文目录乱码,添加上解决乱码,一般只配置一个utf-8即可,如果配置了utf8不行,那么久加上gbk

案例:实现目录索引


需求:1.当访问know.com时打开首页,2.访问know.com/download则打开目录索引列表


注意:对单个页面实现目录索引,则在location /xxx{}中进行配置,想要实现首页目录索引,则在location /中配置

[root@localhost conf.d]# vim know.conf
server {
        listen 80;
        server_name know.com;
        location / {
                root    /web/know;
                index   index.html;
        }
        location /download {
                root /web/know;
                autoindex on;
                autoindex_exact_size on;
                autoindex_localtime on;
                charset utf-8,gbk;
        }
}
[root@localhost know]# mkdir download
[root@localhost know]# cd download/
上传文件
[root@localhost download]# rz -E
[root@localhost download]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost download]# systemctl reload nginx

配置文件解读

image.png

2.Nginx状态监控

ngx_http_stub_status_module用于展示nginx连接状态信息,需要–with-http_stub_module模块支持


配置状态监控命令


语法格式:stub_status; 老版本的nginx需要在后面加个on

默认配置:-

配置文件:server(对单个站点生效)、location(对单个页面生效,最常用)

配置nginx status

[root@localhost conf.d]# vim know.conf
server {
        listen 80;
        server_name know.com;
        location / {
                root    /web/know;
                index   index.html;
        }
        location /nginx_status {      //这里必须是nginx_status
                stub_status;
                access_log off;   //这一项必须加上,表示不把此页面的访问写入到日志中
        }
}
网站访问输出信息
http://know.com/nginx_status
Active connections: 2 
server accepts handled requests
    338   338   395 
Reading: 0 Writing: 1 Waiting: 1 
Active connections    //当前活动的连接数
accepts     //当前的总连接数TCP
handled     //成功的连接数TCP
requests    //总的http请求数

image.png

注意:


如果使用restart重置服务,会清空所有的连接数

reload重载不会清空之前的连接数

通过状态监控,可以验证长连接和短连接的区别

设置短连接只需要修改/etc/nginx/nginx.conf文件中keepalive_timeout 0;即可

3.Nginx访问控制

3.1.Nginx基于ip的访问控制

基于ip的访问控制 http_access_module


配置命令


允许配置语法


语法格式:allow address|CIDR|unix:|all;

默认配置:-

配置区域:http(对所有站点生效)、server(对单个站点生效)、location(对单个页面生效,最常用)、limit_except(特殊位置)

拒绝配置语法


语法格式:deny address|CIDR|unix:|all;

默认配置:-

配置区域:http、server、location、limit_except

访问控制规则查看流程:从上往下、依次匹配,满足就不再继续,和网络中的acl规则一致


企业中访问控制思路


先写允许的就默认拒绝所有

先写拒绝的就默认允许所有

常见配置


允许一个:allow 192.168.81.210

允许一个网段:allow 192.168.81.0/24

允许多个网段就多写几个allow

允许所有deny all

拒绝一个:deny 192.168.81.210

拒绝一个网段:deny 192.168.81.0/24

拒绝多个网段就多写几个deny

拒绝所有deny all

案例1:只允许192.168.81.1访问nginx_status,其他都拒绝

[root@localhost conf.d]# vim know.conf
location /nginx_status {
                stub_status;
                access_log off;
                allow 192.168.81.1;
                deny all;
}
nginx -t 
systemctl reload nginx

案例2,拒绝192.168.81.1访问nginx_status,其他都允许

[root@localhost conf.d]# vim know.conf
location /nginx_status {
                stub_status;
                access_log off;
                deny 192.168.81.1;
                allow all;
}
[root@localhost ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost ~]# systemctl reload nginx

3.2.Nginx基于用户认证访问控制

基于用户登录认证:http_auth_basic_module


认证配置命令


语法格式:auth_basic string |off; string表示描述信息,off表示关闭

默认配置:auth_basic off;

配置区域:http(对所有站点生效)、server(对单个站点生效)、location(对单个页面生效,最常用)、limit_except(特殊位置)

用户密码配置文件


语法格式:auth_basic_user_file filepath;

默认配置:-

配置区域:配置区域:http(对所有站点生效)、server(对单个站点生效)、location(对单个页面生效,最常用)、limit_except(特殊位置)

实例

生成用户密码文件
[root@localhost ~]# htpasswd -b -c /etc/nginx/.auth_passwd.conf admin 123456
Adding password for user admin  
//首次创建使用-c创建出文件,第二次添加用户时不能使用-c,会把原来内容覆盖,-b表示命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互,-D 删除指定的用户,建议多创建一些账号密码给不同人使用,某人离职后使用-D给他删掉
[root@localhost ~]# htpasswd -b /etc/nginx/.auth_passwd.conf jiangxl 123456
Adding password for user jiangxl
删除用户
[root@localhost ~]# htpasswd -D /etc/nginx/.auth_passwd.conf wuzh
Deleting password for user wuzh
[root@localhost ~]# cat /etc/nginx/.auth_passwd.conf 
admin:$apr1$ZanWwGuM$HSZAnt6DfJ0QQ3QK8xFp3.
jiangxl:$apr1$57gO0dsC$oNVF71wAfQN2qgTck8iI//
[root@localhost conf.d]# vim know.conf
server {
        listen 80;
        server_name know.com;
        location / {
                root    /web/know;
                index   index.html;
        }
    location /download {
                root /web/know;
                autoindex on;
                charset utf-8,gbk;
                autoindex_exact_size on;
                autoindex_localtime on;
                auth_basic "Please enter the user name password!!!";
                auth_basic_user_file /etc/nginx/.auth_passwd.conf;
    }
}
[root@localhost ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost ~]# systemctl reload nginx
谷歌看不到我么配置的提示内容,可以使用火狐

image.png

  • 可以使用wareshark来抓包获得登录账号及密码
  • 点击捕获—选择网卡—开始,找http关于get或者post的找transfer一行找关于认证的内容

image.png

4.Nginx访问限制

经常会遇到这种情况,服务器流量异常,负载过大等等,对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力,影响业务,往往开考虑对同一个IP的连接数,并发数进行限制

ngx_http_limit_conn_module模块可以根据定义key来限制每个键值的连接数,如同一个IP来源的连接数

4.1.连接数限制

HTTP请求建立在一次TCP连接基础上,一次TCP连接至少产生一次HTTP请求


用到的变量


$binary_remote_addr 变量的长度是固定的4字节,表示客户端的地址存储字节,一个IP就是4字节,完全没有必要用7-15字节的,除非IPv6

$remote_addr 变量的长度是7-15字节

一个IP地址=32bit=4字节,假如我们配置的策略大小是10M那么可以容纳的IP数为10M=10X024X024


limit_conn_module连接频率限制


NGINX连接限制预语法


定义连接数限制zone

语法格式:limit_conn_zone key zone=name:size;

默认配置:-

配置区域:http(对所有站点生效)

调用连接数限制zone

语法格式:limit_conn name number;

默认配置:-

配置区域:http(对所有站点生效)、server(对单个站点生效)、location(对单个页面生效,最常用)

实例

首先定义一个zone限制,可以定义多个,对不同站点做不同的限制,配置在http模块中,按着正规配置就配置在nginx.conf中的http中,也可以配置到单个server配置中的最上方
[root@localhost conf.d]# vim /etc/nginx/nginx.conf
http {
  .....
  .....
    limit_conn_zone $binary_remote_addr zone=know_conn:10m;
    include /etc/nginx/conf.d/*.conf;
}
限制同一个IP来源的数量
[root@localhost conf.d]# vim know.conf
limit_conn_zone $binary_remote_addr zone=know_conn:10m;
server {
        listen 80;
        server_name know.com;
        location / {
                root    /web/know;
                index   index.html;
                limit_conn know_conn 1;
        }
}        
[root@localhost ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost ~]# systemctl reload nginx
解释:
  limit_conn_zone $binary_remote_addr zone=know_conn:10m;   //定义一个限制,将用户的IP保存到变量$binary_remote_addr中,定义限制的名称是know_conn大小为10m
  limit_conn know_conn 1;   //调用刚刚定义的限制zone,1表示同一时刻只允许一个客户端ip连接

压力测试

[root@localhost ~]# ab -n 30000 -c 200 http://know.com/index.html

image.pngimage.png

4.2.请求数限制

limit_req_module请求频率限制


请求数限制语法


定义请求数限制语法

语法格式:limit_req_zone key zone=name:size rate=rate;

默认配置:-

配置区域:http(对所有站点生效)

调用请求数限制语法

语法格式:limit_req zone number [burst=number] [nodelay];

默认配置:-

配置区域:http(对所有站点生效)、server(对单个站点生效)、location(对单个页面生效,最常用)

请求数配置实例

[root@localhost conf.d]# vim know.conf
limit_req_zone $binary_remote_addr zone=know_req:10m rate=1r/s;
server {
        listen 80;
        server_name know.com;
        location / {
                root    /web/know;
                index   index.html;
                limit_req zone=know_req burst=3 nodelay;
        }
}        
解释:
  limit_req_zone $binary_remote_addr zone=know_req:10m rate=1r/s;   //定义一个req请求限制,把ip保存在变量中,zone名称是know_req大小10m,频率为1r/s表示1秒只能请求1个,多了就会报错,实际工作中肯定不会是1,可以根据自身应用的情况来进行调优,800-900适中
  limit_req zone=know_req burst=3 nodelay;   //调用know_req,设置最大吞吐量为3,也就是最小是1,最多请求在给3个,当超过了3个就会报错
[root@localhost ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost ~]# systemctl reload nginx
使用压力测试来验证即可
[root@localhost ~]# ab -n 20 -c 10 http://know.com/index.html

image.png

5.Nginx日志

Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志,也就是说每个站点都可以有自己独立的访问日志,日志格式可以通过log_format命令定义格式

5.1.log_format配置

log_format指令


配置语法对error.log、access.log都生效

语法格式:log_format name [escape=default|json string…;

默认配置:log_format combined “…”;

配置区域:http(对所有站点生效)

默认的Nginx定义日志语法

默认配置
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
192.168.81.1 - - [07/Apr/2020:18:26:12 +0800] "GET /linux-data/linux-txt.html HTTP/1.1" 200 2875 "http://know.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36" "-"
如果做了代理或者负载可以用如下配置
log_format main '$remote_addr $remote_user [$time_local] “$request” '
        '$status $body_bytes_sent “$http_referer” '
        '$http_user_agent $http_x_forwarded_for $request_time       $upstream_response_time $upstream_addr $upstream_status';
log_format用来定义,main是定义的日志名称
可以定义多个log_format,用不同的名字区分最后调用即可

Nginx日志格式允许保安的变量

image.png

注意:如果nginx位于负载均衡器,nginx反向代理后,web服务器无法直接获取客户端的真实ip地址


$remote_addr获取的是反向代理的ip地址,反向代理服务器在转发请求的http头信息中


增加x-forwarded-for信息,用来记录客户端ip地址和客户端请求的服务器地址,即使客户端设置了代理服务器,同样能看到客户端的源地址,代理服务器和web服务器都需要配置for_forwarded_for

image.png

5.2.access_log配置

access_log指令

语法格式:access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition] ];

access_log off;

默认配置:access_log logs/access.log combined;

配置区域:配置区域:http(对所有站点生效)、server(对单个站点生效)、location(对单个页面生效,最常用)、limit_except(特殊位置)

5.3.日志配置实例

需求:对所有站点设置单独的访问日志和错误日志,并定义不同的日志格式


5.3.1.定义不同的日志格式


image.png

修改主配置文件nginx.conf,把其中的access_log、error_log注释掉,并增加多个log_format
即使注释掉,新的站点如果不定义access_log/error_log依然会存放到默认的路径下
[root@localhost conf.d]# vim ../nginx.conf 
#error_log  /var/log/nginx/error.log warn;
http {
.....
    log_format  know_log  '$remote_addr - $remote_user [$time_local] $http_host   "$request" $request_time '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    log_format  shangmei_log  '$remote_addr - $http_host $remote_user [$time_local]  "$request" $request_time '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  /var/log/nginx/access.log  main;
....
}

5.3.2.编辑know.com配置文件

修改站点know.com的配置文件,增加access_log、error_log
[root@localhost conf.d]# vim know.conf
server {
        listen 80;
        server_name know.com;
        access_log  /nginx_log/know_access.log know_log;   调用刚刚在主配置文件中增加的know_log
        error_log /nginx_log/know_error.log warn;
        ...
}

5.3.3.编辑shangmei.com配置文件

修改站点shangmei.com的配置文件
[root@localhost conf.d]# vim shangmei.conf
server {
        listen 80;
        server_name shangmei.com;
        access_log /nginx_log/shangmei_access.log shangmei_log;
        error_log /nginx_log/shangmei_error.log warn;
        ...
}

5.3.4.新建nginx日志目录并重载

[root@localhost conf.d]# mkdir /nginx_log
[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.d]# systemctl reload nginx
[root@localhost conf.d]# ls /nginx_log/
know_access.log  know_error.log  shangmei_access.log  shangmei_error.log

5.3.5.验证

验证,发现对应的日志文件都有输出内容,并且access日志中格式也有所不同,know.com中url在第四列,shangmei.com中的url在第二列
know.com站点
[root@localhost conf.d]# tail -f /nginx_log/know_access.log 
192.168.81.1 - - [07/Apr/2020:20:39:30 +0800] know.com   "GET /cisco+H3C%20data/%E7%BD%91%E7%BB%9C%E6%8A%80%E6%9C%AF%E4%B8%8E%E5%BA%94%E7%94%A8.html HTTP/1.1" 0.000 304 0 "http://know.com/cisco+H3C%20data/cisco-text.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36" "-"
[root@localhost conf.d]# tail -f /nginx_log/know_error.log 
2020/04/07 20:42:30 [error] 34599#34599: *667924 open() "/web/know/cisco+H3C data/Linux笔记大全.html" failed (2: No such file or directory), client: 192.168.81.1, server: know.com, request: "GET /cisco+H3C%20data/Linux%E7%AC%94%E8%AE%B0%E5%A4%A7%E5%85%A8.html HTTP/1.1", host: "know.com", referrer: "http://know.com/cisco+H3C%20data/%E7%BD%91%E7%BB%9C%E6%8A%80%E6%9C%AF%E4%B8%8E%E5%BA%94%E7%94%A8.html"
shangmei.com站点
[root@localhost conf.d]# tail -f /nginx_log/shangmei_access.log
192.168.81.1 - shangmei.com admin [07/Apr/2020:21:06:47 +0800]  "GET /download/ HTTP/1.1" 0.000 200 164 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36" "-"
[root@localhost conf.d]# tail -f /nginx_log/shangmei_error.log 
2020/04/07 20:40:16 [error] 34599#34599: *667922 open() "/web/chapter/channel.js" failed (2: No such file or directory), client: 192.168.81.1, server: shangmei.com, request: "GET /channel.js HTTP/1.1", host: "shangmei.com", referrer: "http://shangmei.com/"

image.png

5.4.【扩展】编译安装实现不同日志存放

5.4.1.server与主配置文件分离

  • 编译安装的nginx如果想把serve分出来可以这样配置
[root@localhost ~]# mkdir /application/nginx/conf/conf.d
[root@localhost ~]# cd /application/nginx/conf
[root@localhost conf]# vim nginx.conf
http {
  ...
  include       /application/nginx/conf/conf.d/*.conf;
  ...
}
[root@localhost conf]# touch conf.d/{know.conf,shangmei.conf,liurenxing.conf}

5.4.2.构造server站点和日志

编译安装的可能在主配置文件定义的log_format不会生效,这个不知道为啥可能跟源码包有关
解决办法是在conf.d某个文件中定义好即可,这里在know.conf中定义
know.com
[root@localhost conf]# vim conf.d/know.conf
log_format  acclog  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
server {
        listen 80;
        server_name know.com;
        access_log  /nginx_log/know_access.log acclog;
        error_log /nginx_log/know_error.log warn;
        location / {
                root    /web/know;
                index   index.html;
        }
}
shangmei.com
[root@localhost conf]# vim conf.d/shangmei.conf
server {
        listen 80;
        server_name shangmei.com;
        access_log /nginx_log/shangmei_access.log acclog;
        error_log /nginx_log/shangmei_error.log warn;
        location / {
                root /web/shangmei;
                index index.html;
        }
}
[root@localhost conf]# vim conf.d/liurenxing.conf
server {
        listen 80;
        server_name lrx.com;
        access_log /nginx_log/lrx_access.log acclog;
        error_log /nginx_log/lrx_error.log warn;
        location / {
                root /web/liurenxing;
                index index.htm;
        }
}

6.Nginx虚拟主机

环境:在一台服务器上实现多个站点

实现虚拟主机的方式

基于ip 不同IP实现

基于端口 相同IP不同端口

基于域名 相同ip相同端口不同域名

需求:公司有三个站点需要发布分别采用是那种不同虚拟主机来实现,并且每个站点使用不同的日志存放,know.com、shangmei.com用各自定义的log_format,lrx.com用默认的main。

6.1.基于IP配置

基于IP的基本不会用

首先增加新的ip地址
[root@localhost conf.d]# ifconfig ens33:1 192.168.81.100
[root@localhost conf.d]# ifconfig ens33:2 192.168.81.100
上传网页文件
[root@localhost ~]# mkdir /web && cd /web
[root@localhost web]# rz -E
[root@localhost web]# ls
know  liurenxing  shangmei
编辑know.com的配置文件,增加如下配置
[root@localhost conf.d]# vim know.conf
server {
        listen 192.168.81.210:80;       //设置不同IP
        server_name know.com;
        access_log  /nginx_log/know_access.log know_log;  //设置不同的日志存放路径
        error_log /nginx_log/know_error.log warn;
        location / {
                root    /web/know;
                index   index.html;
        }
编辑shangmei.com的配置文件,增加如下配置
[root@localhost conf.d]# vim shangmei.conf
server {
        listen 192.168.81.100:80;       //设置不同IP
        server_name shangmei.com;
        access_log /nginx_log/shangmei_access.log shangmei_log; //设置不同的日志存放路径
        error_log /nginx_log/shangmei_error.log warn;
        location / {
                root /web/shangmei;
                index index.html;
        }
编辑lrx.com的配置文件,增加如下配置
[root@localhost conf.d]# vim liurenxing.conf
server {
        listen 192.168.81.110:80;       //设置不同IP
        server_name lrx.com;
        location / {
        root /web/liurenxing;
        index index.htm;
        access_log /nginx_log/lrx_access.log main;    //设置不同的日志存放路径
        error_log /nginx_log/lrx_error.log warn;
        }
}
重载nginx
[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.d]# systemctl reload nginx
第一次访问可能会有缓存,多刷新几次就会出来,如果reload没有生效那么就是用restat重启一下

image.png

6.2.基于端口配置

  • 与IP配置不同之处在于listen那里少了ip地址,80改成了其他
上传网页文件
[root@localhost ~]# mkdir /web && cd /web
[root@localhost web]# rz -E
[root@localhost web]# ls
know  liurenxing  shangmei
编辑know.com的配置文件,增加如下配置
[root@localhost conf.d]# vim know.conf
server {
        listen 80;          //注意修改
        server_name know.com;
        access_log  /nginx_log/know_access.log know_log;    //设置不同的日志存放路径
        error_log /nginx_log/know_error.log warn;
        location / {
                root    /web/know;
                index   index.html;
        }
编辑shangmei.com的配置文件,增加如下配置
[root@localhost conf.d]# vim shangmei.conf
server {
        listen 81;          //注意修改
        server_name shangmei.com;
        access_log /nginx_log/shangmei_access.log shangmei_log; //设置不同的日志存放路径
        error_log /nginx_log/shangmei_error.log warn;
        location / {
                root /web/shangmei;
                index index.html;
        }
编辑lrx.com的配置文件,增加如下配置
[root@localhost conf.d]# vim liurenxing.conf
server {    
        listen 82;      //注意修改
        server_name lrx.com;
        location / {
        root /web/liurenxing;
        index index.htm;
        access_log /nginx_log/lrx_access.log main;    //设置不同的日志存放路径
        error_log /nginx_log/lrx_error.log warn;
        }
}
重载nginx
[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.d]# systemctl reload nginx
第一次访问可能会有缓存,多刷新几次就会出来,如果reload没有生效那么就是用restat重启一下

image.png

6.3.基于域名配置

上传网页文件
[root@localhost ~]# mkdir /web && cd /web
[root@localhost web]# rz -E
[root@localhost web]# ls
know  liurenxing  shangmei
编辑know.com的配置文件,增加如下配置
[root@localhost conf.d]# vim know.conf
server {
        listen 80;        
        server_name know.com;       //注意修改
        access_log  /nginx_log/know_access.log know_log;    //设置不同的日志存放路径
        error_log /nginx_log/know_error.log warn;
        location / {
                root    /web/know;
                index   index.html;
        }
编辑shangmei.com的配置文件,增加如下配置
[root@localhost conf.d]# vim shangmei.conf
server {
        listen 80;            
        server_name shangmei.com;     //注意修改
        access_log /nginx_log/shangmei_access.log shangmei_log; //设置不同的日志存放路径
        error_log /nginx_log/shangmei_error.log warn;
        location / {
                root /web/shangmei;
                index index.html;
        }
编辑lrx.com的配置文件,增加如下配置
[root@localhost conf.d]# vim liurenxing.conf
server {    
        listen 80;      
        server_name lrx.com;    //注意修改
    access_log /nginx_log/lrx_access.log main;    //设置不同的日志存放路径
        error_log /nginx_log/lrx_error.log warn;
        location / {
          root /web/liurenxing;
          index index.htm;
        }
}
重载nginx
[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.d]# systemctl reload nginx
第一次访问可能会有缓存,多刷新几次就会出来,如果reload没有生效那么就是用restat重启一下

image.png

7.Nginx Location

  • 使用Nginx Location可以控制访问网站的路径
  • 语法格式
  • location [=||*|^~] uri { … }

7.1.Location语法优先级排序image.png

7.2.配置location优先级

[root@localhost conf.d]# vim testserver.conf
server {
        listen 80;
        server_name jiangxl.com;
        location / {
                default_type text/html;     网站类型,必须是文本文档或者html
                return 200 "location / jiang";  如果访问代码是200则显示location / jiang
        }
        #location =/ {
        #       default_type text/html;
        #       return 200 "location =/ xiao";
        #}
        location ~ / {
                default_type text/html;
                return 200 "location ~/ long";
        }
}

7.3.location应用场景

通用匹配,任何请求都会匹配到
location / {
}
严格区分大小写,匹配以php结尾的都在这个location
location ~ \.php$ {
  fastcgi_pass http://127.0.0.1:9000;
}
严格区分大小写,匹配jsp结尾的都在这个location
location ~ \.jsp$ {
  proxy_pass http://127.0.0.1:8080;
}
不区分大小写匹配,只要访问.jpg,gif,png,js,css都都这条location
location ~* .*\.(jpg|gif|png|js|css) {
  rewrite (.*) http://cdn.oldboyedu.com$request_url;
}
不区分大小写匹配
location ~* .*\.(sql|bak|tgz|tar.gz|git)$ {
  default_type text/html;
  return 403 "启用访问控制成功"
}
区分大小写拒绝访问网页中的avi文件
 location ~ .*\.avi$ {
      deny all;
      #return 403 "拒绝成功";
 }
不区分大小写拒绝访问网页中关于音视频的文件
location ~* .*\.(avi|mp3|mp4|pbb)$ {    //前面匹配任意一个字符到多个字符结尾包含.avi或者.mp3或者.mp4或者.pbb的文件
       deny all;
       #return 403 "拒绝成功"
}
不区分大小写拒绝网页中的任意图片格式
location ~* .*\.(jpg|gif|png|jpeg)$ {
        deny all;
}
拒绝访问sql、bak、tgz、tar.gz、.git文件
location ~* .*\.(sql|bak|tgz|tar.gz|git)$ {
        return 403 "启用访问控制成功";
}
  • 效果
  • 拒绝视频文件下载

image.png

  • 拒绝图片显示
  • image.png
  • 拒绝访问sql、bak、tgz、tar.gz、.git文件image.png

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
24天前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
1月前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
253 0
|
4天前
|
存储 负载均衡 中间件
Nginx反向代理配置详解,图文全面总结,建议收藏
Nginx 是大型架构必备中间件,也是大厂喜欢考察的内容,必知必会。本篇全面详解 Nginx 反向代理及配置,建议收藏。
Nginx反向代理配置详解,图文全面总结,建议收藏
|
16天前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
nginx配置反向代理404问题
|
11天前
|
应用服务中间件 网络安全 PHP
八个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
Nginx 是一个高效的 HTTP 服务器和反向代理,擅长处理静态资源、负载均衡和网关代理等任务。其配置主要通过 `nginx.conf` 文件完成,但复杂设置可能导致错误。本文介绍了几个开源的 Nginx 可视化配置系统,如 Nginx UI、VeryNginx、OpenPanel、Ajenti、Schenkd nginx-ui、EasyEngine、CapRover 和 NGINX Agent,帮助简化和安全地管理 Nginx 实例。
|
21天前
|
缓存 负载均衡 应用服务中间件
Nginx配置
【10月更文挑战第22天】在实际配置 Nginx 时,需要根据具体的需求和环境进行调整和优化。同时,还需要注意配置文件的语法正确性和安全性。
37 7
|
30天前
|
前端开发 JavaScript 应用服务中间件
终极 Nginx 配置指南
本文介绍了Nginx的基本配置及其优化方法。首先,通过删除注释简化了Nginx的默认配置文件,使其更易于理解。接着,文章将Nginx配置文件分为全局块、events块和http块三部分进行详细解释。此外,还提供了如何快速上线网站、解决前端history模式404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离的具体配置示例。最后,附上了Nginx的基础命令,包括安装、启动、重启和关闭等操作。
|
1月前
|
缓存 前端开发 JavaScript
一、nginx配置
一、nginx配置
152 1
|
1月前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
138 0
|
1月前
|
缓存 监控 负载均衡
nginx相关配置及高并发优化
Nginx的高并发优化是一个综合性的过程,需要根据具体的业务场景和硬件资源量身定制。以上配置只是基础,实际应用中还需根据服务器监控数据进行持续调整和优化。例如,利用工具如ab(Apache Benchmarks)进行压力测试,监控CPU、内存、网络和磁盘I/O等资源使用情况,确保配置的有效性和服务的稳定性。
110 0