NGINX配置详解

Nginx的核心模块为Main和Events,此外还包括标准HTTP模块、可选HTTP模块和邮件模块,其还可以支持诸多第三方模块。Main用于配置错误日志、进程及权限等相关的参数,Events用于配置IO模型,如epoll、kqueue、select或poll等,它们是必备模块,HTTP模块用于控制Nginx的HTTP进程。Nginx的主配置文件由几个段组成,这个段通常也被称为nginx的上下文,每个段的定义格式如下所示。需要注意的是,其每一个指令都必须使用分号(;)结束,否则为语法错误。

由上我们了解到,nginx的配置由指令已经参数构成,下面我们就来介绍下nginx常用指令的使用。

main上下文指令

user 定义Nginx运行的用户和用户组用user指令

user www-data;

定义nginx进程数,用worker_processes指令,建议设置为等于CPU总核心数。

worker_processes 2;

全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]用error_log指令。另外日志还可以定义在http、server及location上下文中,语法格式一样。全局日志会被http,server等具体的日志配置所覆盖。这一定与html中样式的作用域类似。

error_log /var/log/nginx/error.log info;

定义进程文件用pid指令

pid /var/run/nginx.pid;
event上下文指令

参考事件模型指令:use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];其中,epoll是linx 2.6版本内核中高性能I/O模型。nginx的并非量和采用的时间模型息息相关。真是因为apache 使用了select模型,而nginx默认使用的epoll模型,导致同等条件下,nginx的性能优于apache的性能10倍左右。后面会有专门的文章做详细介绍。例如

use epoll;
http上下文指令

设定mime类型,类型由mime.type文件定义 用include指令.

include   /etc/nginx/mime.types;## include指令可以将其他文件的指令引入进来
default_type  application/octet-stream;

开启gzip压缩指令

gzip on;

负载均衡服务器列表指令upstream

upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
#本机上的Squid开启3128端口
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80  weight=1;
server 192.168.8.3:80  weight=6;
}
server (虚拟主机)上下文指令

server上下文指令,主要设置了端口的舰艇,主机名称,路径路由,虚拟主机日志等

server {
    #侦听80端口
    listen       80;
    #定义使用www.xx.com访问
    server_name  www.xx.com;
    #设定本虚拟主机的访问日志
    access_log  logs/www.xx.com.access.log  main;
    #默认请求
    location / {
          root   /root;      #定义服务器的默认网站根目录位置
          index index.php index.html index.htm;   #定义首页索引文件的名称
          fastcgi_pass  www.xx.com;
          fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
          include /etc/nginx/fastcgi_params;
     }

    location /proxy {
          proxy_pass http://otherserver.com; #请求转发指令
     }

    # 定义错误提示页面
    error_page   500 502 503 504 /50x.html; 
    location = /50x.html {
    root   /root;
    }
}

nginx的upstream

upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。在上面的设定中,通过upstream指令指定了一个负载均衡器的名称ixdba.net。这个名称可以任意指定,在后面需要的地方直接调用即可。nginx的upstream目前支持4种方式的分配

轮询(默认) : 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。

ip_hash : 每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。当然如果这个节点不可用了,会发到下个节点,而此时没有session同步的话就注销掉了。

least_conn : 请求被发送到当前活跃连接最少的realserver上。会考虑weight的值。

url_hash : 此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持urlhash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包 nginxupstream_hash 。

fair : 这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair 模块。

upstream 配置如下;

upstream backend{
    ip_hash;
    server 192.168.12.133:80;
    server 192.168.12.134:80  down;
    server 192.168.12.135:8009  max_fails=3  fail_timeout=20s;
    server 192.168.12.136:8080 backup;
}

server{

   location /{
       proxy_pass http://backend;

    }
}

Upstream可对后端服务器进行健康检查。

a) down表示当前的server暂时不参与负载。

b) weight默认为1.weight越大,负载的权重就越大。

c) maxfails :在failtimeout时间内对后台服务器请求失败的次数。

d) failtimeout:maxfails次失败后,暂停的时间。

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

使用nginx的sticky模式

这个模块的作用是通过cookie黏贴的方式将来自同一个客户端(浏览器)的请求发送到同一个后端服务器上处理,这样一定程度上可以解决多个backend servers的session同步的问题 —— 因为不再需要同步,而RR轮询模式必须要运维人员自己考虑session同步的实现。

另外内置的 ip_hash也可以实现根据客户端IP来分发请求,但它很容易造成负载不均衡的情况,而如果nginx前面有CDN网络或者来自同一局域网的访问,它接收的客户端IP是一样的,容易造成负载不均衡现象。淘宝Tengine的 ngxhttpupstreamsessionsticky_module 也是类似的功能。nginx-sticky-module的cookie过期时间,默认浏览器关闭就过期,也就是会话方式。

这个模块并不合适不支持 Cookie 或手动禁用了cookie的浏览器,此时默认sticky就会切换成RR。它不能与ip_hash同时使用。

sticky的配置

配置起来超级简单,一般来说一个sticky指令就够了。sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback];:

name: 可以为任何的 string 字符,默认是 routedomain:哪些域名下可以使用这个 cookiepath:哪些路径对启用 sticky,例如 path/test,那么只有 test 这个目录才会使用 sticky 做负载均衡expires:cookie 过期时间,默认浏览器关闭就过期,也就是会话方式。no_fallbackup:如果设置了这个,cookie 对应的服务器宕机了,那么将会返回502(bad gateway 或者 proxy error),建议不启用

upstream backend{
    sticky;# 使用该模式可以解决大多数问题
    server 192.168.12.133:80;
    server 192.168.12.134:80  down;
    server 192.168.12.135:8009  max_fails=3  fail_timeout=20s;
    server 192.168.12.136:8080 backup;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值