Nginx学习中项目最全配置

上面nginx.conf的图解配置详解
worker_processes  8;
工作进程:数目。根据硬件调整,通常等于CPU数量或者2倍于CPU。
error_log  logs/error.log  info;
error_log  logs/error.log;  
error_log  logs/error.log  notice;  
error_log  logs/error.log  info;  
错误日志:存放路径。
pid        logs/nginx.pid;
pid(进程标识符):存放路径。
worker_rlimit_nofile 51200;
指定进程可以打开的最大描述符:数目。
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
现在在linux 2.6内核下开启文件打开数为51200,worker_rlimit_nofile就相应应该填写51200。
这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
events {
    use epoll;
使用epoll的I/O 模型。linux建议epoll,FreeBSD建议采用kqueue,window下不指定。
补充说明:
与apache相类,nginx针对不同的操作系统,有不同的事件模型
A)标准事件模型
Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll
B)高效事件模型
Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
Epoll:使用于Linux内核2.6版本及以后的系统。
/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
Eventport:使用于Solaris 10。 为了防止出现内核崩溃的问题, 有必要安装安全补丁。
    worker_connections  51200;
每个工作进程的最大连接数量。根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为。worker_processes*worker_connections
}

##设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
    include       mime.types;
设定mime类型,类型由mime.type文件定义    
    default_type  application/octet-stream;
设定日志格式
    sendfile on;
sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
    autoindex on;
来启用目录流量,下面会分情况进行说明。
另外Nginx的目录流量有两个比较有用的参数,可以根据自己的需求添加:
autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间
    keepalive_timeout  120;
     keepalive超时时间。
    upstream a{
          server  127.0.0.1:9998;
         #server  192.168.55.9:9998;  yck
    }
nginx的upstream目前支持4种方式的分配
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
2、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
3、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1;
server server2;
fair;
}
4、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
tips:
upstream bakend{#定义负载均衡设备的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;
}
在需要使用负载均衡的server中增加
proxy_pass  http://bakend/ ;
每个设备的状态设置为:
1.down表示单前的server暂时不参与负载
2.weight为weight越大,负载的权重就越大。
3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path设置记录文件的目录 可以设置最多3层目录
location对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡

##配置虚拟机
          server{
         配置监听端口
        listen 9999;
          配置访问域名    
        server_name a;
         对以“mp3或exe”结尾的地址进行负载均衡
        location ~* \.(jpg|png|html|mp4|apk|ico|gif|jpeg|htm|js|css|pptx|ppt|pdf|docx)$ {
             设置被代理服务器的端口或套接字,以及URL。(~*不区分大小写匹配,默认后面以这些结尾可以)
            proxy_pass          http://a ;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
             以上三行,目的是将代理服务器收到的用户的信息传到真实服务器上
        }
    }
        server{
                listen 9998;
                location /{
                        root /home;
                }
        }
        server{
                listen 80;
                location ^~/html/{
                        proxy_pass         http://127.0.0.1:9999;
                        proxy_set_header   Host             $host;
                        proxy_set_header   X-Real-IP        $remote_addr;
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                }
                location ^~/ChinastrokeNet/{
                        proxy_pass         http://127.0.0.1:8088;
                        proxy_set_header   Host             $host;
                        proxy_set_header   X-Real-IP        $remote_addr;
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                }
                location ^~/cs/{
                        proxy_pass         http://127.0.0.1:8088;
                        proxy_set_header   Host             $host;
                        proxy_set_header   X-Real-IP        $remote_addr;
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                }
        location ^~/WebConference/{
                        proxy_pass         http://127.0.0.1:8088;
                        proxy_set_header   Host             $host;
                        proxy_set_header   X-Real-IP        $remote_addr;
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                }

        
        }
}
location 配置可以有两种配置方法
1.前缀 + uri(字符串/正则表达式)
2.@ + name
前缀含义
    =  :精确匹配(必须全部相等)
    ~  :大小写敏感
    ~* :忽略大小写
    ^~ :只需匹配uri部分
    @  :内部服务跳转
Location 基础知识
1.location 是在 server 块中配置。
2.可以根据不同的 URI 使用不同的配置(location 中配置),来处理不同的请求。
3.location 是有顺序的,会被第一个匹配的location 处理。
Location 配置demo
1.=,精确匹配

        location = / {
            #规则
        }
        # 则匹配到 ` http://www.example.com/ ` 这种请求。 
2.~,大小写敏感

        location ~ /Example/ {
                #规则
        }
        #请求示例
        # http://www.example.com/Example/  [成功]
        # http://www.example.com/example/  [失败]
3.~*,大小写忽略

    location ~* /Example/ {
                #规则
    }
    # 则会忽略 uri 部分的大小写
    # http://www.example.com/Example/  [成功]
    # http://www.example.com/example/  [成功]
4.^~,只匹配以 uri 开头

    location ^~ /img/ {
            #规则
    }
    #以 /img/ 开头的请求,都会匹配上
    # http://www.example.com/img/a.jpg   [成功]
5.@,nginx内部跳转

    location /img/ {
        error_page 404 @img_err;
    }
    
    location @img_err {
        # 规则
    }
    #以 /img/ 开头的请求,如果链接的状态为 404。则会匹配到 @img_err 这条规则上。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值