nginx在centos部署

nginx作一个web服务器
一个负载均衡的服务器
做邮件代理服务器 用c++写的 性能非常好的

一.nginx安装与简单使用
1.下载nginx:
tar.gz文件 http://nginx.org/
解压到centos
2.安装nginx:
./configure --prefix=/usr/local/nginx

安装时可能错误提示:
./configure: error: the HTTP rewrite module requires the PCRE library.

安装pcre-devel与openssl-devel解决问题
yum -y install pcre-devel openssl openssl-devel
make
make install

3.启动nginx:
./sbin/nginx
4.查看nginx
ps aux|grep nginx

如果删除kill -9 1635

5.停止nginx:
./sbin/nginx -s stop


nginx模块从功能上划分三类:
handlers 处理器模块
proxies 代理类 upstream


Nginx模块主要有4种角色:

    (1) core(核心模块):构建nginx基础服务、管理其他模块。
    (2) handlers(处理模块): 用于处理HTTP请求,然后产生输出。
    (3) filters(过滤模块): 过滤handler产生的输出。
    (4) load-balancers(负载均衡模块):当有多于一台的后端备选服务器时,选择一台转发HTTP请求。
模块是如何被调用的?
当服务器启动,每个handlers(处理模块)都有机会映射到配置文件中定义的特定位置(location);
如果有多个handlers(处理模块)映射到特定位置时,只有一个会“赢”(说明配置文件有冲突项,应该避免发生)。
如果handlers(处理模块)把请求反向代理到后端的服务器,就变成另外一类的模块:load-balancers(负载均衡模块)。
负载均衡模块的配置中有一组后端服务器,当一个HTTP请求过来时,它决定哪台服务器应当获得这个请求。
Nginx的负载均衡模块采用两种方法:
轮转法,它处理请求就像纸牌游戏一样从头到尾分发;
IP哈希法,在众多请求的情况下,它确保来自同一个IP的请求会分发到相同的后端服务器。
如果handlers(处理模块)没有产生错误,filters(过滤模块)将被调用。
多个filters(过滤模块)能映射到每个位置,所以(比如)每个请求都可以被压缩成块。它们的执行顺序在编译时决定。
filters(过滤模块)是经典的“接力链表(CHAIN OF RESPONSIBILITY)”模型:一个filters(过滤模块)被调用,完成其工作,然后调用下一个filters(过滤模块),直到最后一个filters(过滤模块)。Nginx完成这个回复。
过滤模块链的特别之处在于,

每个filters(过滤模块)不会等上一个filters(过滤模块)全部完成;
它能把前一个过滤模块的输出作为其处理内容;有点像Unix中的流水线。
过滤模块能以buffer(缓冲区)为单位进行操作,这些buffer一般都是一页(4K)大小,当然你也可以在nginx.conf文件中进行配置。这意味着,比如,模块可以压缩来自后端服务器的回复,然后像流一样的到达客户端,直到整个回复发送完成。
总之,过滤模块链以流水线的方式高效率地向客户端发送响应信息。
nginx模块处理流程
客户端发送HTTP请求 –> Nginx基于配置文件中的位置选择一个合适的处理模块 ->(如果有)负载均衡模块选择一台后端服务器 –> 处理模块进行处理并把输出缓冲放到第一个过滤模块上 –> 第一个过滤模块处理后输出给第二个过滤模块 –> 然后第二个过滤模块又到第三个 –> 依此类推 –> 最后把回复发给客户端。  

epoll异步非阻塞

同步:调用时,在没有得到结果之前不会返回,一旦调用之后就得到返回值。
异步:调用在发生之后,立马得到返回,返回没有结果。
同步导致了阻塞
异步可以让服务处于非阻塞状态

二.反向代理具体实现
1.主服务ip在网址执行后,自动执行 主服务ip:8080
[root@centos64 conf]# vi conf/nginx.conf 增加
server{
	location/{
		proxy_pass http://127.0.0.1:8080;
		root html;
		index index.html index.htm;
}
//重启nginx
[root@centos64 nginx]# ./sbin/nginx -s reload


2.一个主服务里配置两个子服务,子服务负载均衡。
主服务ip在网址执行后,以下两个链接会间隔的加载出现。
upstream demo {
	server 127.0.0.1:8080;
	server 192.168.72.1:8080;
}
server{
	location/{
		proxy_pass http://demo;
		root html;
		index index.html index.htm;
}


tomcat初始画面 tomcat7/webapps/root/index.html


3.动静分离:
location ~ .*\.(jpg|png|gif){ //正则匹配
	root /user/local/images; //此文件下放入静态图片或静态文件1.png
}
//重启nginx
[root@centos64 nginx]# ./sbin/nginx -s reload

输入 主服务ip/1.png


4.一台服务器连接外网,两个域名都连接此服务器。
当两个域名绑定同一个主服务ip后,一个域名对应一个从服务进行访问。
upstream a {
	server 192.168.72.1:8080;
}
upstream b {
	server 127.0.0.1:8080;
}
server {
	listen 80;
	server_name www.a.com;
	access_log logs/a.access.log;
	
	location /{
		proxy_pass http://a;
		index index.html;
		root html;
	}
}
server {
	listen 80;
	server_name www.b.com;
	access_log logs/b.access.log;
	
	location /{
		proxy_pass http://b;
		index index.html;
		root html;
	}
}

C:\Windows\System32\drivers\etc\hosts 添加域名
192.168.92.129 www.a.com
192.168.92.129 www.b.com

5.PC和手机分离

同一个域名,显示不同服务样式
要想让网站适配PC和手机设备,首先要能做出准确的判断。
HTTP请求的Header中的User-Agent可以区分客户端的浏览器类型,
可以通过User-Agent来判断客户端的设备。

//声明变量
set $mobile_rewrite do_not_perform;  

//判断访问者设备类型
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino") {  
  set $mobile_rewrite perform;  
}  
//判断访问者设备类型
if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {  
  set $mobile_rewrite perform;  
}  

if ($mobile_rewrite = perform) {  
  # 手机  
}  
//以上写在server里面
location / {  
    proxy_pass http://127.0.0.1:8080;  # 电脑版  
    if ($mobile_rewrite = perform) {  
        proxy_pass http://192.168.72.1:8080;  # 手机版  
    }  
}  





结合源码看nginx-1.4.0之nginx模块组织结构详解
http://www.cnblogs.com/didiaoxiong/p/3209767.html

猜你喜欢

转载自572327713.iteye.com/blog/2355420