Apache反向代理。

作用,意义,Nginx反向代理配置 见 http://www.sgfblog.com/archives/363

1、将以下2行中的注释去掉

#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_http_module modules/mod_proxy_http.so

2、配置内容

1
2
3
4
5
6
7
8
9
10
<VirtualHost *:80>    
       ServerName test.sgfblog.com
       ProxyRequests Off  
  <Proxy *>  
       Order deny,allow  
       Allow from all  
   </Proxy>  
       ProxyPass / http://127.0.0.1:8080/ 
       ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

使用Nginx反向代理,多进程共享80端口

如果你需要不同的进程使用80端口(nginx与iis共同使用80)怎么办?
如果不想在你本地调试微信平台(微信非API要80端口,但是电信把80禁用了)怎么办?
如果你需要做均衡负载 怎么做?

名词解释:反向代理
总之就是你请求这个服务器,它负责帮你去请求别的服务器,把返回的结果再返回给你,在中间当传话筒。

nginx配置:

1
2
3
4
5
6
7
8
9
10
11
12
server { 
listen       80; 
#nginx绑定的的访问域名
server_name  test.sgfblog.com;   /
location / { 
#实际请求的地址
 proxy_pass http://sungfeng21.vicp.net:8088; 
 proxy_set_header   Host    $host; 
 proxy_set_header   X-Real-IP   $remote_addr; 
 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
 }
}

利用这个原理,同样都是80端口,可以把指定的站点转发到别的服务(端口)上,你的IIS换个别的端口对内网访问就OK啦~

php使用google authenticator动态密码认证

IMG_3028未命名-2

 

1、google authenticator和我们要干嘛?
不多说,总之就是一个开放给大家使用的第三方动态密码校验软件。原来  根据二维码或者自定义输入一串密钥,authenticator就会根据当前的时间戳和这个密钥算出一个动态密码,每30秒变化一次。这个计算是本地进行的,不需要依赖网络,算法也是公开的,所以你的后端也可以算一次 做校验。

2、代码:

以下用到的Token 和 qrcode2个类,下文章底部附件可以下载到。
校验动态密码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
< ?php 
 
include "Token.php"; 
//$key 是需要保存下来的密钥,每次需要基于这个进行认证
//$token 是需要校验的6位动态密码
//ALLOW_MFA_TIME 是允许用户手机时间和服务器时间的前后时间差,因为这个动态密码是基于时间生成的。时间差的原来其实很简单, 帮你生成前后这个时间的所有token 跟你输入的有一个是一样的 就算OK。
 
 
$tr = Token::verify_key( $key, $token, ALLOW_MFA_TIME , Token::get_timestamp() );
 
 if($tr!==true)
 {
 echo "ok";
 }
else
{
 echo "failed";
}

生成密钥和二维码

1、密钥不要自己随便去生成几个字符,不是所有字符都能用的Token中有写好的静态方法可以生成

2、二维码的生成方式很多,可以依赖第3方的或者自己生成,甚至引入一张外部图片参数中传入内容也成。   二维码的内容在以下代码注释中介绍吧:

继续阅读 »

使用VIM做开发

之前习惯了IDE开发环境,但是如果没有IDE 那么只能用NOTEPAD++了吗? 如果到了linux下你怎么办呢? 其实不管在windows下还是在linux都是可以使用vim做开发的。
vim功能强大,效率高。

1、安装gvim http://gvim.en.softonic.com/ 下载安装包
2、taglist 这是一个类似于notpad++里tagsview的插件,显示出所有标签(函数)的插件
安装这个插件前 需要下载ctags56,任意找位置解压,按然后下载 taglist45.zip的压缩包,将里面的文件分别放置在gvim安装目录下的doc和plugin目录下
下载:taglist_45 ec56w32
3、启动配置

1
2
3
4
5
6
7
8
9
10
11
let Tlist_Ctags_Cmd = 'd:/ctags56/ctags.exe'    
let Tlist_Auto_Open = 1
let Tlist_Exit_OnlyWindow = 1
let tlist_actionscript_settings = 'actionscript;c:class;f:method;p:property;v:variable'
 
set encoding=utf-8
set fileencoding=utf-8
 
syntax enable
syntax on 
colorscheme desert

上面第1段是配置taglist插件的,第2段是设置编码,第3段是开启高亮和选择配色方案。

使用:Tlist 指令就能出现标签列表了。以下就是效果哦,还能代码自动补全。

简单再介绍几个命令
继续阅读 »

bat文件批量删除svn目录

效果类似余svn export

继续阅读 »

nginx – 优化冗余路径配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
        listen       80;
        server_name  phpmyadmin.lezi.com;
        location / {
            root   /var/www/html/phpMyAdmin;
            index  index.php;
        }
            location ~ \.php$ {
                        root  /var/www/html/phpMyAdmin;
                        fastcgi_pass www.sgfblog.com:9000;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME /var/www/html/phpMyAdmin$fastcgi_script_name;
                        fastcgi_param  PATH_INFO $request_uri;
                        include fastcgi_params;
           }
   }

上面配置中可以看出路径非常冗余,如过修改路径需要改三个地方,
其实可以set一个变量,将路径写入变量,这样就下次修改的时候就只需要修改1个变量就好了。如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
        listen       80;
        server_name  phpmyadmin.lezi.com;
        set $root '/var/www/html/phpMyAdmin';
        location / {
            root   $root;
            index  index.php;
        }
            location ~ \.php$ {
                        root  $root;
                        fastcgi_pass www.sgfblog.com:9000;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME $root$fastcgi_script_name;
                        fastcgi_param  PATH_INFO $request_uri;
                        include fastcgi_params;
           }
   }

php 任意进制互转类

之前不知道php自带有base_convert可以实现任意进制之间的转换,自己写了一个。。。。
继续阅读 »

php常用技巧

1、写程序的时候会用到这种情况,比如对一个数字进行四舍五入取整。很多人会这样写:

1
2
3
4
input a
if a - int(a) >= 0.5 then
a =  a +1
end if

其实这个判断语句可以使用一个很简单的表达式来写

a =  fix(a + sgn(a) *0.5)

用php写作:

$a =  intval($a +  0.5 *  ($a >0 ? 1 : -1)  );

分析:
假设 a为 4.4 那么 a+0.5 = 4.9 intval()以后为4 ,假设a为4.6 a+0.5=5.1 那么intval()以后则为5,因此实现了四舍五入。
正数+0.5 , 负数则-0.5。

如果说四舍五入保留2位小数也同理。

$a = intval(a * 100 + 0.5 * ($a >0 ? 1 : -1) ) /100。 

2、 求如果a-b的值,如果小于0则取0,可以写城

$result =  max(0,$a-$b);

3、导入数据时,可以选择采用csv格式 php对getcsv处理起来非常方便。

4、在替换字符串方面 str_replace()比正则表达式更高效。实际上,根据Making the Web所说,str_replace()比像ereg_replace()和 preg_replace()这样的正则表达式效率要高61%。

5、if($a==true) if($a)

6、用isset判断变量和元素是否存在速度较高

7、尽量使用三目运算

8、适当写if行语句。适当在function内使用return语句 减少分支

9、使用memcache mogodb等降低程序与数据库负担

10、临时数据可以使用sqllite记录

Nginx之 – 基于ip和域名的虚拟主机

虚拟主机可以基于ip和域名配置略有不通,一起来看下。

基于域名的虚拟主机:

1
2
3
4
5
6
7
8
9
10
11
12
http{
  server{
      listen 80;
      server_name www.sgfblog.com sgfblog.com; #第1个虚拟主机的域名列表,空格隔开
      location /{ ... }
  }
  server{
      listen 80;
      server_name www.apisky.net; #第2个虚拟主机的域名列表
      location /{ ... }
  }
}

基于ip的虚拟主机:

这类配置常用于本地开发,众所周知A类ip地址为1-126,而B类则为128-191。其中127不是凭空消失了,而是用于回文地址。也就是说127的ip地址会指向本机。

为了方便本地有多个站点时可以配置www.sgfblog.com 127.0.0.2 127.0.0.3为不同站点。配置如下:
继续阅读 »

nginx之 – 正向代理

在nginx配置中加入一段server配置。就可以实现整正向代理了。其中resolver 代表的是设置代理的dns服务器。这里写的是google的公用dns服务器。

1
2
3
4
5
6
7
server{
       listen 8080;
       location /{
          resolver 8.8.8.8;
          proxy_pass $scheme://$host$request_uri;
       }
    }

注意:$scheme://$host$request_uri; 这个为转发到用户请求的地址,这样写可以支持多种协议。
网上的参考例子多数写的是 http://$host$request_uri; 这样的话将不支持https等的代理。

使用方法以ie为例:
工具→Internet选项→连接→局域网设置→为Lan使用代理服务器→ ip地址填写nginx所在的ip地址,端口号既为上面linsten的端口号,