Nginx 配置文件

本文根据线上环境的nginx.conf文件,讲解常用配置项的使用。

1 Nginx 配置文件

#user  nobody;
worker_processes  8;
worker_cpu_affinity 10000000 01000000 00100000 00010000 00001000 00000100 00000010 00000001;
#error_log  logs/error.log  notice;
pid        logs/nginx.pid;
worker_rlimit_nofile  65535;
events {
    use epoll;
    worker_connections  65535;
    #multi_accept on;
    #accept_mutex on;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent rt=$request_time '
                      '"$http_referer" "$http_x_forwarded_for" '
                      '$upstream_addr "$http_user_agent" ';
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65s 60s;
    charset utf-8;
    #gzip  on;
    #后台服务
    upstream appBackend{
        least_conn;
        #fair;
        server 172.16.9.95:8080;
        server 172.16.9.96:8080;
        server 172.16.9.125:8080;
        keepalive 256;
    }
    #视频后台服务
    upstream videoBackend{
	#保证session一致性
	    ip_hash;
        server 172.16.9.95:8080;
        server 172.16.9.96:8080;
        server 172.16.9.125:8080;
    }
    server {
        listen       80;
        server_name  app.backend.com;
        client_max_body_size 10M;
        access_log logs/app.access.log main;
        error_log logs/app.error notice;

        location / {
            proxy_pass http://appBackend;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        #/pj/dbas/file/resource/是虚拟共享目录,存储图片等文件。
        location ^~ /resource/ {
           root /pj/dbas/file/;
        }
        #视频,静态文件
        location ^~ /live/  {
           root /pj/dbas/file/;
        }
        #视频,后台服务
        location /camera/ {
           proxy_pass http://videoBackend;
           proxy_http_version 1.1;
           proxy_set_header Connection "";
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

2 各配置项说明

#user  nobody;	#运行Nginx服务的用户和用户组。默认所有人都能启动Nginx进程
worker_processes  8; #worker进程数量,建议配置为CPU核心数,通过lscpu 查看。
worker_cpu_affinity 10000000 01000000 00100000 00010000 00001000 00000100 00000010 00000001; #绑定worker进程到指定的CPU内核,避免多个进程同时争抢一个CPU。
#error_log  logs/error.log  notice; #全局错误日志存放路径和级别,日志级别: debug, info, notice, warn, error, crit,alert,emerg等,默认为crit。
pid        logs/nginx.pid; # master进程pid文件
worker_rlimit_nofile  65535;
events {
    use epoll; #事件驱动模型:select、poll、kqueue、epoll、rtsig、/dev/poll和eventport
    worker_connections  65535;  #每个worker同时开启最大连接数。不能大于操作系统支持打开的最大文件句柄数。ulimit -n
    #multi_accept on;  #每个worker进程能同时处理多个新到达的网络连接,默认关闭
    #accept_mutex on; #序列化worker进程处理连接,防止worker争抢连接,避免惊群现象,默认开启
}

http {
    include       mime.types; #引用外部mime.types文件
    default_type  application/octet-stream; #未在mime.types文件中出现的类型采用此配置为默认MimeType。如未配置,默认为text/plain。
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent rt=$request_time '
                      '"$http_referer" "$http_x_forwarded_for" '
                      '$upstream_addr "$http_user_agent" ';  #自定义日志格式,与 access_log 联用。
    sendfile        on; #是否采用zeroCopy传输文件
    #sendfile_max_chunk 128k; # worker进程每次调用sendfile()传输数据量最大不能超过这个值;0表示无限制;默认为0。
    #tcp_nopush     on;
    keepalive_timeout  65s 60s; # 连接超时时间,在服务端保持连接60s,发给用户端应答报文 Header 中 Keep-Alive: timeout=60。
    #keepalive_requests 100; #长连接最大请求次数,默认100。
    charset utf-8; #若应答报文中Content-type没有charset值域,则增加:charset=UTF-8
    #gzip  on;
    #后台服务
    upstream appBackend{
        least_conn; #配置最少连接负载均衡策略
        #fair;
        server 172.16.9.95:8080;
        server 172.16.9.96:8080;
        server 172.16.9.125:8080;
        keepalive 256; #每个worker运行该服务器组保持的空闲连接数上限
    }
    #视频后台服务
    upstream videoBackend{
	    ip_hash; #保证session一致性
        server 172.16.9.95:8080;
        server 172.16.9.96:8080;
        server 172.16.9.125:8080;
    }
    server {
        listen       80; #监听本地80端口。
        server_name  app.backend.com; #虚拟主机名,与DNS名称相同。支持正则匹配和通配符匹配
        client_max_body_size 10M; #限制上传文件的大小
        access_log logs/app.access.log main; #日志文件存放路径(名称)和格式,与log_format联用。
        error_log logs/app.error notice;

        location / {
            proxy_pass http://appBackend; #被代理服务器地址
            proxy_http_version 1.1; # HTTP协议版本,默认1.0
            proxy_set_header Connection ""; #设置Connection为空串,以禁止传递头部到后端,默认close
            proxy_set_header Host $host; #设置Host头域,默认为 $proxy_host
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #后端通过此头域获取客户端ip
        }
        #/pj/dbas/file/resource/是虚拟共享目录,存储图片等文件。
        location ^~ /resource/ {
           root /pj/dbas/file/; # 图片等文件根目录
        }
        #视频,静态文件
        location ^~ /live/  {
           root /pj/dbas/file/; # web资源根目录
        }
        #视频,后台服务
        location /camera/ {
           proxy_pass http://videoBackend;
           proxy_http_version 1.1;
           proxy_set_header Connection "";
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

3 重要配置项说明

  • worker_processes 。与CPU内核数相等,充分利用CPU并行处理。
  • worker_cpu_affinity …。绑定worker进程到指定的CPU内核。避免多个进程同时争抢一个CPU。
  • 反向代理下,Nginx 能同时处理的客户端请求数:worker_processess * worker_connections /4
  • accept_mutex [on|off]。是否打开accept锁,序列化worker进程处理连接,防止worker争抢连接,避免惊群现象,默认开启。
  • multi_accept [on|off]。每个worker进程能同时处理多个新到达的网络连接,默认关闭。
  • server_name_in_redirect on|off。配置server_name使用,表示在重定向请求时会使用server_name里配置的第一个主机名代替原先请求中的Host头部。off关闭时,表示重定向请求时使用请求本身的Host头部。默认on。
  • 文件路径配置,root和alias区别:
    root:定义资源文件相对于http请求的根目录。如:
    location /resource/ {
    root /file/
    }
    一个请求URI是/resouce/index.html,nginx将返回服务器本地磁盘上/file/resource/index.html文件。
    alias:设置别名,替换匹配到的路径。如:
    location /resource/ {
    alias /file/
    }
    一个请求URI是/resouce/index.html,nginx将返回服务器本地磁盘上/file/index.html文件。
    区别:root配置项,指定“匹配URI”的父级目录,不会改变请求URI。alias配置项,重命名“匹配URI”,与“匹配URI”同级。
  • client_max_body_size 1m。请求最大包体,根据请求中Content-Length字段限制上传文件大小,默认1M。
  • proxy_pass配置项后是否带’/’(是否带URI)。如果不带URI,不会改变请求URI;如果包含URI,Nginx会使用新的URI代替标识URI。
  • proxy_set_header Host $host,默认值$proxy_host。
    $proxy_host:proxy_pass指令配置的后端服务名称(和端口)。例如:
    upstream backend {
    server localhost:9191;
    }
    location / {
    proxy_pass http://backend;
    proxy_set_header Host $proxy_host;
    }
    此时后端Host头域的值为"backend"。
    location / {
    proxy_pass http://localhost:9191;
    proxy_set_header Host $proxy_host;
    }
    此时后端Host头域的值为localhost:9191。
    $http_host:将目前请求头域中Host的值填充成客户端地址。若头域中无Host,将不传递到后端。
    $host:依次尝试从:客户端请求行中的hostname;头域中Host;当前location块的server_name中获取。
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for。如果当前请求头中没有"X-Forwarded-For",则等于$remote_addr(客户端ip);如果当前请求头中有"X-Forwarded-For",则将$remote_addr值追加在原始值后面,以逗号分隔,用在多级nginx转发的场景。
  • upstream 中 least_conn 应该在keepalive前面。否则在启动(重新加载)nginx时会出现警告:nginx: [warn] load balancing method redefined in /usr/local/nginx/conf/nginx.conf:39

3 配置文件下载

https://gitee.com/thanksm/nginx_learn/tree/master/nginx_conf

你可能感兴趣的:(nginx)