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. Android Studio HelloWorld

    开发第一应用 可以开发属于自己的应用,是否有点小激动?好吧!让我们开始,首先点击Start a new Android Studio Project创建工程: 接下来需要输入应用名称(第一个字母要大写 ...

  2. 各浏览器Cookie大小、个数限制

    一.浏览器允许每个域名所包含的cookie数: Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie. Firef ...

  3. BZOJ 4052 Magical GCD

    Description 给出一个长度在\(100000\)以内的正整数序列,大小不超过\(10^{12}\).求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大. Input ...

  4. websocket nodejs实例

    http://blog.sina.com.cn/s/blog_49cc837a0101aljs.html http://blog.sina.com.cn/s/blog_49cc837a0101a2q3 ...

  5. MVC自学系列之一(MVC入门篇)

      MVC是如何适用于ASP.NET中的 自从2002年ASP.NET 1.0版本的首次发布,就知道ASP.NET和Web Forms是同样一回事.ASP.NET由抽象两层类所支持: -->Sy ...

  6. Github、Jekyll 搭建及优化静态博客方法指南

    尝试自己写 Blog 的人,一般会经历三个阶段. 第一阶段,刚接触 Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉 ...

  7. sublime sftp 插件安装及破解

    必备插件sftp: 1,Package Control可以用来install其他package 2,sftp远程编辑文件:安装:install->sftp具体配置 sftp工具破解     1, ...

  8. Haskell高阶函数

    Haskell functions can take functions as parameters and return functions as return values. A function ...

  9. SQL语句 远程操作数据库

    --远程操作数据库SQL语句exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '211.81.251.85 'exec sp_addlinkedsr ...

  10. wcf双工通讯遇到的问题

    1.向ChannelFactory提供的InstanceContext包含未实现CallbackContractType的问题 通过添加服务引用生成的客户端代码, public class Callb ...