分类 web 下的文章
Math对象中所有的属性和方法
Math对象中所有的属性和方法都是静态的,没有构造函数,所以不能用Math()来定义一个Math对象,可以直接使用Math对象提供的属性和方法
Math对象的属性
属性名 | 说明 |
---|---|
constructor | 对创建此对象的函数的引用 |
E | 自然对数的底数,常数e,其值近似为2.718 |
LN10 | 10的自然对数,其值近似为2.302 |
LN2 | 2的自然对数,其值近似为0.693 |
LOG10E | 以10为底的e的对数,其值近似为0.434 |
LOG2E | 以2为底的对数,其值近似为1.442 |
PI | 常量π,其值近似为3.141159 |
prototype | 向对象添加自定义的属性和方法 |
SQRT1_2 | 1c除以2的平方根,其值近似为0.707 |
SQRT2 | 2的平方根,其值其值近似为1.414 |
Math对象的方法
方法名 | 说明 |
---|---|
abs() | 返回x的绝对值 |
acos(x) | 返回x的反余弦值,参数x的有效值范围为-1.0~1.0。如果超过该范围则返回NaN |
asin(x) | 返回x的反正弦值,参数x的有效值范围为-1.0~1.0。如果超过该范围则返回NaN,否则返回-π/2~π/2之间的弧度值 |
atan(x) | 返回x反正切值。返回值为-π/2~π/2之间的弧度值 |
atan2(y,x) | 返回从一个点(x,y)与X轴之间的角度,参数x和y分别为X坐标和Y坐标,返回值为-π~π之间的值 |
ceil(x) | 向上舍入,即返回大于或等于x并且与x最接近的整数 |
cos(x) | 返回x的余弦值。返回值为-1.0~1.0之间的值 |
exp(x) | 返回ex,其中e为自然对数的底数 |
floor(x) | 向上舍入,即返回小于或等于x并且与x最接近的整数 |
log(x) | 返回x的自然对数。参数x为大于0的书,如果x为负数,则返回NAN |
max(value1,value2...) | 返回参数中最大的值,如果没有参数,返回-Infinity。如果有一个参数为NaN,或有一个不能转换成数字的参数,返回NAN |
min(value1,value2...) | 返回参数中最小的值,如果没有参数,返回-Infinity。如果有一个参数为NaN,或有一个不能转换成数字的参数,返回NAN |
pow(x,y) | 返回xy,如果xy的结果虚数或复数,Math.pow()将返回NaN,如果xy的结果过大,可能会返回Infinity |
random() | 返回一个0~1之间的随机数 |
round(x) | 舍入到最近的整数,返回与x最近的整数 |
sin(x) | 返回x的正弦值。返回值为-1.0~10的值 |
sqrt(x) | 返回x的平方根。如果x为负数,返回NaN |
tan(x) | 返回x的正切值 |
数组元素排列
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>数组元素排列</title>
<link rel="stylesheet" href="">
<script>
//定义用于升序排列的函数
function asc(x,y){
if(x>y){
return 1;
}
else if(x<y){
return -1;
}
else{
return 0;
}
}
//定义用于降序排列的函数
function desc(x,y){
if(x>y){
return -1;
}
else if(x<y){
return 1;
}
else{
return 0;
}
}
//定义一个数组
var arr=new Array(5,29,14,656,206,41,3,159);
document.write("原数组中的元素为:"+arr.toString()+"<br>");
//将数组元素升序排列
arr.sort(asc);
document.write("数组元素升序排列后为:"+arr.toString()+"<br>");
////将数组元素降序排列
arr.sort(desc);
document.write("数组元素降序排列后为:"+arr.toString()+"<br>");
</script>
</head>
<body>
</body>
</html>
Array数据集合
Array是一个有序的数据集合
在JavaScript中定义数组的方法有三种
1.使用数组直接量来定义
2.使用数组对象的Array()来构造函数来定义
3.使用其他对象中的方法,如使用String对象中的split()方法来返回一个数组
1.使用数组直接量
数组名=[element1,element2,element3,...]
2.使用构造函数
数组名=new Array();
数组名=new Array(length);
数组名=new Array(element1,element2,element3,...);
数组名=Array();
数组名=Array(length);
数组名=Array(element1,element2,element3,...);
3.使用String对象的split()方法
String对象的split()方法可以将一个字符串分隔成一个数组
StringObj.split(separator.limit)
StringObj是String的对象,separator是字符串或正则表达式
Match的对象实例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Match的对象实例</title>
<link rel="stylesheet" href="">
<script>
var m=parseInt(prompt("请输入随机数的下限","0"));
var n=parseInt(prompt("请输入随机数的上限","0"));
with(document){
//Math的属性和方法
write("Math.E="+Math.E+"<br>");
write("Math.LN2="+Math.LN2+"<br>");
write("Math.LN10="+Math.LN10+"<br>");
write("Math.LOG2E="+Math.LOG2E+"<br>");
write("Math.LOG10E="+Math.LOG10E+"<br>");
write("Math.PI="+Math.PI+"<br>");
write("Math.SQRT1_2="+Math.SQRT1_2+"<br>");
write("Math.SQRT2="+Math.SQRT2+"<hr>");
//使用log方法计算自然数
write("Math.log("+n+"):"+Math.log(n)+"<br>");
write("Math.log("+m+"):"+Math.log(m)+"<br>");
write("Math.log(Math.exp("+m+")):"+Math.log(Math.exp(m))+"<hr>");
//使用sqrt方法计算平方根
write("Math.sqrt("+m+"):"+Math.sqrt(m)+"<br>");
write("Math.sqrt("+n+"):"+Math.sqrt(n)+"<hr>");
//在for循环中使用random方法产生10个随机数
document.write(m+"到"+n+"之间的随机数为:<br>");
for(var i=0;i<10;i++){
var reasult=Math.round(Math.random()*(n-m)+m);
document.write(reasult+",");
}
}
</script>
</head>
<body>
</body>
</html>
String的属性和方法
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>String的属性和方法</title>
<link rel="stylesheet" href="">
<script>
</script>
</head>
<body>
Strin定义字符串有两种方法
1.使用new语句通过调用字符串对象的构造函数定义一个字符串对象
2.使用var语句定义一个字符串变量,而这个字符串变量可以直接使用字符串的方法个属性
String对象的属性和方法
String属性有三个:length,constructor,prototype
<code>
var s=0;
var newString=new String("teacher");
var s=newString.length;
alert(s.toString(16));
</code>
<code>
var newName=new String("Hello");
if(newName.constructor==String);{
alert("It is a String");
}
</code>
<code>
function employee(name,age){
this.name=name;
this.age=age;
}
var info=new employee("kate",35);
employee.prototype.saylary(null);
info.salary=600;
alert(info.salary);
</code>
</body>
</html>
jquery右侧固定数字显示隐藏导航菜单
html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Language" content="zh-CN">
<title>jquery右侧固定数字显示隐藏导航菜单</title>
<script type="text/javascript" src="js/jquery.js"></script>
<link href="css/default.css" rel="stylesheet" type="text/css">
</head>
<body style="height:600px;">
<div id="header">
<div id="top">
<div id="warp">
<div class="topleft fl">
</div>
<div class="topright fr"><a href="/">返回首页</a></div>
</div>
</div>
</div>
<!-- 左侧导航 -->
<div class="leftNav">
<a href="#" style="left: -110px;">站长素材<em>0</em></a>
<a href="#" style="left: -110px;">书签切换<em>1</em></a>
<a href="#" style="left: -110px;">幻灯片<em>2</em></a>
<a href="#" style="left: -110px;">图片滚动-左<em>3</em></a>
<a href="#" style="left: -110px;">图片滚动-上<em>4</em></a>
<a href="#" style="left: -110px;">图片无缝滚动-左<em>5</em></a>
<a href="#" style="left: -110px;">图片无缝滚动-上<em>6</em></a>
<a href="#" style="left: -110px;">文字滚动-左<em>7</em></a>
<a href="#" style="left: -110px;">文字滚动-上<em>8</em></a>
<a href="#" style="left: -110px;">文字无缝滚动-左<em>9</em></a>
<a href="#" style="left: -110px;">文字无缝滚动-上<em>10</em></a>
<a href="#" style="left: -110px;">其它基础效果<em>11</em></a>
</div>
<script type="text/javascript">
var btb=$(".leftNav");
var tempS;
$(".leftNav").hover(function(){
var thisObj = $(this);
tempS = setTimeout(function(){
thisObj.find("a").each(function(i){
var tA=$(this);
setTimeout(function(){ tA.animate({left:"0"},300);},50*i);
});
},200);
},function(){
if(tempS){ clearTimeout(tempS); }
$(this).find("a").each(function(i){
var tA=$(this);
setTimeout(function(){ tA.animate({left:"-110"},300,function(){
});},50*i);
});
});
var isIE6 = !!window.ActiveXObject&&!window.XMLHttpRequest;
if( isIE6 ){ $(window).scroll(function(){ btb.css("top", $(document).scrollTop()+100) }); }
</script>
<!-- 右侧导航 -->
<div class="rightNav">
<a href="#" style="right: -110px;"><em>0</em>站长素材</a>
<a href="#" style="right: -110px;"><em>1</em>书签切换</a>
<a href="#" style="right: -110px;"><em>2</em>幻灯片</a>
<a href="#" style="right: -110px;"><em>3</em>图片滚动-左</a>
<a href="#" style="right: -110px;"><em>4</em>图片滚动-上</a>
<a href="#" style="right: -110px;"><em>5</em>图片无缝滚动-左</a>
<a href="#" style="right: -110px;"><em>6</em>图片无缝滚动-上</a>
<a href="#" style="right: -110px;"><em>7</em>文字滚动-左</a>
<a href="#" style="right: -110px;"><em>8</em>文字滚动-上</a>
<a href="#" style="right: -110px;"><em>9</em>文字无缝滚动-左</a>
<a href="#" style="right: -110px;"><em>10</em>文字无缝滚动-上</a>
<a href="#" style="right: -110px;"><em>11</em>其它基础效果</a>
</div>
<script type="text/javascript">
var btb=$(".rightNav");
var tempS;
$(".rightNav").hover(function(){
var thisObj = $(this);
tempS = setTimeout(function(){
thisObj.find("a").each(function(i){
var tA=$(this);
setTimeout(function(){ tA.animate({right:"0"},300);},50*i);
});
},200);
},function(){
if(tempS){ clearTimeout(tempS); }
$(this).find("a").each(function(i){
var tA=$(this);
setTimeout(function(){ tA.animate({right:"-110"},300,function(){
});},50*i);
});
});
var isIE6 = !!window.ActiveXObject&&!window.XMLHttpRequest;
if( isIE6 ){ $(window).scroll(function(){ btb.css("top", $(document).scrollTop()+100) }); }
</script>
</body>
</html>
CSS
@charset "utf-8";
/* CSS Document */
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,
form,fieldset,input,textarea,p,blockquote,th,td,img { padding: 0; margin: 0; }
fieldset,img { border: 0; }
address,caption,cite,code,dfn,em,strong,th,var,i { font-weight: normal; font-style: normal; }
ol,ul,li { list-style: none; }
caption,th { text-align: left; }
h1,h2,h3,h4,h5,h6 { font-weight: normal; font-size: 100%; }
q:before,q:after { content:''; }
abbr,acronym { border: 0; }
/*-- All --*/
body{ color:#333;font:12px/20px Arial,"Microsoft YaHei","宋体",sans-serif; text-align:center; background:#DCDCDC; }
a{ color:#333; text-decoration:none; outline:none;}
a:hover {color:#f00; text-decoration:underline; }
table { border-collapse: collapse; border-spacing: 0; empty-cells:show; }
table td,table th{ border:#ddd solid 1px; padding:5px 10px; }
table th{ background:#176D97; color:#fff; }
table .new td{ color:#f60; font-weight:bold; }
/*-- 左侧导航 --*/
.leftNav{ position:fixed; width:140px; left:0; top:100px; _position:absolute; text-align:left; cursor:pointer; background-image:url(about:blank); }
.leftNav a{ display:block; position:relative; height:30px; line-height:30px; margin-bottom:2px; background:#fff; padding-left:10px; width:130px; overflow:hidden; cursor:pointer; left:-110px; }
.leftNav a:hover{ text-decoration:none; color:#1974A1; }
.leftNav a:hover em{ background:#00b700}
.leftNav a em{ display:block; float:right; width:30px; background:#1974A1; color:#fff; font-size:16px; text-align:center; margin-left:10px;}
/*-- 右侧导航 --*/
.rightNav{ position:fixed; width:140px; right:0; top:100px; _position:absolute; text-align:left; cursor:pointer; background-image:url(about:blank); }
.rightNav a{ display:block; position:relative; height:30px; line-height:30px; margin-bottom:2px; background:#fff; padding-right:10px; width:130px; overflow:hidden; cursor:pointer; right:-110px; }
.rightNav a:hover{ text-decoration:none; color:#1974A1; }
.rightNav a:hover em{ background:#00b700}
.rightNav a em{ display:block; float:left; width:30px; background:#1974A1; color:#fff; font-size:16px; text-align:center; margin-right:10px;}
JS
<script src="//cdn.bootcss.com/jquery/2.2.1/jquery.min.js"></script>
JS-String对象的方法
String对象的方法
方法名 | 说明 |
---|---|
anchor() | 为字符串对象中的内容两边加上HTML的<a></a> 标记对 |
big() | 为字符串对象中的内容两边加上HTML的<big></big> 标记对 |
bold() | 为字符串对象中的内容两边加上HTML的<b></b> 标记对 |
fontcolor() | 为字符串对象中的内容两边加上HTML的<font></font> 标记对,并设置color属性 |
charAt() | 返回字符串对象中的指定位置处的字符 |
charCodeAt() | 返回一个整数,该整数表示字符串中对象中指定位置处的字符的Unicode属性 |
indexOf() | 返回某个子字符串对象中第一次出现的字符位置 |
lastIndexOf() | 作用与indexOf()相似,但搜索方向为从右到左 |
match() | 使用正则表达式模式对字符串进行搜索,并返回一个包含该搜索结果的数组 |
replace() | 使用正则表达式模式对字符串进行搜索,并对搜索到的内容用指定的字符串替换 |
search() | 返回使用正则表达式模式搜索时,第一匹配的子字符串在整个被搜索的字符中的位置 |
slice() | 返回在一个字符串的两个指定位置之间的子字符串 |
split() | 返回一个字符串按某种分隔标记符拆分为若干子字符串时所产生的字符串数组 |
substr() | 返回从指定位置开始,取出具有指定长度个数的字符所组成的字符串 |
substring() | 返回从一个位置开始,到另外一个结束位置的所有字符所组成的字符串 |
toLowerCase() | 返回一个字符串,该字符串中的所有字母转换为小写字母 |
toUpperCase() | 返回一个字符串,该字符串中的所有字母转换为大写字母 |
valueOf() | 返回某个字符串对象的原始值 |
JS-Date对象的方法
用于获取日期指定部分的方法
获取部分 | 方法名 | 说明 |
---|---|---|
获取年份信息 | getFullYear() | 获取日期对象中的年份信息,使用本地时,以4位数表示 |
getUTCFullYear() | 使用UTC小时,以4位数表示 | |
getYear() | 使用本地时,如果年份小于2000则以2位数表示,如果大于2000则以4位数表示。建议使用getFullYear()为佳 | |
月份 | getMonth() | 使用本地时,返回0-11之间的整数 |
getUTCmonth() | 使用UTC月 | |
天数 | getDate() | 使用本地时,返回0-31之间的整数 |
getUTCDate() | 使用UTC天 | |
星期 | getDay() | 星期几的信息,使用本地时,返回0-6之间的整数 |
getUTCDay() | 使用UTC星期几 | |
小时 | getHours() | 返回0-23之间的整数 |
getUTCHours() | 使用UTC小时 | |
分钟 | getMinutes() | 返回0-59之间的整数 |
getUTCMinutes() | 使用UTC分钟 | |
秒钟 | getSeconds() | 返回0-59之间的整数 |
getUTCSeconds() | 使用UTC秒钟 | |
毫秒 | getMiliseconds() | 返回0-999之间的整数 |
getMiliseconds() | 使用UTC毫秒 | |
时间差 | getTime() | 获取日期对象所代表额度时间与1970年1月1日0时之间的毫秒数差 |
getTimezoneOffset() | 获取日期所代表的时间与UTC小时之间的时差数,以分钟为单位 |
用于设置日期指定部分的方法
设置部分 | 方法名 | 说明 |
---|---|---|
设置年份 | setFullYear(year[,month,day]) | 设置日期对象中的年份信息,使用本地时 |
setUTCFullYear(year[,month,day]) | 使用UTC小时 | |
setYear(year) | 使用本地时,如果年份小于2000则以2位数表示 | |
月份 | getMonth(month[,day]) | 使用本地时 |
getUTCMonth(month[,day] | 使用UTC月 | |
天数 | setDate(day) | 本地时 |
setUTCDate(day) | UTC天 | |
小时 | setHours(hours[,minutes,seconds,miliseconds]) | 本地时 |
setUTCHours(hours[,minutes,seconds,miliseconds]) | UTC时 | |
分钟 | setMinutes(minutes[,seconds,miliseconds]) | 本地时 |
setUTCMinutes(minutes[,seconds,miliseconds]) | UTC时 | |
秒 | setSeconds(seconds[,miliseconds]) | 本地时 |
setUTCSeconds(seconds[,miliseconds]) | UTC时 | |
毫秒 | setMiliSeconds(miliseconds) | 本地时 |
setUTCMiliSeconds(miliseconds) | UTC时 | |
通过毫秒设置时间 | setTime(miliseconds) | 通过距离1970年1月1日0时多少毫秒方式设置时间 |
将日期对象转移为字符串的方法
方法名 | 说明 |
---|---|
toDateString() | 将当前Date对象中的日期转换为字符串,返回格式为“星期 月份 天数 年份” |
toTimeString() | 将当前Date对象中的日期转换为字符串 |
toUTCString() | 将当前Date对象转换以UTC时间表示的字符串 |
toGMTString() | 将当前Date对象转换以GMT时间表示的字符串 |
toLocalString() | 将当前Date对象转换以本地时间表示的字符串 |
toLocalDateString() | 将当前Date对象转换以本地时间表示的日期字符串 |
toLocalTimeString() | 将当前Date对象转换以本地时间表示的时间字符串 |
toString() | 将当前Date对象转换为字符串的形式表示 |
Ajax 查询手机号码归属地
在网上找了很多、如果根据网络提供的API直接JS Ajax查询会出问题:拒绝访问
网上说是跨域了、解决办法就是java后台访问这个API地址。下面罗列一些网络上的API地址。
淘宝网
API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443
参数:
tel:手机号码
返回:JSON
拍拍
API地址: http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=15850781443&amount=10000&callname=getPhoneNumInfoExtCallback
参数:
mobile:手机号码
callname:回调函数
amount:未知(必须)
返回:JSON
财付通
API地址: http://life.tenpay.com/cgi-bin/mobile/MobileQueryAttribution.cgi?chgmobile=15850781443
参数:
chgmobile:手机号码
返回:xml
百付宝
API地址: https://www.baifubao.com/callback?cmd=1059&callback=phone&phone=15850781443
参数:
phone:手机号码
callback:回调函数
cmd:未知(必须)
返回:JSON
115
API地址: http://cz.115.com/?ct=index&ac=get_mobile_local&callback=jsonp1333962541001&mobile=15850781443
参数:
mobile:手机号码
callback:回调函数
返回:JSON
有道
API地址: http://www.youdao.com/smartresult-xml/search.s?jsFlag=true&type=mobile&q=13985046628
参数:
type:mobile(表示查询手机号码)
q:手机号码
返回:JSON
这里用的是有道的API
、下面是代码:
页面代码:
function findPhoneAddres(){
var mobile = $("#usermobil").val();
var urlAction = "<%=path %>/customermanage/listcustomerinfo!findPhoneAddres.action";
$.get(urlAction, {phoneStr:mobile}, function (data){
if(data==''||data==null){
alertMsg.info("找不到您输入的手机号码归属地!");
}else{
var json = eval("("+data+")");
var phoneStr = json.location ;
$("#userAddres").val(phoneStr.split(" ")[1]);
$("#userAddresByPhone").val(phoneStr.split(" ")[1]);
$("#userAddresLabel").html("手机号归属地:"+phoneStr.split(" ")[1])
}
});
}
后台Action方法:
/*
* 手机号码归属地查询地址
*/
private final String urlAddres = "http://www.youdao.com/smartresult-xml/search.s?" +
"jsFlag=true&type=mobile&q=";
/**
* 查询手机号码归属地
* @return
* @throws Exception
*/
public String findPhoneAddres() throws Exception{
String phone = request.getParameter("phoneStr");
String url = urlAddres+phone;
String result = ActionURL.callUrlByGet(url, "GBK");
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print(result);
out.close();
return null;
}
ActionURL静态类的callUrlByGet方法:
public static String callUrlByGet(String callurl,String charset){
String result = "";
try {
URL url = new URL(callurl);
URLConnection connection = url.openConnection();
connection.connect();
BufferedReader reader = new BufferedReader(new
InputStreamReader(connection.getInputStream(),charset));
String line;
while((line = reader.readLine())!= null){
result += line;
result += "\n";
}
} catch (Exception e) {
e.printStackTrace();
return "";
}
if(result!=null&&!"".equals(result)){
result = result.substring(result.indexOf("{" +
""), (result.indexOf("}")+1) );
}
return result;
}
Test测试方法:
public static void main(String[] args) {
String url = "http://www.youdao.com/smartresult-xml/search.s?" +
"jsFlag=true&type=mobile&q=13985046628";
String result = callUrlByGet(url,"GBK");
System.out.println(result);
}
输出的结果:
{'product':'mobile','phonenum':'13985046628','location':'贵州 贵阳'}
出自http://hzw2312.blog.51cto.com/2590340/936166
相关https://m69w.com/247.html
Nginx抗CC攻击基础篇:VeryNginx
VeryNginx的GitHub地址: https://github.com/alexazhou/VeryNginx
VeryNginx 基于 lua_nginx_module(openrestry) 开发,实现了高级的防火墙、访问统计和其他的一些功能。 强化了 Nginx 本身的功能,并提供了友好的 Web 交互界面。
VeryNginx在线演示地址: http://alexazhou.xyz/vn/index.html
用户名 / 密码: verynginx / verynginx
下面的安装教程是基于CentOS 6 64位系统
进行的
安装依赖
yum install -y gcc gcc-c++ make cmake autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel libaio readline-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel libxslt-devel libicu-devel libevent-devel libtool libtool-ltdl bison gd-devel vim-enhanced pcre-devel zip unzip ntpdate sysstat patch bc expect rsync git lsof lrzsz
进入/tmp目录
cd /tmp/
下载OpenResty
wget https://openresty.org/download/ngx_openresty-1.9.7.1.tar.gz
解压OpenResty
tar -xvzf ngx_openresty-1.9.7.1.tar.gz
进入OpenResty源代码目录
cd ngx_openresty-1.9.7.1
配置configure及变量信息
./configure --prefix=/usr/local/openresty --user=nginx --group=nginx --with-http_stub_status_module --with-luajit
编译安装OpenResty
gmake && gmake install
退回到/tmp目录中
cd ..
克隆VeryNginx
git clone https://github.com/alexazhou/VeryNginx.git
删除OpenResty中的nginx.conf默认配置文件
rm -rf /usr/local/openresty/nginx/conf/nginx.conf
下载VeryNginx的nginx.conf配置文件
wget https://dl.m69w.com/scripts/nginx.conf -O /usr/local/openresty/nginx/conf/nginx.conf
复制VeryNginx到OpenResty中
cp -r ~/VeryNginx/VeryNginx /usr/local/openresty/VeryNginx
修改/usr/local/openresty/目录的所有者为nginx用户
chown -R nginx:nginx /usr/local/openresty/
启动VeryNginx
/usr/local/openresty/nginx/sbin/nginx
打开浏览器访问 http://你的服务器IP/VeryNginx/index.html
默认用户名和密码是 verynginx / verynginx
登录之后就可以查看状态,并对配置进行修改了。修改配置后,记得到 「Config > System > All Configuration」去保存.
如果需要详细的配置说明,请查看 VeryNginx Wiki
相关:
https://github.com/jgmdev/ddos-deflate(说明)
Linux被DDOS&CC攻击解决实例
通过nginx配置文件抵御攻击
防CC的收集以及实现基于js的CC攻击
一段JS代码让Markdown自动生成目录
来自:一段JS代码让Markdown自动生成目录
实现方法
页面结构
//放入在文章页内容前面
<div class="BlogAnchor">
<p>
<b id="AnchorContentToggle" title="收起" style="cursor:pointer;">目录[-]</b>
</p>
<div class="AnchorContent" id="AnchorContent"> </div>
</div>
Js代码
//在文章中查找title并填充到div AnchorContent中
$(".post-content").find("h2,h3,h4,h5,h6").each(function(i,item){
var tag = $(item).get(0).localName;
$(item).attr("id","wow"+i);
$("#AnchorContent").append('<li><a class="new'+tag+' anchor-link" onclick="return false;" href="#" link="#wow'+i+'">'+(i+1)+" · "+$(this).text()+'</a></li>');
$(".newh2").css("margin-left",0);
$(".newh3").css("margin-left",20);
$(".newh4").css("margin-left",40);
$(".newh5").css("margin-left",60);
$(".newh6").css("margin-left",80);
});
$("#AnchorContentToggle").click(function(){
var text = $(this).html();
if(text=="目录[-]"){
$(this).html("目录[+]");
$(this).attr({"title":"展开"});
}else{
$(this).html("目录[-]");
$(this).attr({"title":"收起"});
}
$("#AnchorContent").toggle();
});
CSS代码
/*导航*/
.BlogAnchor {
background: #f4f7f9;
padding: 10px;
line-height: 180%;
}
.BlogAnchor p {
font-size: 18px;
color: #15a230;
margin-bottom: 0.3em;
}
.BlogAnchor .AnchorContent {
padding: 5px 0px;
}
.BlogAnchor li{
text-indent: 20px;
font-size: 14px;
}
#AnchorContentToggle {
font-size: 13px;
font-weight: normal;
color: #FFF;
display: inline-block;
line-height: 20px;
background: #5cc26f;
font-style: normal;
padding: 1px 8px;
margin-right: 10px;
}
.BlogAnchor a:hover {
color: #5cc26f;
}
.BlogAnchor a {
text-decoration: none;
}
导航扩展
同时也可以实现锚点之间的平滑滚动,使用jquery animate
$(".anchor-link").click(function(){
$("html,body").animate({scrollTop: $($(this).attr("link")).offset().top}, 1000);
});
结束
(转)Typecho首页文章列表新增管理员可见编辑按钮
爬虫你是多厉害
后台抓爬虫
今天看了一个关键字:健身
这个站点是没有健身
这个专栏的
所以我相信最早那个ip的关键字是人为输入
的
再看上面的那个关键字搜索,
不看ip不会知道
来自360
,还不带bot,spider,UA都是iPhone的,够6的
要么是用户手机里安装了360相关产品,要么你懂的
就奇怪了,人家自己手动输入关键字
你360凭什么去模仿人家行为,万一给你模仿各种登陆,支付宝登陆什么的\
其实不止360还有百度,换UA来看
说多没图不好