用Win+R 打开运行界面,输入mmc:
点击在新窗口中浏览此图片
在打开的控制台界面,从菜单中选择“文件”-“添加或删除管理单元”,然后从“可用的管理单元”添加“远程桌面”到“所选的管理单元”中,点击“确定”:
点击在新窗口中浏览此图片
最后,右键点击“远程桌面”-“添加新连接”,输入需管理的客户端IP地址即可访问。
=======================================================================================

背景:10台Windows Server 2012上面装上盗版的Loadrunner,想假装很专业的做一下接口测试。要根据自己的32位还是64位下载安装后,那个控制面板里的打开和关闭Windows功能才有角色管理工具->远程桌面服务工具。

对于远程管理Windows 机器来说,远程连接可能是用得最频繁的。过去,我总是把远程连接保存为.rdp 文件,以方便双击后自动连接。如果有多台机器需要管理,可以放在某个目录中,但总觉得这样的方式很笨。直到今天,在客户现场,无意中发现MMC 中是可以加入“远程管理”功能的。回来找资料看了一下,觉得还不错,特适用于同时连接多台机器的情况。

一、界面
描述前,先给个使用界面看看吧:
点击在新窗口中浏览此图片
对于【附件】中的【远程桌面连接】(即mstsc.exe)来说,主要是管理更方便了,只需一个.msc 文件即能轻松打开管理窗口,并在多个连接窗口之间切换。屏幕分辨率可设定,但似乎没有提供全屏的功能。

二、安装及配置
该MMC 使用的远程桌面组件,实际上是服务器平台提供的功能,所以,在默认的桌面系统中是没有提供的,需要独立安装。以Windows 7为例,步骤有:
1、下载组件
从下面的连接中下载“Windows 7 远程服务器管理工具”:
点击:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=7d2f6ad7-656b-4313-a005-4e344e43997d#filelist

下载前,请留意页面中的说明,包括:
引用
a、仅可以安装在运行企业版、专业版或旗舰版 Windows 7 的计算机上;
b、安装管理工具包的计算机上 Administrators 组的成员;
c、根据运行版本不同,下载适用于x86或x86_64 平台的程;
d、下载后的包,后缀名为.msu,双击即可安装(若使用第三方工具下载,后缀名可能会被修改)。

2、远程桌面功能
安装完毕后,依次打开:“控制面板”-“程序和功能”-“打开或关闭Windows功能”-“远程服务器管理工具”-“角色管理工具”,勾选下面的“远程桌面服务工具”:
点击在新窗口中浏览此图片

3、在MMC中添加远程管理组件
用Win+R 打开运行界面,输入mmc:
点击在新窗口中浏览此图片
在打开的控制台界面,从菜单中选择“文件”-“添加或删除管理单元”,然后从“可用的管理单元”添加“远程桌面”到“所选的管理单元”中,点击“确定”:
点击在新窗口中浏览此图片
最后,右键点击“远程桌面”-“添加新连接”,输入需管理的客户端IP地址即可访问。

4、分辨率问题
创建连接后,右键点击该连接,选择“属性”,在“屏幕选项”中可设置分别率:
点击在新窗口中浏览此图片
建议使用“填充MMC 结果窗格”,确定后,通过工具栏上的图标,关闭多余的显示窗口:
点击在新窗口中浏览此图片
关闭MMC (保存为.msc 文件)。重新打开,即可满屏显示远程终端窗口。


摘自 :http://www.linuxfly.org/read.php?561
服务器有一个叫iLO远程管理的东西,有点像远程的BIOS+系统盘。
内容:
curl -XGET http://baidu.com

GET / HTTP/1.1
User-Agent: curl/7.29.0
Host: baidu.com
Accept: */*

HTTP/1.1 200 OK
Date: Fri, 31 Mar 2017 03:56:42 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: '51-47cf7e6ee8400'
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sat, 01 Apr 2017 03:56:42 GMT
Connection: Keep-Alive
Content-Type: text/html

<html>
<meta http-equiv='refresh' content='0;url=http://www.baidu.com/'>
</html>



curl -XPOST http://baidu.com


POST / HTTP/1.1
User-Agent: curl/7.29.0
Host: baidu.com
Accept: */*

HTTP/1.1 200 OK
Date: Fri, 31 Mar 2017 03:59:50 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: '51-47cf7e6ee8400'
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sat, 01 Apr 2017 03:59:50 GMT
Connection: Keep-Alive
Content-Type: text/html

<html>
<meta http-equiv='refresh' content='0;url=http://www.baidu.com/'>
</html>



Post加个参数:
curl -XPOST http://baidu.com -d'say=hello'

POST / HTTP/1.1
User-Agent: curl/7.29.0
Host: baidu.com
Accept: */*
Content-Length: 9
Content-Type: application/x-www-form-urlencoded

say=helloHTTP/1.1 200 OK
Date: Fri, 31 Mar 2017 04:03:47 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: '51-47cf7e6ee8400'
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sat, 01 Apr 2017 04:03:47 GMT
Connection: Keep-Alive
Content-Type: text/html

<html>
<meta http-equiv='refresh' content='0;url=http://www.baidu.com/'>
</html>



Get里加个参数:
curl -XGET http://baidu.com?say=hello

GET /?say=hello HTTP/1.1
User-Agent: curl/7.29.0
Host: baidu.com
Accept: */*

HTTP/1.1 200 OK
Date: Fri, 31 Mar 2017 04:05:06 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: '51-47cf7e6ee8400'
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sat, 01 Apr 2017 04:05:06 GMT
Connection: Keep-Alive
Content-Type: text/html

<html>
<meta http-equiv='refresh' content='0;url=http://www.baidu.com/'>
</html>
内容:
curl -XGET http://baidu.com

GET / HTTP/1.1
User-Agent: curl/7.29.0
Host: baidu.com
Accept: */*

HTTP/1.1 200 OK
Date: Fri, 31 Mar 2017 03:56:42 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sat, 01 Apr 2017 03:56:42 GMT
Connection: Keep-Alive
Content-Type: text/html

<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>



curl -XPOST http://baidu.com


POST / HTTP/1.1
User-Agent: curl/7.29.0
Host: baidu.com
Accept: */*

HTTP/1.1 200 OK
Date: Fri, 31 Mar 2017 03:59:50 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sat, 01 Apr 2017 03:59:50 GMT
Connection: Keep-Alive
Content-Type: text/html

<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>



Post加个参数:
curl -XPOST http://baidu.com -d"say=hello"

POST / HTTP/1.1
User-Agent: curl/7.29.0
Host: baidu.com
Accept: */*
Content-Length: 9
Content-Type: application/x-www-form-urlencoded

say=helloHTTP/1.1 200 OK
Date: Fri, 31 Mar 2017 04:03:47 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sat, 01 Apr 2017 04:03:47 GMT
Connection: Keep-Alive
Content-Type: text/html

<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>



Get里加个参数:
curl -XGET http://baidu.com?say=hello

GET /?say=hello HTTP/1.1
User-Agent: curl/7.29.0
Host: baidu.com
Accept: */*

HTTP/1.1 200 OK
Date: Fri, 31 Mar 2017 04:05:06 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sat, 01 Apr 2017 04:05:06 GMT
Connection: Keep-Alive
Content-Type: text/html

<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>
DownLoad:https://github.com/openresty/set-misc-nginx-module/
    最近公司运营提出需求,需要使从公司网站上下载的资料文件显示为中文名称,研发部问道我们有没有好的实现方法,php应该有这样的功能,研发回复说,之前就是这样实现过,但太消耗内存,不做考虑了,才有现在下载资料文件,显示中文名称没有实现。想了想,记起前段时间看agentzh(章亦春)大牛关于nginx的大作以及他写的nginx的模块,似乎有实现此类功能的模块,找了一下果然有:http://wiki.nginx.org/HttpSetMiscModule#Installation
利用其中 set_decode_base64 以及nginx 的 add_header 添加一个http头:Content-Disposition ,配合php代码实现。
nginx 添加模块重新编译
下载需要的模块:
到 https://github.com/agentzh/ 下载模块
agentzh-echo-nginx-module-v0.41-1-gb3ad5c1.tar.gz
agentzh-set-misc-nginx-module-v0.22rc8-5-ge79e7f0.tar.gz
simpl-ngx_devel_kit-v0.2.17-10-g4192ba6.tar.gz
解压到对应目录
安装:
./configure  --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/usr/local/nginx_module/ngx_devel_kit --add-module=/usr/local/nginx_module/misc-nginx --add-module=/usr/local/nginx_module/echo-nginx

make -j2

make install
php 实现部分我也不是太懂,就不贴出来了。
nginx 相关配置段
点击在新窗口中浏览此图片
最终效果,上图
点击在新窗口中浏览此图片

各位童鞋注意啦:该种方式在使用CDN的网站中也可以生效的。
从该功能上线以来看,效果还不错,agentzh(章亦春)写的nginx模块那是杠杠的
参考:http://wiki.nginx.org/HttpSetMiscModule#Installation
来自:http://longzhiyi.blog.51cto.com/350171/964677
背景:发现并没有压缩,查来查去是这个配置有问题写成1000k了,也就是下面这些列表都不符合条件,不给gzip压缩,gzip_min_length   1k; 不压缩临界值,大于1K的才压缩,一般不用改,被修改成1000k了,于是没有压缩,查了老半天content-type,都写了,呵呵。
修改后,在这儿测试了一下,果然压缩了:
http://pagespeed.webkaka.com/youhua/gzip/

网址 http://www.jackxiang.com/template/trielegant/styles.css 的检测结果:
是否压缩  是
压缩类型  gzip
原文件大小  8704 字节
压缩后文件大小  4275 字节
压缩率  50.88%

图片是否需要启用GZip压缩?

无意间看到有网友提及,图片不用GZip压缩的。图片尽量不要使用gzip,因为gif,png等图片本身就是被压缩过的,
开启和关闭图片GZip压缩后,网页的总体积是不同的,令人惊讶的是开启图片GZip压缩后,网页总体积竟然变大了。而耗时也相应的增多了。
===========================================
1、Vim打开Nginx配置文件

vim /usr/local/nginx/conf/nginx.conf

2、找到如下一段,进行修改

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";

3、解释一下

第1行:开启Gzip

第2行:不压缩临界值,大于1K的才压缩,一般不用改

第3行:buffer,就是,嗯,算了不解释了,不用改

第4行:用了反向代理的话,末端通信是HTTP/1.0,有需求的应该也不用看我这科普文了;有这句的话注释了就行了,默认是HTTP/1.1

第5行:压缩级别,1-10,数字越大压缩的越好,时间也越长,看心情随便改吧

第6行:进行压缩的文件类型,缺啥补啥就行了,JavaScript有两种写法,最好都写上吧,总有人抱怨js文件没有压缩,其实多写一种格式就行了

第7行:跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding",我不需要这玩意,自己对照情况看着办吧

第8行:IE6对Gzip不怎么友好,不给它Gzip了

上面摘自:http://www.veryhuo.com/a/view/51706.html

http://www.webkaka.com/blog/archives/how-to-set-gzip-for-js-in-Nginx.html
https://segmentfault.com/q/1010000000585128

查询是否被zip压缩:
http://pagespeed.webkaka.com/youhua/gzip/

输入:
http://www.jackxiang.com/images/js/common.js?jsver=2.1.1.3626.3


=======================================
启用Gzip  可减少 54.2 KB 启用服务器Gzip,可以减少传输字节数。更多  -3分
未启用Gzip的资源有:
http://www.jackxiang.com/template/trielegant/styles.css (大小: 8.5 KB 预计可减少 5.9 KB )
http://www.jackxiang.com/images/js/common.js?jsver=2.1.1.3626.3 (大小: 20.3 KB 预计可减少 14.8 KB )
http://www.jackxiang.com/lang/zh-cn/jslang.js?jsver=2.1.1.3626.3 (大小: 3.7 KB 预计可减少 2.1 KB )
http://www.jackxiang.com/images/js/ajax.js?jsver=2.1.1.3626.3 (大小: 7.4 KB 预计可减少 6.0 KB )
http://www.jackxiang.com/images/js/swfobject.js?jsver=2.1.1.3626.3 (大小: 6.4 KB 预计可减少 4.2 KB )
http://www.jackxiang.com/images/css/SyntaxHighlighter.css (大小: 3.6 KB 预计可减少 2.5 KB )
http://jackxiang.com/favicon.jpg (大小: 1.9 KB 预计可减少 793 B )
http://js.users.51.la/4950674.js (大小: 1.9 KB 预计可减少 1.1 KB )
http://www.jackxiang.com/images/hl/shCore.js (大小: 9.5 KB 预计可减少 5.7 KB )
http://www.jackxiang.com/images/hl/shBrushPhp.js (大小: 3.7 KB 预计可减少 2.1 KB )
http://www.jackxiang.com/images/hl/shBrushJScript.js (大小: 937 B 预计可减少 437 B )
http://www.jackxiang.com/images/hl/shBrushJava.js (大小: 1.0 KB 预计可减少 494 B )
http://www.jackxiang.com/images/hl/shBrushSql.js (大小: 1.9 KB 预计可减少 964 B )
http://www.jackxiang.com/images/hl/shBrushCss.js (大小: 4.0 KB 预计可减少 2.2 KB )
http://www.jackxiang.com/images/hl/shBrushCpp.js (大小: 2.7 KB 预计可减少 1.4 KB )
http://www.jackxiang.com/images/hl/shBrushPython.js (大小: 4.7 KB 预计可减少 2.5 KB )
http://www.jackxiang.com/template/trielegant/images/logo_header.png (大小: 5.6 KB 预计可减少 237 B )
http://www.jackxiang.com/template/trielegant/images/long.gif (大小: 924 B 预计可减少 358 B )
http://jackxiang.com/template/trielegant/images/bridge-banner-eleven.jpg (大小: 18.9 KB 预计可减少 354 B )
http://icon.51.la/icon_0.gif (大小: 846 B 预计可减少 101 B )
http://eiv.baidu.com/hmt/icon/21.gif (大小: 1.1 KB 预计可减少 69 B )
背景:Nginx直接连接redis,不用php的扩展连接,一定程序上提高了redis性能,但是在程序逻辑的可控制上会弱一点,用来做一些单纯的高并发登录没有问题,逻辑重点这种玩法并不能带来很大的提升。
需要下载第三方模块ngx_http_redis-0.3.2.tar.gz,并需要重新编译nginx。
注意要注释掉ngx_http_redis_module.c文件的145行
/*static ngx_str_t  ngx_http_redis_db  = ngx_string("redis_db");*/
否则会报错,意思是这个定义的redis_db在程序里没有使用,算是个警告报错,注释掉安装即可

./configure --user=nginx --group=nginx  --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/software/module/ngx_http_redis-0.3.2


配置
location / {
    set $redis_key $uri;

    redis_pass     name:6379;
    default_type   text/html;
    error_page     404 = /fallback;
  }

$redis_db
The number of redis database (required for < 0.3.2).
For ngx_http_redis >= 0.3.2 is not obligatory, default value is "0" if not defined.
这个$redis_db可以不配,默认是0database。
更多官方的资料请参考:http://wiki.nginx.org/HttpRedis2Module

更多参考之Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享:
http://lovelace.blog.51cto.com/1028430/1550198
https://www.nginx.com/resources/wiki/modules/redis2/
背景:阿里云没备案会不让配置host访问的,被拦截,直接用ip访问呢?应该没啥吧。
   比如我服务器ip是192.168.1.1,两个域名为user.a.com,manage.a.com都映射到了该ip上。nginx里如何配置,当我用ip访问时默认打开user.a.com;而另一个域名manage.a.com又不影响呢?

这样就可以了

  

nginx.conf里写:
include vhosts/*.conf;

ls /usr/local/nginx/conf/vhosts/
10.70.37.2*.conf  default.conf
———————————————
10.70.37.2*.conf
server_name 10.70.37.24;//写成IP

default.conf
server_name 127.0.0.1;

来自:http://www.dewen.io/q/2760
背景:看一个nginx的404里有<!-- a padding to disable MSIE and Chrome friendly error page -->。
配置:upload_cleanup 400 404 499 500-505;
源码:在nginx源码里有配置位置和定义如下:
./src/http/ngx_http_special_response.c:"<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
static u_char ngx_http_msie_padding[] =
"<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
"<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
"<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
"<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
"<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
"<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
;
输出:
<html>
<head><title>413 Request Entity Too Large</title></head>
<body bgcolor="white">
<center><h1>413 Request Entity Too Large</h1></center>
<hr><center>nginx</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
————————————————————————————————————————————————————————
nginx自定义页面非常简单,两条指令就可以搞定
1. 在http{}段加入红色指令,如下
http {
...
        fastcgi_intercept_errors on;        
        error_page  404              /404.html;
...
}

2. 把404页面放到根目录(root指令定义的目录下),默认是安装目录的html目录下。

3.测试配置是否正确
/usr/local/nginx/nginx -t

4.重新载入配置
kill -HUP `cat /usr/local/nginx/nginx.pid`

注:
自定义的404.html的内容必须大于512字节,否则ie下会显示默认404错误页面,不能显示自定义的404页面。
如果你的404内容小于512字节,可以再404.html的<html>标签后面加入一下内容,可以屏蔽浏览器默认错误提示。
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->

来自:http://www.2cto.com/os/201212/176562.html

背景:Nginx代理PHP9000端口的接口里发现一些499........[23/Dec/2015:10:21:59 +0800] "POST /videoupload.php HTTP/1.1" 499 0 "-" "Mozilla/5.0 (compatible; KoPHP v3.0 +http://kophp.com/)" - "5.005"
日志记录中HTTP状态码出现499错误有多种情况,我遇到的一种情况是nginx反代到一个永远打不开的后端,就这样了,日志状态记录是499、发送字节数是0。

    老是有用户反映网站系统时好时坏,因为线上的产品很长时间没有修改,所以前端程序的问题基本上可以排除,于是就想着是Get方式调用的接口不稳定,问了相关人员,说没有问题,为了拿到确切证据,于是我问相关人员要了nginx服务器的日志文件(awstats日志),分析后发现日志中很多错误码为499的错误,约占整个日志文件的1%,而它只占全部报错的70%左右(全部报错见下图),那么所有报错加起来就要超过1%了,这个量还是特别大的。

    499错误是什么?让我们看看NGINX的源码中的定义:

ngx_string(ngx_http_error_495_page), /* 495, https certificate error */
ngx_string(ngx_http_error_496_page), /* 496, https no certificate */
ngx_string(ngx_http_error_497_page), /* 497, http to https */
ngx_string(ngx_http_error_404_page), /* 498, canceled */
ngx_null_string,                    /* 499, client has closed connection */

    可以看到,499对应的是 “client has closed connection”。这很有可能是因为服务器端处理的时间过长,客户端“不耐烦”了。

    Nginx 499错误的原因及解决方法
    打开Nginx的access.log发现在最后一次的提交是出现了HTTP1.1 499 0 -这样的错误,在百度搜索nginx 499错误,结果都是说客户端主动断开了连接。
    但经过我的测试这显然不是客户端的问题,因为使用端口+IP直接访问后端服务器不存在此问题,后来测试nginx发现如果两次提交post过快就会出现499的情况,看来是nginx认为是不安全的连接,主动拒绝了客户端的连接.

    但搜索相关问题一直找不到解决方法,最后终于在google上搜索到一英文论坛上有关于此错误的解决方法:
proxy_ignore_client_abort on;
Don’t know if this is safe.
    就是说要配置参数 proxy_ignore_client_abort on;
    表示代理服务端不要主要主动关闭客户端连接。

    以此配置重启nginx,问题果然得到解决。只是安全方面稍有欠缺,但比总是出现找不到服务器好多了。

    还有一种原因是 我后来测试发现 确实是客户端关闭了连接,或者说连接超时 ,无论你设置多少超时时间多没用 原来是php进程不够用了 改善一下php进程数 问题解决 默认测试环境才开5个子进程。

来自:http://wmcxy.iteye.com/blog/2026835?&from=androidqq
背景:想测试android的pad浏览器屏幕的显示情况,而测试机没有网络,如果用wifi热点作fiddler2的代理也成,可是不是人人都有代理,最好是修改一下host文件。
最近在做的项目要通过域名调用内网的服务器,因为android模拟器host文件无法修改,导致无法通过域名使用http方法调用内网服务,因此从网上大量转载的一种方法,这种方法:

    1. 通过emulator -avd avdName -partition-size 128 启动模拟器

    2.通过adb root 和 adb remount 命令获得root权限。

    3.通过 adb pull /system/etc/hosts 命令将hosts文件转移到PC上,手动修改hosts,并且通过adb push将hosts文件再推送回去。

     这个问题是因为linux中的换行符和window中的回车换行不一致引起的,网上大部分方法是让利用ultraedit等编辑器直接修改,但是我复制到编辑器上依然无法修改。上贴中的malbers回复说,利用echo命令,可以直接通过命令将需要修改的内容添加到hosts文件中,试了一下,果然可行。

     首先键入 adb shell 命令(新版本的sdk adb命令被转移到了platform-tools目录中),然后echo 192.168.0.246 www.aaa.com>>/system/etc/hosts,敲入上面这条命令后,再使用 cat /system/etc/hosts查看hosts文件修改情况,发现hosts果然已经被修改,但是问题是依然没有换行,貌似只有换行了以后才能被识别,

因此再次利用echo命令加入了换行符,问题解决。具体操作如下:

     前面几个步骤不变,但是不需要将hosts文件pull到电脑上,如果你已经修改了但是无效,可以先pull出来,还原到原始状态,不要有任何换行,并替换掉

模拟器上已经修改的hosts,使它回复到原始状态。即只有127.0.0.1 localhost。

    然后进入adb shell , 使用 echo -e \\n >> /system/etc/hosts 为hosts文件加入换行符。

    再次使用 echo 192.168.0.246 www.aaa.com >> /system/etc/hosts 。

    这样就完整解决了换行问题。再次在浏览器中敲入www.aaa.com,熟悉的页面也出现了。
转自:http://blog.csdn.net/landen11/article/details/7022376


首先请确认你修改的是文件是 /system/etc/hosts ,如果不是,那你即使改了也无效。

其次,如果你是在windows下修改hosts文件,那就必须注意换行符的问题,以及hosts文件格式的问题:

android下的hosts文件必须像以下这样写:

IP 域名

注意:

在IP和域名之间保留一个空格 每行只能有一个域名,不能一个IP后面跟多个域名。
android上的换行符(也就是回车)是LF,也就是\n,而windows上的换行符是CR LF,也就是\r\n
所以在windows下用记事本之类的软件编辑了hosts文件,放到手机上肯定认不出来的!解决的办法就是用NotePad++之类的文本编辑器,再使用“查找替换”,将“\r\n”替换成“\n”(注意要在notepad++里把查找模式设置为扩展模式,才能识别转义字符\r\n)
如果是在windows下编辑hosts,要保证最后一行结尾也是“\n”


终于搞掂!!!

转自:https://plus.google.com/105237252862440264277/posts/CF9F42e4axj
背景:有时在做一些Nginx的Proxy时,如从80端口请求后代码到其它web服务器如tomcat的8080端口,需要一些主备的思想,也就是万一主服务器挂了怎么办?用备机了,这块Nginx支持这样一个功能的。
一)nginx从前端域名支向代理并负载均衡代理到其他ip并配置了域名的机器,这儿得有proxy_set_header Host $host;相当于以域名访问IP:



经测试,这个Nginx的七层代理感觉还是比Lvs差一点,压力测试时这块儿还是有点卡:


二)如nginx暴露出域名反向代理到一台tomcat的以IP指向的8080端口:

——————————————————————————————————————————


只要在希望成为后备的服务器ip后面多添加一个backup参数,这台服务器就会成为备份服务器。
在平时不使用,nginx不会给它转发任何请求。只有当其他节点全部无法连接的时候,nginx才会启用这个节点。
一旦有可用的节点恢复服务,该节点则不再使用,又进入后备状态。

可以两台机子互为热备,平时各自负责各自的服务。在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续性,提高服务的可靠性。

关于这个参数的官档说明:
http://wiki.nginx.org/NginxHttpUpstreamModule
backup - (0.6.7 or later) only uses this server if the non-backup servers are all down or busy (cannot be used with the directive ip_hash)

摘自:http://hillside.iteye.com/blog/703281

http://chattool.sinaapp.com/?p=1063
背景:conf里面有一个ssl的conf,scp过来抄时忘记删除,但nginx下的nginx.conf下是include *.conf,于是出问题了,但nginx不报这个conf有问题,而是说没有找到ssl的crt文件,怎么办?主要是学会看日志 cat /var/log/messages | grep nginx ,看日志才发现是多了一个conf文件。

service nginx reload
Reloading nginx configuration (via systemctl):  Job for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' for details.
——————————————————————————————————————————————————————————————————————

启动apache服务出现,或启动nginx时出现:
Starting nginx (via systemctl): Job for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' for details.
查看错误提示

主要是学会看日志 cat /var/log/messages | grep nginx
Oct 10 14:34:12 iZ251vfc84kZ nginx: nginx: [emerg] BIO_new_file("/usr/local/nginx/conf/ssl/svn.justwinit.crt") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/usr/local/nginx/conf/ssl/svn.justwinit.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
Oct 10 14:34:12 iZ251vfc84kZ nginx: nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
Oct 10 14:34:12 iZ251vfc84kZ systemd: nginx.service: control process exited, code=exited status=1
[root@iZ251vfc84kZ vhost]# grep -r "svn.justwinit.crt" ./
./svn.justwinit.conf:        ssl_certificate     ssl/svn.justwinit.crt;
[root@iZ251vfc84kZ vhost]# rm -Rf svn.justwinit.conf


来自:http://wangsheng1.blog.51cto.com/29473/1550655
问题背景:有多个虚拟机的时候,发现在httpd.conf里注释了该文件:D:\wamp\bin\apache\apache2.2.22\conf\extra\httpd-vhosts.conf ,出现一堆的[warn] _default_ VirtualHost overlap on port 80, the first has precedence ,于是,对于apache启动时的警告,把http.conf里的:去掉#NameVirtualHost *:80前面的#号,然后重启apache即可。把那个包含的没有用的文件干掉即可。(其实际就是:httpd-vhosts.conf 里因为有这样一行 NameVirtualHost *:80,而httpd.conf里没有或给注释了导致的,而后面的虚拟机默认沿用这个....。)
      在apache2的httpd.conf里新增加了1个VirtualHost,域名是www.ligh.com,此时,服务器总共2个VirtualHost ,apachectl restart的时候却出现了下面的警告提示:
[warn] _default_ VirtualHost overlap on port 80, the first has precedence

      大概意思就是说后面新增加的这个VirtualHost 由于端口被占用,不能生效,沿用第一个虚拟主机的配置。
      检查了一下,发现原来在httpd.conf里,我没有把#NameVirtualHost *:80前的注释去掉,导致这个没有生效。
解决方案:
去掉#NameVirtualHost *:80前面的#号,然后重启apache即可。
来自:http://blog.163.com/lgh_2002/blog/static/44017526201141711451919/
背景:用树莓派修改进程数后,想重启后出现问题及解决。

apache2: bad user name ${APACHE_RUN_USER} 解决

开工后,发现有个虚拟机的apache没起来,调用apache2 -k start 后,提示如下内容:

apache2: bad user name ${APACHE_RUN_USER}



apache 启动时,是由读取 /etc/apache2/apache2.conf 读取了运行 User

而运行的user环境变量定义在/etc/apache2/envvars

而不是使用默认的登录账户启动,因此apache提供了
apache2ctl 工具来使用,调用

apache2ctl -k start

即可
______________________________________________________________________________________

pkill -9 apache
/usr/sbin/apache2 -k start
apache2: bad user name ${APACHE_RUN_USER}
/usr/sbin/apachectl -k start
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
启动成功!


vi +178 /etc/apache2/apache2.conf
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}


root@raspberrypi:/var/lock# /usr/sbin/apache2ctl -k start
Syntax error on line 178 of /etc/apache2/apache2.conf:
Error:\tApache has not been designed to serve pages while\n\trunning as root.  There are known race conditions that\n\twill allow any local user to read any file on the system.\n\tIf you still desire to serve pages as root then\n\tadd -DBIG_SECURITY_HOLE to the CFLAGS env variable\n\tand then rebuild the server.\n\tIt is strongly suggested that you instead modify the User\n\tdirective in your httpd.conf file to list a non-root\n\tuser.\n
Action '-k start' failed.

ls -lart /var/lock/apache2
total 0
drwxr-xr-x 2 root root 40 Aug 18 07:26 .
drwxrwxrwt 3 root root 60 Aug 18 07:26 ..


useradd -m www //它将创建用户的主目录即使不存在,不创建用户主目录

vi  /etc/apache2/envvars
export APACHE_RUN_USER=www
export APACHE_RUN_GROUP=www

成功了:
root@raspberrypi:/var/lock# /usr/sbin/apache2ctl -k start      
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

root@raspberrypi:/var/lock# ls -lart
drwxr-xr-x  2 www  root  40 Aug 18 07:33 apache2

阅读全文
一)进程ID:
pid_t 是那一种数据类型:
是Linux下的进程号类型,也就是Process ID _ Type 的缩写。 其实是宏定义的unsigned int类型,
warning: format ‘%u’ expects type ‘unsigned int’, but argument 2 has type ‘pthread_t’:
使用%lu打印pthread_t不会出现警告。

二)线程ID:
编译时如果使用%x打印pthread_t会出现警告信息:
thread-pool.c:77: warning: format ‘%x’ expects type ‘unsigned int’, but argument 3 has type ‘pthread_t’

如果使用%lu打印pthread_t不会出现警告。



如:
问题一,对宏定义的返回数据类型作出一个定义,如下面是对进程数作定义:


问题二:对pid_t进程号用printf打印出现警告:
pid_t p;
pthread_t t;
printf("\nthread id is %lu,procees id is %lu,waiting for into while...\n",t,p);
format ‘%lu’ expects type ‘long unsigned int’, but argument 3 has type ‘pid_t’  
这PID pthread_t打印用啥格式?
: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘pthread_t’
: warning: format ‘%ld’ expects type ‘long int’, but argument 3 has type ‘pid_t’
: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘pthread_t’
如果打印pid_t这种类型,你知道它是整数,但是不知道具体类型,而且在不同平台也可能不同

一般做法是强转下:"%lld", (long long)xxx
或者"%llu", (unsigned long long)xxx
因为C的整数最大就是long long

实践Ok代码如下:



背景:如果nginx代理这个80到swoole(用swoole做webserver,其实就是做个转发和html解析。),这个代理是个什么概念,那这个socket的fd是不是就没法长连接了呢??被反向80端口代理的swoole还能长连接?用:nginx_tcp_proxy_module才行 ,否则肯定不行啊,即使http的keep-alive,https://github.com/yaoweibin/nginx_tcp_proxy_module 也就是说nginx的http代理长连接不行,得走tcp这一层才行,用haproxy。

nginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司的的负载均衡都是nginx所以决定研究一下nginx的这个功能实现,下面简单介绍一下实现方法:
阅读全文
背景:502 Bad Gateway nginx问题,再次排查~~~keepalive_timeout 1800; 是不是太大了,浏览器访问没有关闭会一直连接状态,这块是否有必要不keepalive呢?http1.1中默认的keep-alive为connection(使用持久化连接),在http1.0中则默认为close,在大并发量的情况下可能需要将客户端的连接close掉,以保障服务器的正常运转。(因为每一台服务器它所能建立的最大连接数是有上限的,lnux下ulimit n xxx),nginx不像apache,直接有指令keep-alive off/on;它使用的是keepalive_timeout [time],默认的时长为75,可以在http、server、location使用此指令。keepalive_timeout  0; 来自:http://www.cnblogs.com/meteoric_cry/archive/2011/06/07/2074150.html
问题:established 很多的问题,发现我的web机器上面的ESTABLISHED链接数暴多,机器环境是nginx+mysql+fastcgi的
我打开一个页面发现有10来个ESTABLISHED状态链接,页面加载完了状态还在,大慨要过1分钟才
完成这个状态,我把打开的页面关闭掉后ESTABLISHED的链接还要过20秒才释放,
nginx的  keepalive_timeout 30
内核的一些参数都改的比较小
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 800

实践得出如下参数:


新的发现,及解释:
一)但uptime变大了,以前3,现在变8:
uptime
16:02:20 up 46 days, 21 min,  1 user,  load average: 11.99, 8.60, 6.66
二)timewait变大:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  
TIME_WAIT 428
FIN_WAIT1 6
ESTABLISHED 16
FIN_WAIT2 8
SYN_RECV 2

因没有复用socket里的ulimit句柄,导致系统负载变大,再就是出现了性能上的降低表现在TIME_WAIT数量变多~
linux下默认是不产生core文件的,要用ulimit -c unlimited放开,这儿的socket句柄不释放也是通过: ulimint -a  里的 open files  (-n) 65535 实现的,
所以使用下面的命令:   ulimit -n 65535   并不能有效的解决这个问题。直接这么修改open files 不能得到保持。下面给出的方法最简单和最直接:   修改/etc/security/limits.conf 添加如下一行:   * - nofile 65535   修改/etc/pam.d/login添加如下一行   session required /lib/security/pam_limits.so   最重要的,修改完这些后,要重新登录下才行,不然该session的句柄数不会生效。

ulimit 功能简述
假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有 10M,这时系统的内存资源就会受到巨大的挑战。
摘自:http://www.cnblogs.com/wangkangluo1/archive/2012/06/06/2537677.html

自己博客参看,Linux查看文件句柄占用多的进程 ,查看Linux某进程的句柄数,并通过ulimit -n 单个进程打开的最大文件句柄数量限制解决accept4() failed (24: Too many open files):http://jackxiang.com/post/6570/
————————————————————————————————————————————————————————————————————————————
请问下各位让ESTABLISHED 能快速完成释放还有哪些地方要注意的,不然的话造成大量的ESTABLISHED链接


HTTP/1.1 是允许 keepalive 的,这样可以降低服务器的负载
你要是仅仅想减少 ESTABLISHED,大可以在 nginx 上禁止 keepalive
这样虽然可以实现你的需求,但却与你所希望的结果大相径庭


对 我需要的是减低机器的负载,keepalive肯定也是要开的,可能是内核某些参数设置过大了,导致ESTABLISHED状态保持时间太长,
动不动就是好几百上千的ESTABLISHED 机器负责有点高

不是多不多的问题,是我把页面关了这个状态要过30秒才回收,这时间太久了,正常的话应该是页面刷新完了这个状态就完成了
或者说页面关闭了这个状态就完成了,而不是要过很成时间才完成这个状态

是通过 netstat 看的吗?
如果是,顺便也看一下 Recv-Q 和 Send-Q 那两列,看是 0 还是什么


显示Recv-Q 和 Send-Q 那两列,都是0
netstat -tl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 jackxiang.com:8012           *:*                         LISTEN      
tcp        0      0 jackxiang.com:9004           *:*                         LISTEN      
tcp        0      0 jackxiang.com:9005           *:*                         LISTEN      
tcp        0      0 jackxiang.com:8013           *:*                         LISTEN      
tcp        0      0 *:5901                      *:*                         LISTEN      
tcp        0      0 jackxiang.com:8015           *:*                         LISTEN      
tcp        0      0 *:sunrpc                    *:*                         LISTEN      
tcp        0      0 *:http                      *:*                         LISTEN      
tcp        0      0 jackxiang.com:x11            *:*                         LISTEN      
tcp        0      0 jackxiang.com:cddbp-alt      *:*                         LISTEN      
tcp        0      0 jackxiang.com:8017           *:*                         LISTEN      
tcp        0      0 *:6001                      *:*                         LISTEN      
tcp        0      0 *:ssh                       *:*                         LISTEN      
tcp        0      0 jackxiang.com:socks          *:*                         LISTEN      
tcp        0      0 localhost:smtp              *:*                         LISTEN      
tcp        0      0 *:https                     *:*                         LISTEN      
tcp        0      0 *:34139                     *:*                         LISTEN      
tcp        0      0 jackxiang.com:irdmi          *:*                         LISTEN      
tcp        0      0 jackxiang.com:mcreport       *:*                         LISTEN      
tcp        0      0 jackxiang.com:8006           *:*                         LISTEN      
tcp        0      0 jackxiang.com:cslistener     *:*                         LISTEN      
tcp        0      0 jackxiang.com:8009           *:*                         LISTEN      
tcp        0      0 jackxiang.com:etlservicemgr  *:*                         LISTEN      
tcp        0      0 jackxiang.com:8010           *:*                         LISTEN      
tcp        0      0 *:sunrpc                    *:*                         LISTEN      
tcp        0      0 *:webcache                  *:*                         LISTEN      
tcp        0      0 *:6001                      *:*                         LISTEN      
tcp        0      0 *:ssh                       *:*                         LISTEN      
tcp        0      0 *:60763                     *:*                         LISTEN    


我做了一个实验,如果是 keepalive 的情况,默认浏览器不关闭,连接就不断开
即使你不再有任何页面的访问操作,连接也一直保持,直到浏览器关闭为止

因此,初步判断,你的 ESTABLISHED 过多的原因是大多数人不关闭浏览器造成的,你自己也可以试验一下
如果想缩短这个,可以修改 webserver 的配置

因为现在的浏览器都是支持keepalive并遵守服务器配置,我试验了也是这样的
要把整个浏览器关了才会没有ESTABLISHED ,楼上的请问下在nginx上怎么主动断开,可以试验下看性能和速度方面会不会有影响

以上讨论来自:
http://bbs.chinaunix.net/thread-1945952-2-1.html
————————————————————————————————————————————————————————————————

导致服务器load过高
send_timeout

syntax: send_timeout the time

default: send_timeout 60

context: http, server, location

Directive assigns response timeout to client. Timeout is established not on entire transfer of answer, but only between two operations of reading, if after this time client will take nothing, then nginx is shutting down the connection.



应该是tcp连接没有释放造成的,我最近也碰到这个问题


其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。

具体如下:

状态:描述
  CLOSED:无连接是活动的或正在进行
  LISTEN:服务器在等待进入呼叫
  SYN_RECV:一个连接请求已经到达,等待确认
  SYN_SENT:应用已经开始,打开一个连接
  ESTABLISHED:正常数据传输状态
  FIN_WAIT1:应用说它已经完成
  FIN_WAIT2:另一边已同意释放
  ITMED_WAIT:等待所有分组死掉
  CLOSING:两边同时尝试关闭
  TIME_WAIT:另一边已初始化一个释放
  LAST_ACK:等待所有分组死掉

Tcp图解:
点击在新窗口中浏览此图片

获取Windows下的Established的bat自动脚本备案,指定进程的网络连接状态为established的连接数:


文库:http://wenku.baidu.com/link?url=NJKFU95Elz0RjW6MV99qhoVdcSz7OLxvOoPhdnoOMGb_mKMUVysGxc8GhqSXG7pwuyY5fuNQEW2iyQGzT1DzraPI6kv3l4RzVvszkn3SUl3
背景:nginx.conf里指定了nginx的error_log:error_log /data/logs/nginx/nginx_error.log; 该文件不在nginx的logs下面,于是我把这个logs文件夹都给删除了: rm -Rf /usr/local/nginx/logs,发现在启动时会会报一个alert错,nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)的研究探讨。

阅读全文
下面来罗列一下判断远端已经断开的方法:

法一:
当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。



法二:
  struct tcp_info info;
  int len=sizeof(info);
  getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
  if((info.tcpi_state==TCP_ESTABLISHED))  则说明未断开  else 断开

法三:
若使用了select等系统函数,若远端断开,则select返回1,recv返回0则断开。其他注意事项同法一。


法四:
int keepAlive = 1; // 开启keepalive属性
int keepIdle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测
int keepInterval = 5; // 探测时发包的时间间隔为5 秒
int keepCount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.

setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));

设置后,若断开,则在使用该socket读写时立即失败,并返回ETIMEDOUT错误



法五:
自己实现一个心跳检测,一定时间内未收到自定义的心跳包则标记为已断开。


摘自:http://blog.csdn.net/god2469/article/details/8801356

使用 epoll或poll ,如何确定 与客户端的链接断开 ?
http://bbs.csdn.net/topics/240073448

epoll事件检测:
http://www.360doc.com/content/09/0812/09/1894_4858884.shtml

epoll的各个事件触发条件测试:
http://www.cppblog.com/yangsf5/archive/2009/03/12/76353.html

利用epoll和多进程解决高并发问题 :
http://blog.csdn.net/ypbsyy/article/details/38046267
背景:如有时访问页面时因某原因,如审核没有通过,跳转到首页了,怎么办呢?初步想法是给跳转到首页后面加一个get参数说明原因也好排查问题,还中文的,其实从产品上讲应该加一个过渡页面,提示用户最好,咱就叫真一把。

点击之后在浏览器显示为:url/delete.php?id=%B9%FA%BC%CA%D0%C2%CE%C5

如何在浏览器原封不动的显示:url/delete.php?id=国际新闻

像IE就会被编码了,像Firefox就是中文显示的,呵呵,如下:



---------- 调试PHP ----------
url/delete.php?id=国际新闻
输出完成 (耗时 1 秒) - 正常终止

原因如下:
各个浏览器处理中文不一样,有的自动转换,有的不明显。你不要去改它,这样会获取它的时候造成数据不对

浏览器特性会把URL参数编码,就算可以显示中文参数传输,建议还是URL编码一下为好,以免造在不必要兼容性问题。如果URL参数传输,希望参数中不要有中文,就比如你要删除一条数据,用ID为好,谢谢!

参考:http://zhidao.baidu.com/link?url=kU3DTtVdQAspWfD9OMK891EotjPiGAkBQZV9rOxCDX9DTAGn_hkNIiA1-cX5usXwWkN_-7U7M-GrYcU1VxZVfK
分页: 1/4 第一页 1 2 3 4 下页 最后页 [ 显示模式: 摘要 | 列表 ]