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. ASP.NET MVC轻教程 Step By Step 9——分页

    现在我们要把Index视图的留言信息进行分页显示. Step 1. 创建路由 我们希望以类似地址http://localhost:41583/Page1来表示第一页,Page2表示第二页,以此类推.在 ...

  2. 从零开始学习MySQL1---MySQL基础

    数据库基础 数据库是一个长期存储在计算机内的.有组织的.有共享的.统一管理的.数据集合.它是一个按数据结构来存储和管理数据的计算机软件系统.数据库包含两层含义:保管数据的仓库,以及数据管理的方法和技术 ...

  3. PLSQL Developer激活码

    License Number:999 Password:xs374ca Product Code:ljkfuhjpccxt8xq2re37n97595ldmv9kch Serial Number:30 ...

  4. Occupy Cities

    hdu4606:http://acm.hdu.edu.cn/showproblem.php?pid=4606 题意:在一个二维坐标系中,有n个城市,坐标给出来了,然后有p个士兵要去占领这n个城市,但是 ...

  5. 【UVA12093】Protecting Zonk (树形DP)

    题意: 给定一个有n个节点的无根树,有两种装置A和B,每种都有无限多个.在某个节点X使用A装置需要C1的花费,并且此时与节点X相连的边都被覆盖.在某个节点X使用B装置需要C2的花费,并且此时与节点X相 ...

  6. 客户端(C#)调用CXF搭建的webservice的出现一些问题记录

    最近把XFire框架搭建的一个webservice换成CXF框架.访问webservice的客户端是C#写的.客户端调用webservice,数据能在客户端得到.看起来显然是成功了. 但其中在VS中添 ...

  7. 《深度探索c++对象模型》chapter1关于对象对象模型

    在c++中,有2种class data member:static和nostatic,以及3钟class member function:static,nostatic和virtual.已知下面这个c ...

  8. 14.6.6 Configuring Thread Concurrency for InnoDB 配置线程并发

    14.6.6 Configuring Thread Concurrency for InnoDB 配置线程并发 InnoDB 使用操作系统线程来处理请求(用户事务) 事务可能执行很多次在它们提交或者回 ...

  9. openwrt使用3G上网卡

    尊敬的大大.感谢你抽空指导我 我的设备是db120 mu350 和广东无限卡 版本是OpenWrt Backfire 10.03.336 DIY full 一.        没有安装到kmod-us ...

  10. jquery.lazyload的使用

    1.引入 <script src="jquery.js" type="text/javascript"></script> <sc ...