www.nginx.cnsitemap

存档

‘nginx’ 分类的存档

nginx开启https

2017年2月15日 没有评论

开启https配置

#下面是http跳转至https

分类: nginx 标签:

nginx解决跨域

2017年1月22日 3 条评论

什么是跨域?

使用js获取数据时,涉及到的两个url只要协议、域名、端口有任何一个不同,都被当作是不同的域,相互访问就会有跨域问题。
例如客户端的域名是www.redis.com.cn,而请求的域名是www.264.cn
如果直接使用ajax访问,会有以下错误
XMLHttpRequest cannot load http://www.264.cn/server.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://www.redis.com.cn' is therefore not allowed access.

如何解决跨域?

在服务器页面的Response header中加入如下内容,可以实现POST跨域。
// 指定允许其他域名访问
header('Access-Control-Allow-Origin:*');
// 响应类型
header('Access-Control-Allow-Methods:POST');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with,content-type');

Access-Control-Allow-Origin:* 表示允许任何域名跨域访问
如果需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:*改为Access-Control-Allow-Origin:允许的域名
例如:header('Access-Control-Allow-Origin:http://www.redis.com.cn');

 

1.nginx配置文件增加响应头

在服务器端的nginx.conf中配置增加配置

这样就可以实现GET,POST,OPTIONS的跨域请求的支持

2.修改php代码加入响应头

例如,server.php 路径:http://www.264.cn/server.php

3.修改客端的nginx配置,利用反向代理来实现

例如,www.redis.com.cn/html/request.html 想请求www.264.cn/api/msg?method=1&para=2;

变成访问本地域名地址

通过nginx中增加location反向代理到服务器端

 

 

分类: nginx 标签:

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 标签: , ,

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 标签:

nginx 实现 ajax 跨域请求

2016年1月24日 1 条评论

AJAX从一个域请求另一个域会有跨域的问题。那么如何在nginx上实现ajax跨域请求呢?要在nginx上启用跨域请求,需要添加add_header Access-Control*指令。如下所示:

释如下:

第一条指令:授权从other.subdomain.com的请求

第二条指令:当该标志为真时,响应于该请求是否可以被暴露

第三天指令:指定请求的方法,可以是GET,POST等

如果需要允许来自任何域的访问,可以这样配置:

重启nginx

ajax跨域请求测试

成功时,响应头是如下所示:

http://blog.hackroad.com/operations-engineer/linux_server/13011.html

分类: nginx 标签: ,

nginx rewrite 实现伪静态的自动补全

2015年8月21日 2 条评论

nginx+php 使用的时候经常需要伪静态,一般大家都手动设置。那有没有办法让 nginx 自动补全路径呢?
这两天折腾很久,才实现了这样一个功能:
请求 /a/b/c
若文件不存在,查找 /a/b/index.php,/c 作为 PATH_INFO;
若文件不存在,查找 /a/index.php,/b/c 作为 PATH_INFO;
若文件不存在,查找 /index.php,/a/b/c 作为 PATH_INFO;
若文件不存在,返回 404.

虽然这种损耗性能的行为不适合部署,但在本机调试的时候还是能够带来方便的 🙂

server 端应有如下代码,其他部分使用自己的配置:

index index.php index.html index.htm;

感谢来自 三天 tridays 的投稿

分类: nginx 标签:

NGINX如何实现高性能和可扩展性

2015年6月28日 没有评论

Owen Garrett是Nginx公司的产品总监,他在Nginx的官方博客上发表了一篇博文,说明了是哪些设计决策使得NGINX产品具备一流的性能和扩展能力。

NGINX的整体架构的特点是由一组进程协同工作

主进程:负责执行特权操作,如阅读配置文件、绑定套接字、创建/通知协调(Signalling)子进程。
工作进程:负责接收和处理连接请求,读取和写入磁盘,并与上游服务器通信。当NGINX处于活跃状态时,只有工作进程是忙碌的。
缓存加载器进程:负责将磁盘高速缓存加载到内存中。这个进程在启动时运行后随即退出。
缓存管理器进程:负责整理磁盘缓存的数据保证其不越界。这个进程会间歇性运行。
阅读全文...

分类: nginx 标签:

nginx使用线程池提升9倍性能

2015年6月22日 9 条评论

众所周知nginx使用异步,事件驱动方法处理连接。这意味着nginx使用一个worker进程处理多个连接和请求,而不是每一个请求有一个专门的进程或着线程处理(像传统架构的服务器那样,例如apache)。为了实现这个目的,nginx使用非阻塞模式的socket和高效的方法epoll和kqueue。

因为高负荷进程的数量少且相对不变(通常1个cpu核心配1个进程),它内存消耗少,cpu时间没有浪费在任务切换上。这种处理请求的方式的优势也因为nginx而被大家所熟知。nginx能够成功处理数百万并发请求同时扩展性非常好。
Traditional-Server-and-NGINX-Worker.gif
阅读全文...

分类: nginx 标签: ,

nginx与tomcat多实例搭建

2015年3月28日 没有评论

nginx和tomcat结合也是一个常用的组合,看到一个好的文章,介绍nginx做为方向代理,后端多个tomcat。
实现:一个nginx实例和多个tomcat实例,每个tomcat实例承载唯一的项目,tomcat实例在项目启动时自动启动
阅读全文...

分类: nginx 标签: