www.nginx.cnsitemap

iis监听指定ip配置,iis和nginx共存

2016年11月30日 没有评论

服务器增加ip之后,默认都监听在80端口,这样新加的ip就不能供nginx使用。

打开cmd, netstat -aon

你会看见 TCP 0.0.0.0:80 或者id为4的进程监听在80端口

解决办法:
1.下载httpcfg.exe

http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&displaylang=en

2.查看系统监听情况,打开cmd之行

输出结果

这表示没有监听,给iis绑定指定ip

执行结果,表示设置正确
HttpQueryServiceConfiguration completed with 0.

重启iis服务器

现在iis只监听在我们指定的ip xxx.xxx.xxx.xxx上,新的ip可以供nginx或者apache使用了。

iis7可以使用netsh http add iplisten ipaddress=xxx.xxx.xxx.xxx

分类: nginx 标签:

windows下配置nginx和php环境(wnmp)

2016年11月27日 没有评论

1.准备
创建安装目录D:/web,我们所有的文件都会放在这个目录下

下载nginx最新版

下载php:php-5.4.16-Win32-VC9-x86.zip

2.下载完成会后获得如下文件,解压缩并重命名文件夹去掉版本号
php-5.4.16-Win32-VC9-x86.zip
nginx-1.10.2.zip

3.配置nginx
nginx不需要额外的配置,直接运行就可以,打开命令行cmd切换到d:/web/nginx
输入 start nginx 后回车即可启动
浏览器中访问http://localhost/可以看到欢迎页面表示安装成功
具体可以参考windows下安装nginx

3.配置php
在php的目录下可以找到php.ini-development文件,复制一份并将文件名修改为php.ini。然后修改配置文件内容
; extension_dir = "ext" ,删除前面的分号并修改为:extension_dir = "D:/web/php/ext"
;cgi.force_redirect = 1,删除前面的分号:cgi.force_redirect = 1
;cgi.fix_pathinfo=1,删除前面的分号:cgi.fix_pathinfo=1
;cgi.rfc2616_headers = 0,删除前面的分号:cgi.rfc2616_headers = 1

命令行下输入如下命令启动php,不报错表示启动成功。

4.检查nginx、php是否安装成功
在D:/web/nginx/html下新建一个phpinfo.php,加入如下内容后保存

修改nginx.conf 增加server,也就是虚拟服务器

重启nginx
打开浏览器访问http://localhost/phpinfo.php
能看到php信息表示安装成功。

4.安装mysql
这个步骤根其它环境无特殊不同,如果安装过可以直接使用,未安装的可以根据mysql安装向导下一步即可。

最终安装之后的目录结构

附:nginx和php的快速启动和关闭脚本
启动脚本

关闭脚本

遇到的问题:
如果遇到提示php不是有效的win32程序,是因为安装的微软运行时库不对2003需要使用vc9版本的php

分类: nginx 标签: , ,

人社部解决夫妻两地攻略

2016年10月3日 3 条评论

Step1,到北京市公安局人口管理处开动迁证明
指南上提示要两次到北京市公安局人口管理处,一次是开准予迁入证明,一次是开户口迁入通知。实际上只用去一次,办事大厅就把两个证明都给了。在去之前,可以打一下指南上的电话,看一下自己的批文是不是已经抄送到北京市公安局。(北京,北京市公安局人口管理处TEL:87680101 成寿寺路甲19号)
去北京市公安局人口管理处需要带的资料:
1、  人事部批文原件;2、  双方户口卡原件;3、  双方身份证原件;4、  结婚证原件;
从北京市公安局人口管理处拿到两张卡片:
1、  给外地派出所的准予迁入证明 (第二联);2、  给北京落户派出所的户口迁入通知(第三联);
Step2,办理商调函
配偶在京单位出具接收函。拿着身份证、调令去开商调函(北京,全国人才 64229303 和平里东街12号)需要持下列资料:
1、  人事部批文原件;2、  结婚证;3、  北京市公安局出具的准予迁入证明;
Step3,办理档案调出
拿着商调函到人才市场开具行政介绍信、工资转移介绍信、档案转递单、转正定级表(不确定)。
Step4:(北京,北京市公安局人口管理处)
拿着行政介绍信、工资转移介绍信、档案转递单,调令、户口迁移证再次到北京市公安局人口管理处换取准迁证的第三联。(这些需要在40天内办完)。
Step5:(北京,全国人才)
拿着行政介绍信、工资转移介绍信、档案转递单,调令、户口迁移证到人才中心存档案;
Step6,到外地派出所办理户口迁移证
需要提供材料如下:
1、  人事部批文原件;2、  准予迁入证明;3、  配偶户口卡;4、  配偶身份证;
Step7,落户北京,办理北京身份证
需要提供材料如下:
1、  北京市公安局出具的准予迁入证明;2、  从外地派出所拿到的户口迁移证;

分类: 杂谈 标签:

nginx + fastcgi + c/c++

2016年7月18日 1 条评论

使用php写后端程序的例子很多,用c/c++的比较少。

本文采用nginx,spawn,fastcgi++来构建一个基于cgi的web程序。
由于fastcgi++依赖于boost库,我们先来装boost库

Linux下编译boost

1.编译前的准备工作

2.下载安装包并解压

编译安装

测试boost库是否可以使用,boost编译完成后运行程序报错,

最开始以为是bzip2没装上,折腾了许久也没搞定,最后我发现boost的官方文档写着gcc4.4.7,而我本地的编译器是4.4.6,之后我把gcc升级到4.8重新编译通过。

redhat6.3升级gcc4.8.0编译安装方法:

1.下载源码并解压

2.下载编译所需的依赖项

3.建立编译输出目录
mkdir gcc-build-4.8.0

4.进入此目录,执行以下命令,生成makefile文件

5.执行以下命令进行编译,编译时间比较长

6.安装
sudo make install

安装完成后查看版本

重新执行boost的编译,编写一个例子测试是否成功

编译运行

spawn-fcgi安装

fastcgi安装

启动fastcgi程序

如果启动报错,可以加参数-n来看具体原因。

我的报错如下,因为升级了gcc4.8,没有升级libstdc++.so.6导致。

/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found错误的解决

没有3.4.15

连接到libstdc++.so.6新的库

再次启动fastcgi程序

程序会在前台运行
检查程序是否正常运行

配置nginx,增加

重新加载ngnx的配置

打开浏览器,访问http://192.168.18.11/utf8-helloworld.fcgi,你会看到。
English: Hello World
Russian: Привет мир
Greek: Γεια σας κόσμο
Chinese: 世界您好
Japanese: 今日は世界
Runic English?: ᚺᛖᛚᛟ ᚹᛟᛉᛚᛞ

参考
http://www.cnblogs.com/skynet/p/4173450.html
http://www.cnblogs.com/wanghetao/p/3934350.html
http://www.nongnu.org/fastcgipp/doc/2.1/index.html

分类: c++, nginx 标签:

防火墙断开数据库或者mq的连接造成的长时间重连等待

2016年6月8日 没有评论

在测试环境经常会遇到服务失去响应,需要假死15分钟左右才能继续处理业务,每天早上来都需要重启服务才行,直觉感觉是防火墙有问题,不同于生产网络,测试网络之间的防火墙每隔固定时间最长24小时就会断开无数据流量的连接,但是应用端以为连接还是好的,需要探查较长的时间来确认连接是否可用。同时也发现有人在遇到这方面的解释,比较详细,post一下供参考。
最近生产上发现一个问题,刚开始,应用连接数据库正常,如果长时间没有业务估计半小时以上,再发起业务时,发现应用重连不上数据库,一直挂在重连那里,如果重启应用又能很快连上数据库(数据库是Oracle)。后来经数据库专家的同学看了后,发现我们的生产是RAC的,而客户端配置了TAF,导致在发生会话切换的时候,可能原来的连接没有释放好,影响了重连。把Oracle客户端的TAF关掉,重连的问题解决了。但又出现了一个很奇怪的现象,就是今天要说的重点问题,如果长时间没业务的时候还是断,而且断了后执行SQL要15分钟左右应用才能返回,这将导致应用在15分钟内不能服务,应用返回的错误是 ORA-03113: end-of-file on communication channel从这个错误看,应该是Oracle客户端返回了连接断开的错误,但是为什么要15分钟后才返回这个错误呢?

机器的网络情况如下:

应用主机A ----> FW1(防火墙1) ---->FW2(防火墙2) ----> 数据库主机(OracleDB)

后来经网络专家的同学判断,有可能是防火墙设置了会话超时,如果长时间一个会话上没有数据防火墙就会删除

会话,同时网上也有人遇到类似的情况:

26142928_6I68

我们做了类似的尝试,放开防火墙的时间限制后,问题没再出现。但是还有几个疑问没有解决:

1.为什么防火墙删除会话后,主机要等15分钟?

2.防火墙删除会话后,会不会通知主机(给主机发RST)?

早上和同事讨论,猜测是由于防火墙删除了会话,但主机并不知道,有数据库操作的时候,由Oracle客户端发起TCP请求,但由于防火墙找不到会话,丢弃了这些包(目前是不是丢还不清楚),导致了TCP不停地超时重发。

查看TCP/IP详解第一卷的21章节21.2节,都超时重发有这样的描述:

26142928_3a2X

这里提到9分钟,不过这本书写得比较早,猜测linux有所不一样,不过原理差不了太多,google了一下,

好像找到了15分钟的说法, 参考资料[1]中提到:

TCP_RTO_MIN=(HZ/5)=0.2s
TCP_RTO_MAX=(120*HZ)=120s
linear_backoff_thresh = ilog2(120*5)=ilog2(0x258)=9
timeout:未超过linear_backoff_thresh=9的部分按TCP_RTO_MIN 2的指数倍增长,超过的部分按TCP_RTO_MAX线性增长
tcp_time_stamp:当前时钟时间
例如数据发送阶段,sysctl_tcp_retries2=9,则timeout=1023*TCP_RTO_MIN=204.6s;sysctl_tcp_retries2=11时,timeout=1023*TCP_RTO_MIN+2*TCP_RTO_MAX=448.6s
默认sysctl_tcp_retries2=15,timeout=1023*TCP_RTO_MIN+6*TCP_RTO_MAX=920.6s,约15分钟

是根据RTO及一定的算法算出来的(具体的算法,可以看参考资料[3])

简单说,就是如果系统配置重传次数小于9的话,就是指数增长时间,如果大于9的话,就是最大超时时间。

而linux默认是15,所以刚好是15分钟,查看我们主机的配置,确认是15:

[steven@kfjk2 ~]$ cat /proc/sys/net/ipv4/tcp_retries2
15

现在还有一个问题没弄清楚,就是防火墙删除会话后,是否会通知主机?现在看起来应该是不会的,至少在主机上是没收到防火墙的RST,由于两个防火墙的两个厂商不一样,也有可能是一个吃掉另外一个的包也说不定。假如删除会话后,在原来的会话上来有包上来,是重建会话呢?还是直接把包丢弃?还是发RST呢?从目前主机的现象来看,猜测是:

防火墙删除会话后,不会通知主机也就是不会给主机发RST,当有新包上来,找不到连接,但不是S包的时候,直接丢弃,

导致主机用完了重发次数后,自己发RST后给应用报断开连接。

不过。。。以上的东东都是根据现象来猜测的,最有效的办法是捉出tcpdump包来看,但由于是生产不敢乱动,也先这样吧!

仅以此记,为避免以后踩坑,同时开发人员也要关心网络部署,当时我并没有考虑中间有两个防火墙。

来源http://m.oschina.net/blog/318965

分类: oracle, 架构 标签:

一致性哈希算法的实现

2016年5月29日 1 条评论

一致性哈希算法能够减少增减节点带来的memcache缓存失效带来的冲击。

下面是一个简单的java版实现算法,其中的哈希值算法没有实现,用HashFunction作为一个接口来提供自定义的hash值函数,大多数情况下我们可以使用md5。

circle代表有一个有序整型map,表示要缓存的对象所对应hash值。
创建ConsistentHash对象时会同时创建虚拟节点。每个复制节点都是实用对象名和后缀结合的hash值。
缓存对象分布在每一个map中的节点上。

分类: 架构 标签:

mac生成core文件和生成位置

2016年5月24日 1 条评论

mac环境的配置方法和linux一样。

通过ulimit来设置是否生成core文件。

ulimit -c unlimited 生成core文件

ulimit -c 0 不生成core文件

core 文件存储位置 /core/core.pid

分类: iOS/Mac 标签:

enumeration value not handled in switch

2016年5月17日 没有评论

这是一个 warnning 错误,没有处理switch中的枚举值。

在switch中添加default 和 break; 可以解决这个问题。

分类: c++ 标签:

mac下面brew的权限问题

2016年5月2日 没有评论

想写一个爬虫去爬一些图片,发现python3的request封装的比较。遂决定要装一个python3。
mac下的神器就是brew,分分种完成各种软件包的安装。执行完之后报错了。
brew install python3
结果如下,从最后几行的输出判断是由于权限不足导致的。

brew遇到问题排错步骤是:

brew linkapps python3

分类: python 标签:

mac下c++单元测试覆盖率工具gcov

2016年5月1日 没有评论

gcov 是 GNU 的代码覆盖率检查工具。它利用编译时的 -fprofile-arcs -ftest-coverage 和链接时的 -lgcov 选项参数生成 .gcno 文件进而通过这些文件统计覆盖率。不过高版本的 mac 使用 clang 编译器,不支持 -lgcov 选项生成 .gcno 文件。为了解决这个问题,我们可以使用-coverage参数来生成 .gcno 文件。例如:

我的g++ --version信息如下
Apple LLVM version 7.3.0 (clang-703.0.29)
Target: x86_64-apple-darwin15.4.0
Thread model: posix
使用-lgcov会报错
ld: library not found for -lgcov

可以使用-coverage选项替换-lgcov

在C/C++中产生代码覆盖率的步骤包括如下几步:
一、设置编译参数
如下来设置Makefile中的编译参数以使之支持覆盖率产生:
ifeq ($(coverage), yes)
CXXFLAGS += -coverage
endif
这样,可以使用 make coverage=yes 来引入这些编译选项而不会影响到正常的编译,比如:
#make coverage=yes
这时候会产生.gcno文件。

二、运行测试程序
#./exe
运行测试程序,会针对所有cpp源代码产生相应的.gcda文件。

三、获取覆盖率数据
获取覆盖率数据的方法很多种,这里介绍两种,分别产生txt和html数据:
1、使用gcov获取文本形式的覆盖率数据
使用gcc自带的覆盖率结果产生工具gcov能产生文本格式(.gcov)的覆盖率结果。
#gcov xxx.cpp
2、使用lcov获取html形式的覆盖率数据
使用IBM的lcov来产生html结果数据,具体如下:
#lcov -c -d ./ -o app.info
#genhtml app.info -o cc_result

四、展示数据
将步骤三中产生的覆盖率数据文件放到Apached的htdocs目录下,就能通过浏览器来查看覆盖率结果了。

五、基本术语
1、行覆盖率(line coverage)
即源代码有效行数与被执行的代码行的比率。
2、分支覆盖率(branch coverage)
即有判定语句的地方都会出现2个分支,整个程序经过的分支与所有分支的比率是分支覆盖率。
3、增量覆盖率(incremental coverage)
即被执行的新增和修改的代码行数与新增和修改的代码总行数的比率。

gcov实际例子,通过运行gtest中的sample1.cc单元测试。

makefile文件的写法

编译程序

编译完成后直接执行gcov命令,会报未执行,需要先执行可执行文件

执行可执行文件

使用gcov查看sample1.cc文件的覆盖率

表示:sample1.cc一共有13行(可执行代码),全部被执行,测试覆盖率100%。
具体哪些代码被测还可以看sample1.cc.gcov文件:

-表示该行不可执行,数字1或其他表示该行被执行了多少次,#####表示代码没被执行。

分类: c++ 标签: