• [nginx]默认ngixn.conf配置文件源码解析


    备注:因为经常使用nginx部署php项目,所以源码带有php配置注释例子


    #user nginx nginx;

    Nginx用户及组:用户组

    默认为#user nobody;

    worker_processes 4;

    工作进程:通常根据硬件调整,等于CPU处理机数量或两倍数量

    #error_log  logs/error.log;

    #error_log  logs/error.log  notice;

    #error_log  logs/error.log  info;

    错误日志:logs目录,存放日志路径

    #pid logs/nginx.pid

    pid:进程标识符的存放路径

    events {

      #use epoll;

    使用epoll的I/O模型,epoll使用于Linux内核2.6版本及以后的系统

    nginx与apache相类,针对不同的OS,有不同的事件模型:

    A)标准事件模型

    Select、poll属于标准事件模型,如果当前系统不存在更有效的方法(如epoll),nginx会选择select或poll

    B)高效事件模型

    Epoll:使用于Linux内核2.6版本及以后的系统。

    Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。

    等等...

      worker_connections 204800;

    每一个工作进程的最大连接数量,根据硬件调整,可以尽量大,但别吧CPU跑到100%就行。

    每一个进程允许的最多连接数,理论上=worker_processes*worker_connections

      #keepalive_timeout 60;

    设置超时时间

      #client_header_buffer_size 4k;

    设置客户端请求头部的缓冲区大小。可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小(分页大小可以使用命令getconf PAGESIZE获取)

    注意,client_header_buffer_size该值必须设置为“系统分页大小”的整倍数

      #open_file_cache max=65535 inactive=60s;

    为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存

      #open_file_cache_valid 80s;

    设置多久检查一次缓存的有效信息

      #open_file_cache_min_uses 1;

    open_file_cache指令中的inactive参数时间内文件的最少使用次数,比如60s。

    如果超过这个时间,文件描述符一直是在缓存中打开的,如设置为1,即如果有一个文件在inactive时间内一次没被使用,它将被移除

    }

    设定http服务器,利用它的反向代理功能提供负载均衡支持,通过不同的域名请求分发到不同的项目目录中

    http {  

      include mime.types;

    设定mime类型,类型由mime.types文件定义

      default_type application/octet-stream;

      #log_format main '$remote_addr - $remote_user [$time_local] "$request" '

      #         '$status $body_bytes_sent "$http_referer" '

      #            '"$http_user_agent" "$http_x_forwarded_for"';

      #log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';

    设置日志格式

    $remote_addr和$http_x_forwarded_for用来记录客户端的ip地址;

    $remote_user:用来记录客户端用户名称;

    $time_local: 用来记录访问时间与时区;

    $request: 用来记录请求的url与http协议;

    $status: 用来记录请求状态;成功是200,

    $body_bytes_sent :记录发送给客户端文件主体内容大小;

    $http_referer:用来记录从那个页面链接访问过来的;

    $http_user_agent:记录客户浏览器的相关信息

    通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

      #access_log  logs/host.access.log  main;  

    用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径

      sendfile on;

      #tcp_nopush on;

    sendfile指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime

    tcp_nopush允许或禁止使用socket的TCP_CORK的选项,此选项仅在使用sendfile的时候使用

      #keepalive_timeout 0;

      keepalive_timeout 65;

    keepalive超时时间。

      #gzip on;

      gzip on;

      upstream bakend {

    定义负载均衡设备的ip及设备状态

    bakend为访问域名image.***.com,比如cms.project.com,对于其他域名访问,如www.project.com,同样使用upstream配置

        server 127.0.0.1:8027;

        server 127.0.0.1:8028;

        server 127.0.0.1:8029;

        hash $request_uri;

      }

    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;
    }

    示例:

    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;
    }

    1.down表示单前的server暂时不参与负载

    2.weight为weight越大,负载的权重就越大。

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

    备注:可以配置多个upstream,即支持多组的负载均衡,用来给不同的server虚拟机使用

    配置虚拟机

      server {

        listen 80;

    配置监听端口

        server_name image.***.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

    配置访问域名

        location / {

          root  /opt/javaweb/tianti-module-gateway;

          index  index.html index.html;

        }

    根目录访问

        location /static {

          root  /opt/javaweb/tianti-module-gateway;

        }

    含static目录访问

        location ~* .(mp3|exe)$ {

          root /opt/javaweb/tianti-module-admin;

          expires 24h;

        }

    以“mp3|exe”结尾的地址

        error_page  500 502 503 504  /50x.html;

        location = /50x.html {

          root  html; 

        }

      }

    server {

      ...

      location / {

    对根目录访问进行负载均衡

          root  /opt/javaweb/tianti-module-admin;

          index  index.html index.html;

     

          #proxy_pass http://img_relay$request_uri;

          proxy_pass  http://127.0.0.1:8080;

    设置被代理服务器的端口嗯或套接字,以及URL

    该例设置动态请求都转发到http://127.0.0.1:808的tomcat应用去处理

          proxy_set_header Host $host;

          proxy_set_header X-Real-IP $remote_addr;

          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    以上三行,目的是将代理服务器收到的用户的信息传送到真实的tomcat服务器上

          proxy_set_header REMOTE-HOST $remote_addr;

        }

      ...

    }

      


    更多详细了解可以阅读另一位博友的文章  

  • 相关阅读:
    ubuntu 16.04 安装 python selenium
    DNS 小问题
    Ubuntu下安装setuptools
    ubuntu16.04LTS更换阿里源
    Ubuntu下安装 Phantomjs
    root和user切换
    Navicat破解安装教程
    urllib2
    MySQL划重点-查询-聚合-分组
    vi编辑器
  • 原文地址:https://www.cnblogs.com/hoanfir/p/9153634.html
Copyright © 2020-2023  润新知