在windows中安装nginx服务

有的服务器难免使用windows操作系统,将nginx安装为windows系统服务后可以随系统自动启动,比较方便。由于nginx本身不提供安装服务的功能,因此需要借助于第三方工具实现,这里介绍其中的一种方式,通过winsw来安装系统服务。

在 https://github.com/kohsuke/winsw 这里可以找到winsw的下载链接,下载后可以放到任意地方,建议就放在和nginx相同的目录。winsw的运行需要DotNet3.5支持,高版本的windows一般不再自带DotNet3.5版本,运行winsw时会弹出对话框自动联网安装,如果网络比较慢,而电脑上刚好有windows的安装盘,可以将windows的安装盘载入后,用离线的方式安装DotNet3.5:

用管理员身份运行cmd窗口,输入以下命令:

Dism.exe /online /enable-feature /featurename:NetFX3 /All /Source:I:\sources\sxs /LimitAccess

其中红色标记的I需要替换成windows安装盘的实际盘符。很快DotNet3.5就离线安装好了。

在winsw.exe所在目录新建一个文件,命名为winsw.xml,内容如下:

<configuration>
  <id>nginx</id>
  <name>nginx</name>
  <description>A Http Server</description>

  <executable>D:\nginx-1.8.0\nginx.exe</executable>
  <arguments></arguments>
</configuration>

其中一些参数可以根据自己情况调整,保存后继续以管理员身份在cmd中输入如下命令:

winsw.exe install

执行成功后在系统服务中就可以看到nginx的服务出现了。

域名切换后wordpress需要做的相应改动

以前买了一个索马里的域名,88元/年,价格还算厚道,忽然so域名的注册局变了,移交给了海盗当局,以后续费就要350一年了,考虑了一下,决定还是重新申请一个cn的域名用用。虽然网站几乎还没什么流量,但是毕竟搜索引擎已经有收录了,因此还是得做一些域名切换的操作。

WordPress:

登陆管理后台,在设置中,将WordPress地址设置为新的域名。

百度sitemap插件中,将系统安装的URL路径重新校验为新的域名。

百度站长工具:

在百度站长工具中新增新的域名,否则百度sitemap插件会停止提交站内索引。

百度统计:

如果用了百度统计,需要在百度统计中新增站点,并在wordpress中更新站点统计JS代码。

Nginx:

1、将以前配置中的server_name修改为新的域名:

server_name  wujc.cn www.wujc.cn;

2、增加一个server节点,用来配置老的域名并重定向到新的域名:

server {
    listen       80;
    server_name  wjc.so www.wjc.so;

    location / {
        rewrite ^/(.*) http://wujc.cn/$1 permanent;
    }
}

重新加载nginx即可,至此所有搜索引擎中老域名过来的请求都会被重新定向到新域名。传说聪明的搜索引擎检测到后会逐渐自动将老的域名PR值切换到新的域名去,不过没有验证过,但是Google很快会自动收录新域名的内容,百度不会很快主动收录。

Nginx根据Http头字段来分发请求

有两套客户端,共用了同一个接口服务,通过Http方式交互,现在需要将两套客户端对应的接口服务分离。由于请求的uri完全一致,调用的接口也完全一致,只有Http头里面有一个字段,用来区分是来自哪个客户端的请求。于是考虑根据这个Http头字段来进行请求分发,不同的客户端对应到不同的服务端。

写了个简单的配置示例(nginx.conf),证实该方案是可行的:

location / {
        	if ($http_t = "163"){
        		proxy_pass   http://163.com;
        	}
        	if ($http_t = "baidu"){
        		proxy_pass   http://baidu.com;
        	}
        	
            root   html;
            index  index.html index.htm;
        }

其中$http_为nginx配置文件中获取Http头字段的默认前缀,例如Http头中有个字段为t,那么$http_t就为该字段对应的值。当该值为163的时候,直接跳转到163网站,当该值为baidu的时候,直接跳转到百度网站。

处理完该事情后,对Http JSON接口协议的制定也有了一些新的认识,对于全局性的字段,建议放到Http头中进行传递,因为不需要解析包体就可以对该请求做一些简单分析和处理。对于接口相关性的字段,可以放在JSON包体中进行传递。