龙之介大人

Nginx的基础使用一
1. Nginx基本配置1.1 Nginx默认配置语法nginx.conf作为主要的配置文件 include /...
扫描右侧二维码阅读全文
17
2020/02

Nginx的基础使用一

1. Nginx基本配置

1.1 Nginx默认配置语法

nginx.conf作为主要的配置文件
include /etc/nginx/conf.d/*.conf这个包含文件会把conf.d目录下以.conf结尾的后缀配置文件全部包含到主配置文件中.

1.2 全局性和服务级别解释

user    username [groupname]; #指定运行worker进程的用户和组
pid     /path/to/pidfile_name; #指定nginx的pid文件
worker_rlimit_nofile #num; #指定一个worker进程所能够打开的最大文件句柄数;
worker_rlimit_sigpending #num; #设定每个用户能够发往worker进程的信号的数量;

#优化性能相关的配置:
 worker_processes #; #worker进程的个数;通常其数值应该为CPU的物理核心数减1;
worker_cpu_affinity cpumask ...; #cpu亲和性
0000
0001
0010
0100
1000
#worker_processes 6; 
#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000; 

ssl_engine  device; #在存在ssl硬件加速器的服务器上,指定所使用的ssl硬件加速设备;
timer_resolution    t; #每次内核事件调用返回时,都会使用gettimeofday()来更新nginx缓存时钟;timer_resolution用于定义每隔多久才会由gettimeofday()更新一次缓存时钟;x86-64系统上,gettimeofday()代价已经很小,可以忽略此配置;

worker_priority     nice; #-20,19之间的值;

1.3 Event事件模块解释

accept_mutex [on|off] #是否打开Ningx的负载均衡锁;此锁能够让多个worker进轮流地、序列化地与新的客户端建立连接;而通常当一个worker进程的负载达到其上限的7/8,master就尽可能不再将请求调度此worker;

lock_file /path/to/lock_file; #lock文件
accept_mutex_delay #ms; #accept锁模式中,一个worker进程为取得accept锁的等待时长;如果某worker进程在某次试图取得锁时失败了,至少要等待#ms才能再一次请求锁;
multi_accept on|off; #是否允许一次性地响应多个用户请求;默认为Off; 
use [epoll|rtsig|select|poll]; #定义使用的事件模型,建议让nginx自动选择;
worker_connections #; #每个worker能够并发响应最大请求数;

1.4 Debug模式解释

daemon on|off; #是否让ningx运行后台;默认为on,调试时可以设置为off,使得所有信息去接输出控制台;
master_process on|off; #是否以master/worker模式运行nginx;默认为on;调试时可设置off以方便追踪;
error_log /path/to/error_log level; #错误日志文件及其级别;默认为error级别;调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能;

1.5 Server块的解释

#必须使用虚拟机来配置站点;每个虚拟主机使用一个server {}段配置;
server {

}

#非虚拟主机的配置或公共配置,需要定义在server之外,http之内;
http {
    directive value;
    ...
    server {

    }
    server {

    }
    ...
}

1.6 虚拟主机相关配置

server {} #定义一个虚拟主机;nginx支持使用基于主机名或IP的虚拟主机;

listen 
    listen address[:port];
    listen port 

# default_server:定义此server为http中默认的server;如果所有的server中没有任何一个listen使用此参数,那么第一个server即为默认server; 
# rcvbuf=SIZE: 接收缓冲大小;
# sndbuf=SIZE: 发送缓冲大小;
# ssl: https server;

server_name [...];
# server_name可以跟多个主机名,名称中可以使用通配符和正则表达式(通常以~开头);当nginx收到一个请求时,会取出其首部的server的值,而后跟众server_name进行比较;比较方式:
    # 1. 先做精确匹配;www.magedu.com 
    # 1. 左侧通配符匹配;*.magedu.com
    # 1. 右侧通配符匹配;www.abc.com, www.*
    # 1. 正则表达式匹配: ~^.*\.magedu\.com$

server_name_hash_bucket_size 32|64|128; #为了实现快速主机查找,nginx使用hash表来保存主机名;


location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
# 功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置;匹配到时,将被location块中的配置所处理;比如:http://www.nginx.com/images/logo.gif

#    =:精确匹配;
#    ~:正则表达式模式匹配,匹配时区分字符大小写
#    ~*:正则表达式模式匹配,匹配时忽略字符大小写
#    ^~: URI前半部分匹配,不检查正则表达式

#       http://www.nginx.com/index.html
#       http://www.nginx.com/
#       http://www.nginx.com/documents/index.html
#       http://www.nginx.com/images/index.html
#       http://www.nginx.com/images/a.png

#       匹配优先级: 字符字面量最精确匹配、正则表达式检索(由第一个匹配到所处理)、按字符字面量

1.7 文件路径定义

root    path; #设置web资源路径;用于指定请求的根文档目录;
    location / {
        root /www/htdocs;
    }
    location ^~ /images/ {
        root /web;
    }        
    root: root/URI/
        http://www.nginx.com/image/b.html
        -->    /web/image/b.html

alias   path; #只能用于location中,用于路径别名;
    location / {
        root /www/htdocs;
    }
    location ^~ /images/ {
        alias   /web/img;
    }
    alias: alias/
        http://www.nginx.com/image/b.html
        -->     /web/img/b.html

index file ...; #定义默认首页访问那个页面,可参跟多个值;

error_page code ... [=[response]] uri; #当对于某个请求返回错误时,如果匹配上了error_page指令中设定的code,则重定向到新的URI中。错误页面重定向;

try_files path1 [path2 ...] uri; #自左至右尝试读取由path所指定路径,在第一次找到即停止并返回;如果所有path均不存在,则返回最后一个uri; 
    location ~* ^/documents/(.*)$ {
        root    /www/htdocs;
        try_file $uri /docu/$1 /temp.html;
    }

    http://www.nginx.com/documents/a.html
    http://www.nginx.com/docu/a.html
    http://www.nginx.com/temp.html

1.8 网络连接相关设置

keepalive_timeout time; #保持连接的超时时长;默认为75秒;
keepalive_requests n; #在一次长连接上允许承载的最大请求数;
keepalive_disable [msie6 | safari | none ]; #对指定的浏览器禁止使用长连接;
tcp_nodelay on|off; #对keepalive连接是否使用TCP_NODELAY选项;
client_header_timeout time; #读取http请求首部的超时时长;
client_body_timeout time; #读取http请求包体的超时时长;
send_timeout time; #发送响应的超时时长;

1.9 文件操作优化配置

sendfile on|off; #是否启用sendfile功能;

aio on|off; #是否启用aio功能;

open_file_cache max=N [inactive=time]|off; #是否打开文件缓存功能;
#    max: 缓存条目的最大值;当满了以后将根据LRU算法进行置换;
#    inactive: 某缓存条目在指定时长时没有被访问过时,将自动被删除;默认为60s; 
#    缓存的信息包括:
        文件句柄、文件大小和上次修改时间;
        已经打开的目录结构;
            没有找到或没有访问权限的信息;

open_file_cache_errors on|off; #是否缓存文件找不到或没有权限访问等相关信息;

open_file_cache_valid time; #多长时间检查一次缓存中的条目是否超出非活动时长,默认为60s; 

open_file_cache_min_use #; #在inactive指定的时长内被访问超此处指定的次数地,才不会被删除;

1.10 内存及磁盘资源分配:

client_body_in_file_only on|clean|off; #HTTP的包体是否存储在磁盘文件中;非off表示存储,即使包体大小为0也会创建一个磁盘文件;on表示请求结束后包体文件不会被删除,clean表示会被删除;

client_body_in_single_buffer on|off; #HTTP的包体是否存储在内存buffer当中;默认为off;

cleint_body_buffer_size size; #nginx接收HTTP包体的内存缓冲区大小;

client_body_temp_path dir-path [level1 [level2 [level3]]]; # HTTP包体存放的临时目录;
#    client_body_temp_path /var/tmp/client/  1 2

client_header_buffer_size size; #正常情况下接收用户请求的http报文header部分时分配的buffer大小;默认为1k;

large_client_header_buffers number size; #存储超大Http请求首部的内存buffer大小及个数;

connection_pool_size size; #nginx对于每个建立成功的tcp连接都会预先分配一个内存池,此处即用于设定此内存池的初始大小;默认为256;

request_pool_size size; #nginx在处理每个http请求时会预先分配一个内存池,此处即用于设定此内存池的初始大小;默认为4k; 

2. HTTP请求

curl http://www.baidu.com        返回请求内容

curl -v http://www.baidu.com >/dev/null  重定向空设备可查看隐藏头信息

#request信息
> GET / HTTP/1.1                  请求协议
> User-Agent: curl/7.29.0        请求设备
> Host: www.baidu.com            请求地址
> Accept: */*                        请求的类型,这里是任意类型

#response信息
< HTTP/1.1 200 OK        200服务端正常相应
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Sun, 24 Mar 2019 04:05:06 GMT
< Etag: "588604cf-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:43 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

3. Nginx日志类型

error.log 记录处理http请求的错误状态以及nginx本身服务的错误状态
access_log 每次http请求的访问状态

3.1 log_format语法

  • log_format依赖ngx_http_log_module
#log_format语法
Syntax:    log_format name [escape=default|json|none] string ...;
Default:    
log_format combined "...";
Context:    http
  • access_log 配置格式

#access_log输出预览
192.168.0.106 - - [24/Mar/2019:14:54:48 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36" "-"

3.2 Nginx变量

#access.log中输出user-agent值
log_format  main '$http_user_agent'  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

#日志输出类型预览
curl/7.29.0127.0.0.1 - - [24/Mar/2019:15:08:36 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
Nginx内置变量官方:http://nginx.org/en/docs/http/ngx_http_core_module.html#var_status

3.3 log_format变量解释

  • log_format main日志变量的解释
$remote_addr        表示客户端的地址
$remote_user        表示客户端请求nginx认证的用户名
$time_local        表示时间
$request            表示request请求头
$status            表示response的返回状态
$body_bytes_sent    表示返回数据的大小
$http_referer        表示上级页面的地址
$http_user_agent    表示user客户端的信息
$http_x_forwarded_for    表示每一级请求携带的信息
nginx内置变量中文文档:https://www.i7dom.cn/235/2020/17/nginx-doc01.html
最后修改:2020 年 02 月 17 日 05 : 08 PM

发表评论