nginx的详解(三)
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;}对于提供下载的网站,肯定是要进行流量控制的,例如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的详解(三)的更多相关文章
- nginx location详解(三)
location官方文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#location Syntax: location [ = | ...
- nginx之旅(第一篇):nginx下载安装、nginx启动与关闭、nginx配置文件详解、nginx默认网站
一.nginx下载安装 版本nginx 1.15.5 系统环境centos7.5(本机ip192.168.199.228) 关闭selinux 和防火墙firewall 1.下载 wget http: ...
- Nginx配置详解 http://www.cnblogs.com/knowledgesea/p/5175711.html
Nginx配置详解 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作 ...
- .NET DLL 保护措施详解(三)最终效果
针对.NET DLL 保护措施详解所述思路完成最终的实现,以下为程序包下载地址 下载 注意: 运行环境为.net4.0,需要安装VS2015 C++可发行组件包vc_redist.x86.exe.然后 ...
- Nginx高性能服务器安装、配置、运维 (3) —— Nginx配置详解
四.Nginx 配置详解 YUM方式安装的Nginx默认配置文件放在/etc/nginx目录下,使用Vim编辑/etc/nginx/nginx.conf: ---------------------- ...
- Android 之窗口小部件详解(三) 部分转载
原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...
- Nginx Rewrite详解
Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...
- WebSocket安卓客户端实现详解(三)–服务端主动通知
WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...
- logback -- 配置详解 -- 三 -- <encoder>
附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...
- nginx配置详解(转)
Nginx 配置文件详解 user nginx ; #用户 worker_processes 8; #工作进程,根据硬件调整,大于等于cpu核数 error_log logs/nginx_error. ...
随机推荐
- 7.html超链接的使用
<html> <head> <title>第七课网页标签</title> <meta charset="utf-8"> ...
- [原创] SOAP UI 创建SOAP工程进行接口测试
下载及安装 1. 登录http://www.soapui.org/ 2. 鼠标移动到导航头的Downloads选项 3. 点击SOAP UI 4. 下载页面 新建项目 创建项目 1. 创建项目很简单. ...
- mysql> set sql_mode='no_auto_value_on_zero';
mysql> set sql_mode='no_auto_value_on_zero';
- IOS与android
Android和iOS那个好?应该先往哪个上面投入资源?多次被人问到此类问题,笔者刚好自己的项目也需要考虑iOS版本.就索性进行了一番调研,于是有了本文(本次不讨论越狱的iOS) 首先从情感上,你喜欢 ...
- selenium-Python之定位下拉框选择
1.通过select 进行定位下拉框 下拉框如图所示 通过代码定位 #通过index进行选择Select(driver.find_element_by_id("cardType") ...
- 成魔笔记1——先入IT,再成魔
关于我为什么要写这个博客的原因,做一个简单的解释.因为报考的一时兴起,我选择了软件专业.可是三年下来,感觉自己没做多少事,也没收获到多少东西.很多时候都是老师讲什么,都是完全陌生的东西,跟不上教学的思 ...
- SAP Cloud for Customer使用移动设备访问系统的硬件要求
如果用平板电脑的话,推荐的设备列表: Android Samsung Galaxy Tab S2○ Processor: 2 x quad-core CPU -- 1.9 and 1.3 gigahe ...
- java 核心技术卷一笔记 6 .1接口 lambda 表达式 内部类
6.1 接口不是类,是对类的一组需求的描述,这些类需要遵守接口描述的统一格式进行定义.例如:Arrays类中sort方法(可以对对象数组进行排序)前提是对象所属的类必须实现了Comparable 接口 ...
- socket的BeginConnect(EndPoint remoteEP,AsyncCallback callback,objcet state);个人理解
1.socket.BeginConnect(); 其中的三个参数值EndPoint remoteEP,这个是用来指定连接的socket服务器的的地址 socket参数表 EndPoint remote ...
- ios之UITabelViewCell的自定义(xib实现)
通过继承UITableViewCell来自定义cell 1.创建一个空的项目.命名: 2.创建一个UITableViewController 并且同时创建xib: 3.设置AppDelegate.m中 ...