转自:http://blog.csdn.net/happydream_c/article/details/54943802

一.nginx简介

Nginx (发音为[engine x])专为性能优化而开发,其最知名的优点是它的稳定性和低系统资源消耗,以及对并发连接的高处理能力(单台物理服务器可支持30000~50000个并发连接), 是一个高性能的 HTTP 和反向代理服务器,也是一个IMAP/POP3/SMTP 代理服。

实际使用中,nginx主要:反向代理、负载均衡

二.nginx基本配置与参数说明

#运行用户

  1. user nobody;

#启动进程,通常设置成和cpu的数量相等

  1. worker_processes  1;

#全局错误日志及PID文件

  1. #error_log  logs/error.log;
  2. #error_log  logs/error.log  notice;
  3. #error_log  logs/error.log  info;
  4. #pid        logs/nginx.pid;

#工作模式及连接数上限

events {

#epoll是多路复用IO(I/O Multiplexing)中的一种方式,

#仅用于linux2.6以上内核,可以大大提高nginx的性能

  1. use   epoll;

#单个后台worker process进程的最大并发链接数

  1. worker_connections  1024;

# 并发总数是 worker_processes 和 worker_connections 的乘积

# 即 max_clients = worker_processes * worker_connections

# 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4  为什么

# 为什么上面反向代理要除以4,应该说是一个经验值

# 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000

# worker_connections 值的设置跟物理内存大小有关

# 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数

# 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右

# 我们来看看360M内存的VPS可以打开的文件句柄数是多少:

# $ cat /proc/sys/fs/file-max

# 输出 34336

# 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内

# 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置

# 使得并发总数小于操作系统可以打开的最大文件数目

# 其实质也就是根据主机的物理CPU和内存进行配置

# 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。

# ulimit -SHn 65535

}

#设定http服务器

http {

#设定mime类型,类型由mime.type文件定义

  1. include    mime.types;
  2. default_type  application/octet-stream;

#设定日志格式

  1. log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  2. '$status $body_bytes_sent "$http_referer" '
  3. '"$http_user_agent" "$http_x_forwarded_for"';
  4. ss_log  logs/access.log  main;

#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,

#对于普通应用,必须设为 on,

#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,

#以平衡磁盘与网络I/O处理速度,降低系统的uptime.

  1. sendfile     on;

#tcp_nopush     on;

#连接超时时间

#keepalive_timeout  0;

  1. keepalive_timeout  65;
  2. tcp_nodelay     on;

 #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。

  1. fastcgi_connect_timeout 300;
  2. fastcgi_send_timeout 300;
  3. fastcgi_read_timeout 300;
  4. fastcgi_buffer_size 64k;
  5. fastcgi_buffers 4 64k;
  6. fastcgi_busy_buffers_size 128k;
  7. fastcgi_temp_file_write_size 128k;

#upstream的负载均衡,(以权重方式分发),weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。

  1. upstream blog.nginx.com {
  2. server 192.168.80.121:80 weight=3;
  3. server 192.168.80.122:80 weight=2;
  4. server 192.168.80.123:80 weight=3;
  5. }

#upstream的负载均衡,(以nginx热备方式分发),其它所有的非backup Server down或者忙的时候,请求backup机器。所以这台机器压力会最轻

  1. upstream blog.nginx.com {
  2. server 192.168.80.121:80;
  3. server 192.168.80.122:80;
  4. server 192.168.80.123:80 backup;
  5. }<span style="font-size:18px;"></span>

#开启gzip压缩

  1. gzip  on;
  2. gzip_disable "MSIE [1-6].";

#设定请求缓冲

  1. client_header_buffer_size    128k;
  2. large_client_header_buffers  4 128k;

#设定虚拟主机配置

server {

#侦听80端口

  1. listen    80;

#定义访问地址,域名可以有多个,用空格隔开

  1. server_name www.nginx.cn nginx.cn ;

#定义服务器的默认网站根目录位置

  1. root html;

#设定本虚拟主机的访问日志

  1. access_log  logs/nginx.access.log  main;

#默认请求

  1. location / {
  2. #定义首页索引文件的名称
  3. index index.php index.html index.htm;
  4. }

#对 “/” 启用反向代理

  1. location / {
  2. proxy_pass http://127.0.0.1:88;
  3. proxy_redirect off;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
  6. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  7. #以下是一些反向代理的配置,可选。
  8. proxy_set_header Host $host;
  9. client_max_body_size 10m; #允许客户端请求的最大单文件字节数
  10. client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
  11. proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
  12. proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
  13. proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
  14. proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
  15. proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
  16. proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
  17. proxy_temp_file_write_size 64k;
  18. #设定缓存文件夹大小,大于这个值,将从upstream服务器传
  19. }

#设定查看Nginx状态的地址

  1. location /NginxStatus {
  2. stub_status on;
  3. access_log on;
  4. auth_basic “NginxStatus”;
  5. auth_basic_user_file conf/htpasswd;
  6. #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
  7. }

#本地动静分离反向代理配置

#所有jsp的页面均交由tomcat或resin处理

  1. location ~ .(jsp|jspx|do)?$ {
  2. proxy_set_header Host $host;
  3. proxy_set_header X-Real-IP $remote_addr;
  4. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  5. proxy_pass http://127.0.0.1:8080;
  6. }

#所有静态文件由nginx直接读取不经过tomcat或resin

  1. location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt
  2. |pdf|xls|mp3|wma)$ {
  3. expires 15d;
  4. }
  5. location ~ .*.(js|css)?$ {
  6. expires 1h;
  7. }

# 定义错误提示页面

  1. error_page   500 502 503 504 /50x.html;
  2. location = /50x.html {
  3. }

#静态文件缓存时间设置,nginx自己处理

  1. location ~ ^/(images|javascript|js|css|flash|media|static)/ {
  2. #过期30天,静态文件不怎么更新,过期可以设大一点,
  3. #如果频繁更新,则可以设置得小一点。
  4. expires 30d;
  5. }

#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.

  1. location ~ .php$ {
  2. fastcgi_pass 127.0.0.1:9000;
  3. fastcgi_index index.php;
  4. fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  5. include fastcgi_params;
  6. }

#禁止访问 .htxxx 文件

  1. location ~ /.ht {
  2. deny all;
  3. }<span style="font-size:18px;">    </span>

}

}

三.nginx配置超时时间

http://my.oschina.net/xsh1208/blog/199674

四.Nginx中的upstream轮询机制介绍【负载均衡】

Nginx中upstream有以下几种方式:

1、轮询(weight=1) 
默认选项,当weight不指定时,各服务器weight相同, 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

  1. upstream bakend {
  2. server 192.168.1.10;
  3. server 192.168.1.11;
  4. }

2、weight 
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 
 如果后端服务器down掉,能自动剔除。 
 比如下面配置,则1.11服务器的访问量为1.10服务器的两倍。

  1. upstream bakend {
  2. server 192.168.1.10 weight=1;
  3. server 192.168.1.11 weight=2;
  4. }

3、ip_hash 
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。 
如果后端服务器down掉,要手工down掉。

  1. upstream resinserver{
  2. ip_hash;
  3. server 192.168.1.10:8080;
  4. server 192.168.1.11:8080;
  5. }

4、fair(第三方插件) 
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

  1. upstream resinserver{
  2. server 192.168.1.10:8080;
  3. server 192.168.1.11:8080;
  4. fair;
  5. }

5、url_hash(第三方插件) 
 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。 
 在upstream中加入hash语句,hash_method是使用的hash算法

  1. upstream resinserver{
  2. server 192.168.1.10:8080;
  3. server 192.168.1.11:8080;
  4. hash $request_uri;
  5. hash_method crc32;
  6. }

设备的状态有: 
1.down 表示单前的server暂时不参与负载 
2.weight 权重,默认为1。 weight越大,负载的权重就越大。 
3.max_fails 允许请求失败的次数默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误 
4.fail_timeout max_fails次失败后,暂停的时间。 
5.backup 备用服务器, 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

五.nginx启动、重启、关闭操作介绍

    1. 启动nginx:
    2. nginx -c /path/to/nginx.conf
    3. 重启nginx:
    4. nginx -s reload  :修改配置后重新加载生效
    5. nginx -s reopen  :重新打开日志文件
    6. nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确
    7. 关闭nginx:
    8. nginx -s stop  :快速停止nginx
    9. quit  :完整有序的停止nginx
    10. 其他的停止nginx 方式:
    11. ps -ef | grep nginx
    12. kill -QUIT 主进程号     :从容停止Nginx
    13. kill -TERM 主进程号     :快速停止Nginx
    14. pkill -9 nginx          :强制停止Nginx
    15. 平滑重启nginx:
    16. kill -HUP 主进程号

nginx基本配置与参数说明以及Nginx中的upstream轮询机制介绍的更多相关文章

  1. Nginx中的upstream轮询机制介绍

    Nginx中upstream有以下几种方式: 1.轮询(weight=1) 默认选项,当weight不指定时,各服务器weight相同, 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器d ...

  2. 理解Nodejs中的事件轮询机制

    我在看<了不起的Nodejs>一书,阻塞与非阻塞IO那一章我来回看了N遍,然后...还是没太看懂..于是我找到了这篇日志,写的是真的有点好啊..潸然泪下.. 原文:http://www.r ...

  3. nginx upstream轮询配置

    nginx upstream nginx的upstream官方地址为:http://nginx.org/cn/docs/http/ngx_http_upstream_module.html 轮询分为多 ...

  4. HTTP协议中的短轮询、长轮询、长连接和短连接

    HTTP协议中的短轮询.长轮询.长连接和短连接 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接 ...

  5. 高性能Web服务器Nginx的配置与部署研究(15)Upstream负载均衡模块

    Nginx 的 HttpUpstreamModule 提供对后端(backend)服务器的简单负载均衡.一个最简单的 upstream 写法如下: server backend1.example.co ...

  6. nginx代理 upstream轮询

    问题描述 我有2个Tomcat  一个端口开启(8021),一个端口未开启(8022),在nginx里用upstream模块进行代理 ,代理的负载算法采用的是默认的轮询算法,配置成功后,访问页面时并没 ...

  7. 误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接

    引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HT ...

  8. 转---谈谈HTTP协议中的短轮询、长轮询、长连接和短连接

    作者:伯乐在线专栏作者 - 左潇龙 http://web.jobbole.com/85541/ 如有好文章投稿,请点击 → 这里了解详情 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此 ...

  9. Apache的代理服务器的配置 (正向代理 ,反向代理,轮询调度)

    一. 代理服务器的了解1.代理服务器 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自 ...

随机推荐

  1. php 检查该数组有重复值

    if (count($array) != count(array_unique($array))) { echo '该数组有重复值'; }

  2. AutoFac文档6(转载)

    目录 开始 Registering components 控制作用域和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 实例生命周期 实例生 ...

  3. bazel-编译一个源文件生成可执行程序

    demo1 使用bazel编译一个源文件生成可执行程序简单示例 demo1目录树 demo1 ├── app │ ├── BUILD │ └── hello_world.cpp ├── README. ...

  4. Observable 示例之 Windows Phone 列表内项目逐个加载

    在写 Windows phone应用性能优化(一)的时候,在 ListBox 的项加载的时候,添加了一些简单的动画. 其实在 Windows Phone 的应用中使用 Blend 设计动画是很容易的, ...

  5. MySQL编程API

    1.MySQL API数据结构 MySQL API中用到了很多结构体类型,下面就简单说一下常用的结构体. MYSQL 连接数据库前,必须先创建MYSQL变量,此变量在很多MySQL API函数中会用到 ...

  6. django 文件上传(阿里云oss)下载(支持大文件下载)

    1.文件上传 Models 设计 class Upload_File(models.Model): image = models.FileField(upload_to='file/%Y/%m',de ...

  7. 部署静态页面到nginx

    1.将页面上传到某个位置.比如:/home/myapp/navi 2. server_name localhost;  localhost 更换为自己的域名 3.更改配置文件./usr/local/n ...

  8. 如何在iOS上实现对HTTPS的支持(转)

    原文地址:http://blog.5ibc.net/p/101504.html 首先,需要明确你使用HTTP/HTTPS的用途,因为OSX和iOS平台提供了多种API,来支持不同的用途,官方文档< ...

  9. 基于css3的鼠标经过动画显示详情特效

    之前为大家分享过一款基于jquery的手风琴显示详情,今天给大家分享基于css3的鼠标经过动画显示详情特效.这款实例鼠标经过的时候基于中间动画放大,效果非常不错,效果图如下: 在线预览   源码下载 ...

  10. mysql学习笔记2--mysql的基本使用

    4. 运行和关闭MySQL服务器 首先检查MySQL服务器正在运行与否.在资源管理器查看有没有mysqld的进程,如果MySQL正在运行,那么会看到列出来的 mysqld 进程.如果服务器没有运行,那 ...