nginx 这个轻量级、高性能的 web server 主要可以干两件事情:

  〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持);
  〉另外一个功能就是作为反向代理服务器实现负载均衡

http://www.netcraft.com/
解决 c10k
connection 10000
http://blog.csdn.net/jysg9/article/details/7901321

阻塞模型
(只能一个用户,其他用户等待)
-----------------------------------------------------------------------------
多进程模型
fork--->专子进程--->专用户
(时间片,内存资源,大量进程切换(内核切换)额外内核时间,无助于用户响应)

非DMA机制
用户请求(HTML)----->进程(阻塞,不可中断sleep, WAIT)---->内核(取)------>磁盘文件(HTML)--->
到内核空间内存(buffer cache)----->copy to 进程空间内存

磁盘块(1K,2K,4K)(内核要管理)----------->page frame 4k(内核管理)------>用户空间

DMA机制,直接内存防问

用户进程请求 ---->(CPU给内核内存地址交给->DMA)---->磁盘文件---->DMA加载内核空间空间内存完成--CPU中断(中断当前进程)-->一次拷贝到用户空间内存中
这样CPU可以处理网卡请求

缺陷:每个进程的地址空间是重复数据,内存使用效益低
-----------------------------------------------------------------------
一个进程多线程模型:
thread
linux轻量级进程 :lwp
linux 技持多少种类型的线程库?如何切换切换线程库

线程并行执行流
code----BSS(全部变量,未初始化变量)--- HEAP(文件)----动态内存区---STACK(局部变量)
解决每个进程的地址空间是重复数据,共享数据,文件,内存需求小了许了(相对进程)

每个线程响应一个请求:
线程依然切换,但是轻量级

进程切换,保存现场,恢复现场(一级数据缓存,一级指令缓存据,二级数据缓存,CPU寄存器 需要恢复)
线程间只需要CPU寄存器切换

线程分配到多核CPU的每个CPU中

http://www.cnblogs.com/EthanCai/p/3705834.html

CPU忙等:时间片内,每隔一段时间看看,自旋锁
CPU闲等: 马上切换掉,不会占全部时间片
快速切换时,会导致线程抖动

---------------------------------------------------------------------------
多程程多线程模型

开机时,留一个CPU核,给系统,其他CPU核进程绑定到第个进程,进程这样需要切换
(多进程下)select (1024),每当内核准备好了一个IO,内核进行扫描文件描述符,设置,通 知用户进程
-------------------------------------------------------------------------------
多线程:N个请求
一个线程响应多个请求

一个线程有多个IO(磁盘IO与网络IO)

磁盘IO用AIO,不能阻塞线程,

多路IO机制,IO复用 (SELECT POLL)

基于事件驱动 epoll(linux) /dev/poll(solaris) kqueue(freebsd)

http://www.cnblogs.com/Anker/archive/2013/08/14/3258674.html

aio 不阻塞异步IO

NGINX:AIO,MMAP EVENT-DRIVEN,具有前端反向代理

httpd:
mpm
prefork:一个进程响应一个请求,1024
worker:一个线程响应一个请求,多进程,一个进程生成多个线程
event:基于事件驱动
支持反向代理

LAMP:
--->NGINX(反向代理)---->缓存服务器 ----> [apache(web server)(php模块)] ---->mysqlproxy---->mysql主从
| | ----->缓存服务器----> [web server (动态内容,php页面)]
| |
| NGINX(服务器静态 CSS JPG)
|
HTTP附件服务器

IO模型:
同步阻塞:
异步阻塞: IO复用
异步阻塞:event-driven
异步非阻塞:AIO

NGINX:
mmap
event-driver :一个进程响应多个请求:单线程进程
aio

lemp:

-------->nginx(输入与输出缓存区)----->fastcgi(php服务器):同步

--------nginx(输入与输出缓存区)------暂存请求NGINX------> PHP服务器 :异步

enginx(fastcgi)+php-fpm

nginx转发:

location ~*\>php${
fastcgi_pass 127.0.0.1:9000

}

nginx配制文件
main

events{
事件驱动相关内容
}

location /forum/{
directive <parameters>;
proxy_pass http://172.16.100.11/bbs/;
URL的访问属性
}

http://www.magedu.com/forum/----->http://172.16.100.11:8080/bbs/;

httpd{
http相关的配置
}

server
{
虚拟主机
listen 80;
server_name www.baidu.com
location /{
后端服务器:
}}

模式:
location ~* ^/forum{
proxy_pass http://172.16.100.11:8080 :不加(FIRUM)
}
http://www.magedu.com/forum/----->http://172.16.100.11:8080/forum/;(forum,在服务器本地)

eg:
yum insqll httpd

cd /var/www/html/index.html
mv /var/www/html/index.html /var/www/html/bbs.html

location /forum/{

proxy_pass http://172.16.100.6/bbs/;

}
--------------------------------------------------------------
location ~* ^/forum/{

proxy_pass http://172.16.100.6;

}

http://172.16.100.6/forum
----------------------------------------

proxy_set_header X-Real-IP

$remote_addr
$remote_user
$request_filename

$request_method HTTP请求方法
GET POST HEAD PUT TRACE OPTIONS CONNECTION DELETE

http://172.16.100.6/bbs/
$request_uri /bbs/
$scheme http https
$server_name 代理服务器名

日志反映真实客户端IP
location ~* ^/forum/{

proxy_pass http://172.16.100.6;
proxy_set_header X-Real-IP $remote_addr

}

vim /etc/httpd/conf/httpd.conf

logformat 加入 %(X-Real-IP)i

---------------------------------------------------

整站转换
location /{

proxy_pass http://172.16.100.6/;
proxy_set_header X-Real-IP $remote_addr

}
----------------------------------------------------
/var/www/html/index.html

upstream :负载均衡

upstream webservs{
ip_hash;
server 172.16.100.6 weight=1;
server 172.16.100.7 weight=1 max_fails=2 fail_timeout=2;
server 127.0.0.1:8080 backup; ////当 上面的SERVER 全DOWN 掉 重定向本机 //ip_hash不能使用 这行
}

server{
listen 80;
server_name localhost;
location / {
proxy_pass http://websrvs/;
proxy_set_header X-Real-IP $remote_addr;

}}
----------------------------------------------------------------------------------

server{
listen 8080;
server_name localhost;
//定义本机错误页面
root /web/errorpages; //本机目录
index index.html;

location / {
proxy_pass http://websrvs/;
proxy_set_header X-Real-IP $remote_addr;

}}
-------------------------------------------------------------------
nginx: 算法

round-robin
ip_hash
least_conn

----------------------------------------------------------------------

netstat -ant |awk '/:80\>/{S[$NF]++}END{for(A in S){print A,S[A]}}'

----------------------------
upstream webservs{
#ip_hash;
server 172.16.100.6 weight=1;
server 172.16.100.7 weight=1 max_fails=2 fail_timeout=2;
#server 127.0.0.1:8080 backup; ////当 上面的SERVER 全DOWN 掉 重定向本机 //ip_hash不能使用 这行

}
缓存目录级别:eg /nginx/cache/firest/2/b3/bc909.......
proxy_cache_path /nginx/cache/first levels=1:2 keys_zone=first:20m max_size=1g

server{
listen 80;
server_name localhost;
add_header X-Via $server_addr; //谁提供的缓存IP
add_header X-Cache $upstream_cache_status from $server_addr"; //缓存是否命中 HIT MISS

location / {
proxy_pass http://websrvs/;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache first;
proxy_cache_valid 200 10m;

}}
mkdir /niinx/cache/first

cache_manager:lru

-------------------------------------------------------------------------
另外三种缓存:
open_log_cache:将日志写到缓存,然后再写到磁盘
open_file_cache:文本无数据缓存,提供命中
fastcgi_cache:

NGINX 的limit 限制也基于共享内存实现

nginx:gzip以压缩向客户响应
gzip on

-------------------------------

nginx 区别应用

upstream phpservs{
server
server
}

upstream imgsrvs{

server
server

}
upstream staticfilesrvs{
server
server
}

location / {
root /web/htdocs;
index index.php index.html;
}

localhost ~* \.php${

fastcgi_pass http://phpservs;

}

location ~* "\.(jpg|jpeg|gif|png)$"{

proxy_pass http://imgsrvs;
}

-------------------------
nginx 区别应用

rewite:url重写模块
if (condition){
}

locaction /images/{
rewrite http://172.16.100.19/images/
}
支持正测表达式
location /{
root html;
index index.html;
rewrite "^/bbs/(.*)" http://172.16.100.19/forum/$1;
}

测试:双目测试:
~ ,!~
= ,!=
~*,!~*

if ($request_method="POST"){

}
if ($request_uri ~* "/forum"){

}

单目测试:

referer:

location /photos/{
valid_referers none /blocked www.baidu.com
if($invalid_referer){
return 430;
}
}
----------------------------------------------------
http://tengine.taobao.org/book/index.html Nginx开发从入门到精通

last:本次与完成之后,重启一下轮检查
location / {
root html
index index.html
rewrite "^/bbs/(.*)images/(.*) \.jpg$ http://www.magedu.com/bbs/$2/images/$1.jpg last

http://www.magedu.com/bbs/a/image/b.jpg --->http://www.magedu.com/bbs/b/image/a.jpg

循环问题
-------------------------------------------------------

break:本次重写完成之后,直接执行后续操作;

webdev:
/etc/httpd/conf/httpd.conf

Directory
dav on ----->PUT

setfacl -m u:apache:rwx /var/www/html/
curl -T /etc/issue http://172.16.100.7

读写分离:
location /{
proxy_pass http://172.16.100.6/;
if($request_method = "PUT"){
proxy_pass http://172.16.100.7;
}
}
curl http://172.16.100.106
curl -T /etc/fstab http://172.16.100.106

主 RSYNC+INOTIFY SERVER
读写分离

------------------------------------------------------------------------

nginx 笔记的更多相关文章

  1. CentOS 6.4 快速安装Nginx笔记

    CentOS 6.4 快速安装Nginx笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/9860 ...

  2. nginx笔记5-双机热备原理

    1动静分离演示: 将笔记3的Demo改造一下,如图所示: 改造完成后,其实就是在网页上显示一张图片 现在启动Tomcat运行起来,如图: 可以看到图片的请求是请求Tomcat下的图片. 现在,通过把静 ...

  3. nginx笔记4-负载均衡带来的问题以及解决办法

    接着笔记3,将笔记三的改造一下,现在分别启动两个Tomcat,在页面获取session.如图所示: tomcat2的session: tomcat1的session: 根据上图发现,每个tomcat取 ...

  4. nginx笔记3-负载均衡算法

    1.nginx测试:先从官网下载nginx 官网网址为:http://nginx.org/  然后找到stable version的版本下载,因为这版本是最稳定的,不要去下载最新,因为不稳定,如下图: ...

  5. nginx笔记2-负载均衡

    负载均衡实现方式分为两类:1硬件类,2软件类. 硬件类:F5(这是一种硬件,并不是刷新啊,不要误解)  优点:非常快,可靠性高,并发量大.缺点:太贵,成本高,不方便,最致命的是不能将动态请求和静态请求 ...

  6. Nginx笔记02-nginx常用参数配置说明

    nginx的主配置文件是nginx.conf,这里主要针对这个文件进行说明 1.主配置文件nginx.conf   2.nginx配置文件的结构 从上面的配置文件中我们可以总结出nginx配置文件的基 ...

  7. 同事不太懂负载均衡,我直接把阿里架构师的这份Nginx笔记甩给他

    Nginx功能强大,架构复杂,学习.维护和开发的门槛较高. 本份笔记深入最新的Nginx源码,详细剖析了模块体系.动态插件.功能框架.进程模型.事件驱动.线程池.TCP/UDP/HTTP 处理等Ngi ...

  8. 【网络】安装Nginx笔记

    目录 前言 安装前先更新下 安装依赖库 下载Nginx Nginx编译配置 编译&安装&验证nginx Nginx服务配置 配置SSL 参考 前言 up安装nginx主要是为了在服务器 ...

  9. [Nginx笔记]关于线上环境CLOSE_WAIT和TIME_WAIT过高

    运维的同学和Team里面的一个同学分别遇到过Nginx在线上环境使用中会遇到TIME_WAIT过高或者CLOSE_WAIT过高的状态 先从原因分析一下为什么,问题就迎刃而解了. 首先是TIME_WAI ...

  10. Nginx笔记

    基础篇 关于Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.最早由俄罗斯的程序设计师Igor Sysoev所开发,并在一个BSD-like ...

随机推荐

  1. WorkerScript QML Type

    官方描述:在一个Qt Quick应用程序中可以使用线程了. Import Statement:     import QtQuick .属性:source : url信号:message(jsobje ...

  2. Encoding 类别

    Encoding 類別 .NET Framework 4.5   表示字元編碼方式. 繼承階層架構 System.Object   System.Text.Encoding    System.Tex ...

  3. Python/Keras如何将给定的数据集打乱

    给定数据集data,数据集对应的标签label index = [i for i in range(len(data))] random.shuffle(index) data = data[inde ...

  4. jQuery EasyUI parser 的使用场景

    转自原文地址:http://www.easyui.info/archives/216.html parser,故名意思,就是解析器的意思,别看他只有那么几行代码,jQuery Easyui 能够根据c ...

  5. linux解压命令

    .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gun ...

  6. Array.asList()注意

    api: public static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表.(对返回列表的更改会“直接写”到数组.)此方 ...

  7. linux No manual entry for

    我的博客:www.while0.com 原来除了安装man,还要安装man-pages. yum install man -y yum install man-pages -y

  8. poj2886

    反素数范围不大,可以直接打表得然后就是模拟移动的过程我们可以用线段树优化,具体明天再说吧 ..] ,,,,,,,,,,,,,,                                  ,,, ...

  9. Linux Shell编程(11)——退出和退出状态

    exit命令一般用于结束一个脚本,就像C语言的exit一样.它也能返回一个值给父进程.每一个命令都能返回一个退出状态(有时也看做返回状态).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零值 ...

  10. PowerDesigner将PDM导出生成WORD文档--温习老知识

    转:http://www.cnblogs.com/wudiwushen/archive/2010/05/13/1734812.html 今天的温习老知识,是如何将一个PD设计的PDM来导出WORD文档 ...