6.禁止访问某个文件或目录
1)禁止访问以txt或doc结尾的文件
location ~* \.(txt|doc)${
root /data/www/wwwroot/linuxtone/test;
deny all;
}

2)nginx禁止访问所有.开头的隐藏文件设置
location ~* /.* {
deny all;
}

3)nginx禁止访问目录
location ^~ /path {
deny all;
}

4)禁止访问扩展名为bat的文件
location ~* /.bat {
deny all;
}

5)禁止访问configs目录,以及其下所有子目录或文件
location ^~ /configs/ {
deny all;
}
注意上述configs后面的斜杠不能少,否则所有以configs开头的目录或文件都将禁止访问。

6)禁止访问多个目录
location ~ ^/(cron|templates)/ {
deny all;
break;
}

7)禁止访问以/data开头的文件
location ~ ^/data {
deny all;
}

8)禁止访问以.sh,.flv,.mp3为文件后缀名的文件
location ~ .*\.(sh|flv|mp3)$ {
return 403;
}

9)或者以=符号形式
location = /config/ {
return 404;
}
location =/config.ini{
return 404;
}

10)禁止htaccess
location ~/\.ht {
deny all;
}

return指令
语法:returncode ;
使用环境:server,location,if;
该指令用于结束规则的执行并返回状态码给客户端。

例如:访问的URL以".sh"或".bash"结尾,则返回403状态码
location ~ .*\.(sh|bash)?$ {
return 403;
}

7.禁止IP访问 只允许域名访问
当别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500.
目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。
所以,禁止ip访问,只能使用域名访问的正确配置是:
server {
     listen 80 default;
     server_name _;
     return 500;
}

server {
    listen 80;
    server_name web01.wangshibo.cn;
    root /var/www/html;
    index index.html index.php index.htm;
    access_log /usr/local/nginx/logs/image.log;
}

注意:
如果在上面的server_name配置中指定域名的同时,也指明了ip访问,比如server_name 103.110.186.17 web01.wangshibo.cn
那么尽管上面已经做了返回500设置,也禁止不了ip访问!也就是说,只要server_name一行指明了ip访问,那么就禁止不了了

以上设置,可以将ip访问禁用,这样的话,使用ip访问的流量就会丢失。
    rewrite ^(.*) http://www.wangshibo.com permanent;
}

server {
    listen 80;
    server_name web01.wangshibo.cn;
    root /var/www/html;
    index index.html index.php index.htm;
    access_log /usr/local/nginx/logs/image.log;
}

下面列出其他的一些细节导致的不同效果:
1)将ip和域名访问统统禁止,返回403(或者配置return 500)错误页
server {
listen 80 default;
server_name _;
return 403;

root /var/www/html;
index index.html index.php index.htm;
access_log /usr/local/nginx/logs/image.log;
}

2)下面的配置:
指明了只能使用域名,即http://web01.wangshibo.cn访问配置中的站点(/var/www/html)
不能使用ip,即http://103.110.186.17访问配置中的站点。但是可以使用ip方式访问nginx默认的根目录下的内容(比如/usr/local/nginx/html)
server {
listen 80 ;
server_name web01.wangshibo.cn;

root /var/www/html;
index index.html index.php index.htm;
access_log /usr/local/nginx/logs/image.log;
}

下面的配置,指明了使用域名或ip都可以访问配置中的站点。(使用ip访问只限于只有一个vhost虚拟主机配置的情况,如果是多个,那么指明ip访问就会混淆)
server {
listen 80 ;
server_name 103.110.186.17 web01.wangshibo.cn;

root /var/www/html;
index index.html index.php index.htm;
access_log /usr/local/nginx/logs/image.log;
}

3)下面两个的配置后,都能使用域名或ip访问配置中的站点。
server {
listen 80 default;
server_name web01.wangshibo.cn;

root /var/www/html;
index index.html index.php index.htm;
access_log /usr/local/nginx/logs/image.log;
}

server {
listen 80 default;
server_name 103.110.186.17 web01.wangshibo.cn;

root /var/www/html;
index index.html index.php index.htm;
access_log /usr/local/nginx/logs/image.log;
}

*******************************************************************************************************************************

********************************************************************************************************************************

nginx配置只能通过域名禁止ip访问

为什么要禁止ip访问页面呢,这样做是为了避免其他人把未备案的域名解析到自己的服务器IP,而导致服务器被断网,
可以通过禁止使用ip访问的方法,防止此类事情的发生。
 
Nginx的默认虚拟主机在用户通过IP访问,或者通过未设置的域名访问(比如有人把他自己的域名指向了你的ip)的时候
生效最关键的一点是,在server的设置里面添加这一行:
listen 80 default;
 
后面的default参数表示这个是默认虚拟主机。这个设置非常有用。
 
比如别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500。
网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。就可以这样设置:
server {
listen 80 default;
return 500;
}
 
也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置就可以:
server {
listen 80 default;
rewrite ^(.*) http://www.xxx.com permanent;
}
 
-----------------特别注意-------------------
按照如上设置后,确实不能通过IP访问服务器了,但是在应该用中出现当server_name后跟多个域名时,
其中一个域名怎么都无法访问:
 
设置如下:
没更改之前,通过server_name 中的www.xxx.com kevin.com均可访问服务器,加入禁止IP访问的设置后,通过kevin.com无法访问服务器了,www.xxx.com可以访问
用 nginx -t 检测配置文件会提示warning:
 
最后通过在listen 80 default;后再加server_name _;解决,形式如下:
#禁止IP访问(如果vhosts下面有很多域名的conf配置,那么只需要创建创建一个文件,比如deny.ip.conf,输入下面五行内容,这样就全局禁止了ip访问,只能使用域名访问了!)
server{
listen 80 default;
server_name _;
return 500;
}
 
或者
server {
listen 80 dufault;
server_name _;
rewrite ^(.*) http://www.xxx.com permanent;
}
 
这样,通过xxx.com就能访问服务器了,问题解决了。
=====================================================================
也可以使用如下设置:即在server段里插入如下内容即可
 
if ($host != 'www.kevin.com' ) {
return 403;
}
 
8.流量限制

对于提供下载的网站,肯定是要进行流量控制的,例如BBS、视频服务,还是其它专门提供下载的网站。在nginx中我们完全可以做到限流,由Nginx模块中的Core模块提供了limit_rate、limit_rate_after命令,我们只需要调用命令实现流量限制就行。
实现流量限制由两个指令limit_rate和limit_rate_after共同完成:
limit_rate
语法: limit_rate rate;
默认值: limit_rate 0;
作用域: http, server, location, location中的if字段
命令概述:限制向客户端传送响应的速率限制。参数 rate 的单位是字节/秒,设置为 0 将关闭限速。 nginx 按连接限速,需要明白的一点是该限制只是针对一个连接的设定,所以如果某个客户端同时开启了两个连接,那么客户端的整体速率是这条指令设置值的2倍。

limit_rate_after
语法: limit_rate_after size;
默认值: limit_rate_after 0;
作用域:http, server, location,location中的if字段
设置不限速传输的响应大小。当传输量大于此值时,超出部分将限速传送。

示例说明:
server {
       listen 80;
       server_name ops.wangshibo.com;
       location /ops/{
            root /home/www/html;
            limit_rate_after 5m;
            limit_rate 20k;
      }
}

测试:
[root@test-huanqiu ~]# wget http://ops.wangshibo.com/ops/seven.mp4

9.并发连接数限制
这个配置是基于ngx_http_limit_zone_module模块的,要简单完成并发限制,我们要涉及到limit_conn_zone和limit_conn 这两个指令:
limit_conn_zone
语法:limit_conn_zone zone_name $variable the_size
默认值:no
作用域:http
本指令定义了一个数据区,里面记录会话状态信息。 variable 定义判断会话的变量;the_size 定义记录区的总容量。

limit_conn
语法:limit_conn zone_name the_size
默认值:no
作用域:http, server, location
指定一个会话最大的并发连接数。 当超过指定的最发并发连接数时,服务器将返回 "Service unavailable" (503)。

示例说明:
http {
       limit_conn_zone $binary_remote_addr zone=one:10m;
       .......
       .......
       server {
             listen 80;
             server_name ops.wangshibo.com;
             location /ops/ {
             limit_conn one 1;
             }
示例解释:
1)定义一个叫“one”的记录区,总容量为 10M,以变量$binary_remote_addr作为会话的判断基准(即一个地址一个会话)。
限制/ops/目录下,一个会话只能进行一个连接;简单来说,就是限制/ops/目录下,一个IP只能发起一个连接,多过一个,一律报错503。
2)这里使用的是$binary_remote_addr而不是
$remote_addr。$remote_addr的长度为7至15 bytes,会话信息的长度为32或64bytes;而
$binary_remote_addr的长度为4bytes,会话信息的长度为32bytes;$binary_remote_addr是限制同一客户端ip地址;当
zone 的大小为 1M 的时候,大约可以记录 32000 个会话信息(一个会话占用 32 bytes)。

下面分享一个限制流量和并发送的配置:
现象描述:
中间一段时间,网站访问有点慢,初步怀疑是机房交换机问题(之前出现过网站访问很慢,热插拔网卡/重启网卡就好了)
最后查看,发现机房流量很大!主要是论坛流量大,主站流量很小,应该是论坛人数访问一多,就把带宽占满了。

解决办法:
在论坛服务器上修改:
1)首先限制并发数
[root@server_web ~]# vim /etc/sysconfig/iptables
.....
-A INPUT -p tcp --dport 80 -m limit --limit 6/s -j ACCEPT
[root@server_web ~]# /etc/init.d/iptables restart

上面将每个用户限制在每秒6个请求,但效果不明显。

2)设置nginx的流量请求
[root@server_web ~]# vim /usr/local/nginx/conf/nginx.conf
http{
     limit_conn_zone $binary_remote_addr zone=perip:10m;
    # limit_req_zone $binary_remote_addr zone=one2:10m rate=5r/s;
    # limit_req zone=one2 burst=5;
    ..........
    ..........
}

[root@server_web ~]# vim /usr/local/nginx/conf/vhost/forum.conf
      server {
            listen 80;
            server_name forum.wangshibo.com;
            root /var/www/html;
                limit_conn perip 10;                           //这里调用上面的perip,需要写在server里面;即每个ip最多有10个并发连接
                limit_rate 10k;                                  //限制每个连接的带宽,可以单独写这条,与连接数无关;
           }
}

[root@server_web ~]# /usr/local/nginx/sbin/nginx -s reload

nginx的详解(三)的更多相关文章

  1. nginx location详解(三)

    location官方文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#location Syntax: location [ = | ...

  2. nginx之旅(第一篇):nginx下载安装、nginx启动与关闭、nginx配置文件详解、nginx默认网站

    一.nginx下载安装 版本nginx 1.15.5 系统环境centos7.5(本机ip192.168.199.228) 关闭selinux 和防火墙firewall 1.下载 wget http: ...

  3. Nginx配置详解 http://www.cnblogs.com/knowledgesea/p/5175711.html

    Nginx配置详解 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作 ...

  4. .NET DLL 保护措施详解(三)最终效果

    针对.NET DLL 保护措施详解所述思路完成最终的实现,以下为程序包下载地址 下载 注意: 运行环境为.net4.0,需要安装VS2015 C++可发行组件包vc_redist.x86.exe.然后 ...

  5. Nginx高性能服务器安装、配置、运维 (3) —— Nginx配置详解

    四.Nginx 配置详解 YUM方式安装的Nginx默认配置文件放在/etc/nginx目录下,使用Vim编辑/etc/nginx/nginx.conf: ---------------------- ...

  6. Android 之窗口小部件详解(三)  部分转载

    原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...

  7. Nginx Rewrite详解

    Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...

  8. WebSocket安卓客户端实现详解(三)–服务端主动通知

    WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...

  9. logback -- 配置详解 -- 三 -- <encoder>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

  10. nginx配置详解(转)

    Nginx 配置文件详解 user nginx ; #用户 worker_processes 8; #工作进程,根据硬件调整,大于等于cpu核数 error_log logs/nginx_error. ...

随机推荐

  1. DVWA之文件包含(File inclusion)

    daFile inclusion的意思就是文件包含,当服务器开启了allow_url_include选项时,就可以通过PHP的某些特征函数 include,require和include_once,r ...

  2. Vivado增量式编译

    Vivado 中的增量设计会重新利用已有的布局布线数据来缩短运行时间,并生成可预测的结果.当设计有 95% 以上的相似度时,增量布局布线的运行时间会比一般布局布线平均缩短2倍.若相似度低于80%,则使 ...

  3. restful十项规范

    1.协议 API与用户的通信都是通过HTTPS协议进行的 2.域名 应尽量将API部署在专有域名下:https://api.example.com 如果确定API很简单,不会有什么扩展,则可以放在主域 ...

  4. 系统妈Ghost Win10 64位快速安装版 V2016年2月

    系统妈Ghost win10 64位快速安装版 V2016年2月,更新了最新系统补丁,升级系统版本号为2016年2月份.这款累积更新补丁会取代之前的版本.本系统还附带最常用的装机必备软件.QQ等. 系 ...

  5. Sublime 设置移动光标快捷键

    发现问题 在使用Sublime和其他编辑器一个很不爽的问题是:在输入一个函数或者有左右的符号或者在引号内时,总是要跳出来,无奈方向键又在主键盘的另一边,只能不断的切换,太特么操蛋,就不能让手指不离开主 ...

  6. 后台返回数据为treeList结构,如何添加属性(递归添加属性)

    给tree形json数据添加默写属性(递归)addAttr(data){ for (var j = 0; j < data.length; j++) { data[j].title = data ...

  7. 三:MySql数据库及连接

    前言: 开发中团队使用一个MYSQL数据库,我们只需要知道怎么去连接这个已经存在的数据库即可,因此关于MYSQL数据库安装部分可以去Baidu,并不是主要关心的部分 学会在windows7下使用DOS ...

  8. Git学习——撤销修改

    git checkout -- <file> 当你修改完一个工作区的文件后,使用git status查看当前的状态.其中有说明,接下来你可以git add <file> 去添加 ...

  9. [图文] Fedora 28 使用 Virt-Manager 制作并优化QCOW2镜像——Windows 10 1709

    实验说明: 云计算的发展使得桌面上云,windows 10就必不可少,这一章就如何制作QCOW2镜像文件并优化进行说明. 实验环境: 宿主机系统   :Fedora 28 WorkStation 虚拟 ...

  10. 蓝牙学习 (6) - Play with TI sensorTag (1)

    硬件 cc2650 SensorTag Connect with App 在手机上安装Ti提供的sensorTag App即可和sensorTag 建立连接. 如下手机截图,