nginx 笔记
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 笔记的更多相关文章
- CentOS 6.4 快速安装Nginx笔记
CentOS 6.4 快速安装Nginx笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/9860 ...
- nginx笔记5-双机热备原理
1动静分离演示: 将笔记3的Demo改造一下,如图所示: 改造完成后,其实就是在网页上显示一张图片 现在启动Tomcat运行起来,如图: 可以看到图片的请求是请求Tomcat下的图片. 现在,通过把静 ...
- nginx笔记4-负载均衡带来的问题以及解决办法
接着笔记3,将笔记三的改造一下,现在分别启动两个Tomcat,在页面获取session.如图所示: tomcat2的session: tomcat1的session: 根据上图发现,每个tomcat取 ...
- nginx笔记3-负载均衡算法
1.nginx测试:先从官网下载nginx 官网网址为:http://nginx.org/ 然后找到stable version的版本下载,因为这版本是最稳定的,不要去下载最新,因为不稳定,如下图: ...
- nginx笔记2-负载均衡
负载均衡实现方式分为两类:1硬件类,2软件类. 硬件类:F5(这是一种硬件,并不是刷新啊,不要误解) 优点:非常快,可靠性高,并发量大.缺点:太贵,成本高,不方便,最致命的是不能将动态请求和静态请求 ...
- Nginx笔记02-nginx常用参数配置说明
nginx的主配置文件是nginx.conf,这里主要针对这个文件进行说明 1.主配置文件nginx.conf 2.nginx配置文件的结构 从上面的配置文件中我们可以总结出nginx配置文件的基 ...
- 同事不太懂负载均衡,我直接把阿里架构师的这份Nginx笔记甩给他
Nginx功能强大,架构复杂,学习.维护和开发的门槛较高. 本份笔记深入最新的Nginx源码,详细剖析了模块体系.动态插件.功能框架.进程模型.事件驱动.线程池.TCP/UDP/HTTP 处理等Ngi ...
- 【网络】安装Nginx笔记
目录 前言 安装前先更新下 安装依赖库 下载Nginx Nginx编译配置 编译&安装&验证nginx Nginx服务配置 配置SSL 参考 前言 up安装nginx主要是为了在服务器 ...
- [Nginx笔记]关于线上环境CLOSE_WAIT和TIME_WAIT过高
运维的同学和Team里面的一个同学分别遇到过Nginx在线上环境使用中会遇到TIME_WAIT过高或者CLOSE_WAIT过高的状态 先从原因分析一下为什么,问题就迎刃而解了. 首先是TIME_WAI ...
- Nginx笔记
基础篇 关于Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.最早由俄罗斯的程序设计师Igor Sysoev所开发,并在一个BSD-like ...
随机推荐
- WorkerScript QML Type
官方描述:在一个Qt Quick应用程序中可以使用线程了. Import Statement: import QtQuick .属性:source : url信号:message(jsobje ...
- Encoding 类别
Encoding 類別 .NET Framework 4.5 表示字元編碼方式. 繼承階層架構 System.Object System.Text.Encoding System.Tex ...
- Python/Keras如何将给定的数据集打乱
给定数据集data,数据集对应的标签label index = [i for i in range(len(data))] random.shuffle(index) data = data[inde ...
- jQuery EasyUI parser 的使用场景
转自原文地址:http://www.easyui.info/archives/216.html parser,故名意思,就是解析器的意思,别看他只有那么几行代码,jQuery Easyui 能够根据c ...
- linux解压命令
.tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gun ...
- Array.asList()注意
api: public static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表.(对返回列表的更改会“直接写”到数组.)此方 ...
- linux No manual entry for
我的博客:www.while0.com 原来除了安装man,还要安装man-pages. yum install man -y yum install man-pages -y
- poj2886
反素数范围不大,可以直接打表得然后就是模拟移动的过程我们可以用线段树优化,具体明天再说吧 ..] ,,,,,,,,,,,,,, ,,, ...
- Linux Shell编程(11)——退出和退出状态
exit命令一般用于结束一个脚本,就像C语言的exit一样.它也能返回一个值给父进程.每一个命令都能返回一个退出状态(有时也看做返回状态).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零值 ...
- PowerDesigner将PDM导出生成WORD文档--温习老知识
转:http://www.cnblogs.com/wudiwushen/archive/2010/05/13/1734812.html 今天的温习老知识,是如何将一个PD设计的PDM来导出WORD文档 ...