原文:http://www.blogjava.net/xiaomage234/archive/2011/09/08/358247.html

配置环境:

三台CentOS5.3,一台做nginx代理,2台apache做页面测试。apache端口改为:8080,nginx使用80口接收客户请求

yum -y install pcre-devel openssl openssl-devel                   //安装包,否则编译时候出错

#useradd  www

#groupadd  www

#usermod -g www www         //设置nginx的用户和组

#tar  xzvf  pcre-7.8.tar.gz

#./configure

#make ; make install                //安装pcre让nginx支持rewrite重写方便以后所需

[root@localhost tar]# cd nginx-0.7.16/

[root@localhost nginx-0.7.16]# ./configure  --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

--with-http_stub_status_module:这个模块用于获取nginx自上次启动以来的工作状态,非核心模块

--with-http_ssl_module               : 把ssl编译进去, 仅仅指定openssl库的源代码路径还是不够的

[root@localhost nginx-0.7.16]#make  ; meke install

#cd   /usr/local/nginx/conf/nginx.conf

#vi  nginx.conf

user  www www;                       //设置用户和组

worker_processes  4;             //生成进程数,等于CPU总核数两倍

error_log  /data1/logs/nginx_error.log crit;      //错误日志路径,错误日志可选项为:【debug  info  notice  warn  error   crit】

pid        /usr/local/nginx/logs/nginx.pid;              //PID路径

worker_rlimit_nofile 51200;                                 //指定文件描述符数量

events {

use epoll;               //使用网络I/O模型

worker_connections  51200;            //允许连接数,文件描述符

}

http

{

include       mime.types;           //文件类型

default_type  application/octet-stream;         //默认文件类型

charset  UTF-8                       //语言类型

server_names_hash_bucket_size 128;               //根据CPU的cache来设定

client_header_buffer_size 4;          //记录缓存4k

large_client_header_buffers 4 8k;      //如果4k不够,用8k

sendfile        on;         //指定nginx是否调用sendfile函数(zero copy方式)来输出文件,普通应用必须设为on,对于普通文件用on。如果进行下载I/O负载应用,设置为off,以平衡磁盘磁盘和网络I/O处理速度。

#tcp_nopush     on;      //允许或禁止使用socket的TCP_NOPUSH(on freebsd或TCP_COR(on  linux),此选择仅仅在使用sendfile时候可用,

keepalive_timeout  65;            //长连接超时时间

tcp_nodelay on;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 64k;

fastcgi_buffers 4 64k;

fastcgi_busy_buffers_size 128k;

fastcgi_temp_file_write_size 128k;

#开启gzip压缩,用于支持在线实时压缩输出数据流

gzip on;                          //off关闭或者on开启gzip功能

gzip_min_length 1k;  //设置允许压缩最小字节数,0表示多大都压,最好设置大于1k,小于1k越压越大

gzip_buffers 4 16k;        //系统获取几个单位的缓存,用于存储gzip压缩结果数据流。4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存,如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

gzip_http_version 1.1;    //判断http协议版本,是否支持压缩,否则用户看到乱码。默认即可,大部分都得支持

gzip_comp_level 2;     //gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢

gzip_types text/plain application/x-javascript text/css application/xml;     //默认nginx是开启gzip压缩,但是只针对html文件押送  gzip_types       text/plain application/x-javascript text/css text/html application/xml text/javascript;  在nginx的gzip的gzip_types加上

gzip_vary on;   //和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩。

client_max_body_size 50m;             //允许客户端请求的最大单个文件字节数

client_body_buffer_size 128k;        //缓冲区代理用户端请求的最大字节数,可以理解先保存到本地在穿给用户

proxy_connect_timeout 600;        //和后端服务器连接的超时时间,发起握手等候相应超时时间

proxy_read_timeout 600;         //连接成功后,等待后端服务器相应时间,已经进入后端的排队之中等候处理

proxy_send_timeout 600;        //后端服务器数据回传时间,在规定时间内服务器必须传完所有数据

proxy_buffer_size 16k;        //只保存用户头信息一共nginx进行规则处理,用于缓存代理请求

proxy_buffers    4 32k;     //告诉nginx保存单个用的几个Buffer最大用多大空间

proxy_busy_buffers_size 64k;   //如果系统很忙可以申请更大的proxy_buffers,官方推荐 *2

proxy_temp_file_write_size 64k;    //proxy缓存临时文件大小

upstream http_server_pool {

server 192.168.1.2:8080 weight=4 max_fails=2 fail_timeout=30s;

server 192.168.1.3:8080 weight=2 max_fails=2 fail_timeout=30s;

}          //设置地址池,后端2台服务器

server          //第一个虚拟主机,反向代理http_server_pool这组服务器

{

listen       80;                                        //监听端口

server_name  www.xiao.com;           //主机名称

location /

{

proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; //http://www.2tutu.com/post/2008/631.html         //后端服务器返回500 503 404错误,自动请求转发到upstream池中另一台服务器

proxy_pass http://http_server_pool;

proxy_set_header Host www.xiao.com;

proxy_set_header X-Forwarded-For  $remote_addr;

}

access_log  logs/www.xiao.com.access.log  combined;

}

}

proxy_set_header Host www.xiao.com:

proxy_set_header  Host  $host :首先说明 proxy_set_header 指令在向反向代理的后端Web服务器发起请求时添加指定的 Header头信息,后端web服务器有多个基于域名的虚拟主机时,通过头信息Host,用于指定请求的域名,这样后端web才能识别反向代理请求哪个虚拟主机处理。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for :联系下面PS中所写,在后端web中就算加上$http_x_Forwarded_for这条,也得不到用户的IP,所以在nginx反向代理添加Header头信息 X-Forwarded-For在配合后端服务器日志文件的$http_x_Forwarded_for这条就可以获得用户的IP地址了。

PS:假设Nginx作为Web服务器,nginx或Squid作为反向代理后,就不能获取客户端的真实IP地址了,由于在客户端和Web增加了中间层,web没有真实的IP,通过$remote_addr变量拿到是反向代理的IP,Web代理可以增加$http_x_Forwarded_for信息,用于记录客户端IP和原来客户请求的服务器地址,在日志格式中加上即可。

log_format  main   '$http_x_Forwarded_for '

'$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log  /tmp/Nginx.access.log  main;                                 //在后端Web里面加上这样就可以了

upstream : nginx支持4种算法,下面一一介绍

1、 轮询

每个请求按时间顺序分配到不同的后端服务器了,后端服务器down掉,自动切除。

2、weight

设定服务器权值: weight=2

weight=4          服务器性能不均时候使用

3、 ip_hash

每个请求按访问ip的hash结果分配,每个访客有固定的后端服务器,可以解决session问题

4、 fair(第三方)

按后端服务器的响应时间来分配,响应时间短的优先分配

5、url_hash (第三方)

按访问的url的hash结果分配,使每个url定向到同一个后端服务器,后端为缓存服务器比较有效。

以往的架构lvs或者dns轮询,这样虽然squid里面的均衡的,但是忽略了一点就是数据量,虽然每台squid是均匀但是都是满载的,重复的请求,会占用很多空间,在前面换上nginx在配上 url_hash,根据url分流后,每一个url会只存在一个squid上,每台squid数据完全不同。http://edu.codepub.com/2010/0202/20282.php

upstream http_server {             //定义负载均衡设备的Ip及设备状态

  ip_hash;

   server 127.0.0.1:9090 down;

   server 127.0.0.1:8080 weight=2;

   server 127.0.0.1:6060;

   server 127.0.0.1:7070 backup;

  }

down : 当前的IP server暂时不参与负载,不进行反向代理

weight: 默认为1,weight越大,负载的权重越大

max_fails: 允许请求失败的次数默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误。

fail_timeout : max_fails次失败后,暂停的时间

backup:  其它所有非backup机器down或者忙时候,请求backup机器,这台机器压力最轻

PS: nginx支持同时设置多组负载均衡,给不同的server使用

location:设置对URL进行匹配,比如 location  /  ,  location  /data 这两个设置优先级,/ 下也可以,但是不如 /data下搜索更快,定位更准。

转载于:https://blog.51cto.com/sndapk/990506

nginx配置文件讲解(二)相关推荐

  1. [Nginx] – 安全优化 – 配置文件优化 [二]

    [Nginx] – 安全优化 – 配置文件优化 [二] Nginx  修改时间:2016年12月26日 首先在此感谢下我的老师–老男孩专家拥有16年一线实战经验,为我们运维班28期所有成员的耐心讲解, ...

  2. nginx系列之二:配置文件解读

    ** 前言 ** nginx系列之一:nginx入门 nginx系列之二:配置文件解读 nginx系列之三:日志配置 nginx系列之四:web服务器 nginx系列之五: 负载均衡 nginx系列之 ...

  3. nginx配置文件nginx.conf超详细讲解

    转载文章:https://www.cnblogs.com/liang-wei/p/5849771.html #nginx进程,一般设置为和cpu核数一样,负载以cpu密集型为主,则设置为与cpu核数相 ...

  4. nginx配置文件解析加讲解

    nginx配置文件解析 nginx的组成部分(初始配置) nginx主要配置文件优化 日志优化 nginx监控 控制访问权限 列出linux中的列表 设置文件缓存 设置请求限制 设置IP高并发(限制多 ...

  5. nginx:模块讲解

    本文讲解一些nginx安装时的一些模块. 1.stub_status nginx中的stub_status模块主要用于查看Nginx的一些状态信息. 本模块默认没有安装,需要编译安装.nginx开启s ...

  6. nginx(详细讲解)

    nginx讲解 nginx 是一个功性能的http和反向代理web服务. 一.安装nginx 步骤: (1)设置IP (2)配置yum源 (3)#systemctl enable nginx ///开 ...

  7. 【Nginx源码分析】Nginx配置文件解析(一)

    运营研发团队 李乐 配置文件是nginx的基础,对于学习nginx源码甚至开发nginx模块的同学来说更是必须深究.本文将从源码从此深入分析nginx配置文件的解析,配置存储,与配置查找. 看本文之前 ...

  8. python修改nginx配置文件_zookeeper 动态管理nginx配置

    假设我们有一个场景,所有服务器共享同一份配置文件,我们肯定不可能单独手动维护每台服务器,这时可以利用zookeeper的配置管理功能. 环境:python + nginx + zookeeper 目的 ...

  9. Nginx学习之二-配置项解析及编程实现

    在开发功能灵活的Nginx模块时,需要从配置文件中获取特定的信息.不过,我们并不需要再编写一套读取配置的系统,Nginx已经为用户提供了强大的配置项解析机制,同时还支持"-s reload& ...

最新文章

  1. BP as a Vendor and Customer Configuration
  2. oracle /+append/好用吗,ORACLE-insert /*+append*/提高性能
  3. 加密_easy_crypto
  4. struts2+jquery之form插件实现异步上传图片并显示
  5. 解决 centos7 最小化安装之后不能正常联网问题
  6. linux用户登录指定目录
  7. 教务管理及教材订购系统设计文档
  8. opensource项目_最佳Opensource.com:科学
  9. 基于虚拟化的安全性怎么关闭,无法开启虚拟机!
  10. python计算各类型电影的评分,Moviedata-10M电影数据集统计分析之源码分享(Python)...
  11. MATLAB subplot子图分块绘制的方法
  12. 利用Landsat8数据的不同波段组合监测冰雪分布情况
  13. 强化练习200题(二) 本卷共200道试题作答时间为240分钟,总分200分,120分及格
  14. sequoia 的详细安装步骤
  15. 前序中序出后序——二叉树
  16. php xdebug remote_host 多个,卓象程序员:PHPStudy PHPStorm XDebug调试
  17. 如何用个人电脑利用ipv6搭建网站
  18. openlookeng 扩展connector对接达梦和金仓
  19. 【安装】Hadoop2.8.0搭建过程整理版
  20. 如何去做一个好的循迹小车

热门文章

  1. python查找数组中出现次数最多的元素
  2. 六种 主流ETL 工具的比较(DataPipeline,Kettle,Talend,Informatica,Datax ,Oracle Goldengate)...
  3. python_ 学习笔记(hello world)
  4. [.NET开发] C#编程调用Cards.dll实现图形化发牌功能示例
  5. python学习日记day2
  6. [算法]——归并排序(Merge Sort)
  7. 注意,ruby循环体定义的变量在结束时后,变量还存在
  8. checkbox全选衍生问题讨论
  9. C++ 11 中的POD
  10. linux 下文件管理值得注意的地方