- 日志
下面我们看一下Nginx官方给出的nginx.config可有的全部配置内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| user www www; ## Default: nobody # 在Nginx启动的时候会启动一个Master进程,和N个worker进程,Master讲接收到的任务分配给worker进程执行. worker进程数一般与主机的CPU的核心数相等 worker_processes 5; ## Default: 1 # 错误日志的输出位置. (TODO 错误日志指的是哪些?) error_log logs/error.log; # Nginx启动时的主进程ID pid logs/nginx.pid; # worker进程能打开的最多的文件数(TODO 在正式环境中Nginx都会打开什么文件? 指的是Socket连接吗?) worker_rlimit_nofile 8192;
# events模块, 包含nginx中所有处理连接的设置 events { # worker进程能打开的最大的连接数 (小于worker_rlimit_nofile数) worker_connections 4096; ## Default: 1024 }
# http模块, 用于处理http请求 http { # 引用mime.types配置, 主要是配置HTTP请求中的mineType类型 include conf/mime.types; # 引用nginx的代理配置. (TODO) include /etc/nginx/proxy.conf; # 为nginx引用cgi配置 include /etc/nginx/fastcgi.conf; # 指定当HTTP请求没有任何请求路径时演示的界面. index index.html index.htm index.php;
# default_type application/octet-stream; # log输出格式 log_format main '$remote_addr - $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
# 访问nginx时, 记录的http请求的日志存储位置 (TODO 如何以时间分割文件?) access_log logs/access.log main; # sendfile并不是发送文件, 而是设置磁盘和TCP Socket传输数据时直接通过系统缓存实现, 不再经过用户区的Read, write操作 sendfile on; # 设置在发送HTTP头文件时一次性全部发送, 而不是一个接一个的发送. (TODO) tcp_nopush on; # TODO server_names_hash_bucket_size 128; # this seems to be required for some vhosts
# 开启一个网络监听服务 server { # php/fastcgi # 该server监听的端口 listen 80; # 绑定到的域名地址, 一般我们在主机都是使用localhost server_name domain1.com www.domain1.com; # 该server生成的日志的保存地址 access_log logs/domain1.access.log main; # 指定http请求中主机资源起始位置, 也就是`http://localhost:8090/`后面的位置 root html;
# 所有请求以.php结尾的文件都到下面的代理地址中进行代理请求 location ~ \.php$ { fastcgi_pass 127.0.0.1:1025; } }
# 再设置一个网络服务 server { # simple reverse-proxy listen 80; server_name domain2.com www.domain2.com; access_log logs/domain2.access.log main;
# serve static files location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /var/www/virtual/big.server.com/htdocs; expires 30d; }
# 反向代理设置, 将/下所有的请求进行转发 location / { #设置反向代理的地址, 將80端口接受到的请求转发到localhost的8080端口上 proxy_pass http://127.0.0.1:8080; } }
# 设置反向代理 upstream big_server_com { # 按照权重将代理过来的请求代理到俩个代理服务器上 server 127.0.0.3:8000 weight=5; server 127.0.0.3:8001 weight=5; server 192.168.0.1:8000; server 192.168.0.1:8001; }
server { # simple load balancing listen 80; server_name big.server.com; access_log logs/big.server.access.log main;
location / { # 设置反向代理, 代理到big_server_com上(upstream刚刚定义的) proxy_pass http://big_server_com; } } }
|
上面谈到的location涉及到的内容较多, 我们单独介绍一下:
nginx location语法
1
| location [=|~|~*|^~] /uri/ { … }
|
=
严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
~
为区分大小写匹配(可用正则表达式)
~*
为不区分大小写匹配(可用正则表达式)
!~
区分大小写不匹配
!~*
不区分大小写不匹配
^~
如果路径匹配那么不测试正则表达式。
上面的配置引用里其他的配置文件,而且很多配置没有配置选项,下面是Nginx官网给出的另一种配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
| user www www; worker_processes 2; pid /var/run/nginx.pid;
# [ debug | info | notice | warn | error | crit ] error_log /var/log/nginx.error_log info;
events { worker_connections 2000; # use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ; use kqueue; }
http { include conf/mime.types; default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"';
log_format download '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_range" "$sent_http_content_range"';
# HTTP请求,客户端相关设置 client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m;
client_header_buffer_size 1k; large_client_header_buffers 4 4k;
# 消息发送时开启gzip设置 gzip on; gzip_min_length 1100; gzip_buffers 4 8k; gzip_types text/plain;
output_buffers 1 32k; postpone_output 1460;
sendfile on; tcp_nopush on;
tcp_nodelay on; send_lowat 12000;
keepalive_timeout 75 20;
# lingering_time 30; # lingering_timeout 10; # reset_timedout_connection on;
server { listen one.example.com; server_name one.example.com www.one.example.com;
access_log /var/log/nginx.access_log main;
location / { proxy_pass http://127.0.0.1/; proxy_redirect off;
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; client_body_buffer_size 128k;
client_body_temp_path /var/nginx/client_body_temp;
proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_send_lowat 12000;
proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k;
proxy_temp_path /var/nginx/proxy_temp;
charset koi8-r; }
error_page 404 /404.html;
location /404.html { root /spool/www;
charset on; source_charset koi8-r; }
location /old_stuff/ { rewrite ^/old_stuff/(.*)$ /new_stuff/$1 permanent; }
location /download/ { valid_referers none blocked server_names *.example.com;
if ($invalid_referer) { #rewrite ^/ http://www.example.com/; return 403; }
# rewrite_log on; # rewrite /download/*/mp3/*.any_ext to /download/*/mp3/*.mp3 rewrite ^/(download/.*)/mp3/(.*)\..*$ /$1/mp3/$2.mp3 break;
root /spool/www; # autoindex on; access_log /var/log/nginx-download.access_log download; }
location ~* ^.+\.(jpg|jpeg|gif)$ { root /spool/www; access_log off; expires 30d; } } }
|
日志
1 2 3 4
| log_format main '$server_name $remote_addr - $remote_user [$time_local] "$request" ' '$status $uptream_status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '$ssl_protocol $ssl_cipher $upstream_addr $request_time $upstream_response_time';
|
- $server_name:虚拟主机名称。
- $remote_addr:远程客户端的IP地址。-:空白,用一个“-”占位符替代,历史原因导致还存在。
- $remote_user:远程客户端用户名称,用于记录浏览者进行身份验证时提供的名字,如登录百度的用户名scq2099yt,如果没有登录就是空白。
- $time_local:访问的时间与时区,比如18/Jul/2012:17:00:01 +0800,时间信息最后的”+0800”表示服务器所处时区位于UTC之后的8小时。
- $request:请求的URI和HTTP协议,这是整个PV日志记录中最有用的信息,记录服务器收到一个什么样的请求
- $status:记录请求返回的http状态码,比如成功是200。
- $uptream_status:upstream状态,比如成功是200.
- $body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。
- $http_referer:记录从哪个页面链接访问过来的。
- $http_user_agent:客户端浏览器信息
- $http_x_forwarded_for:客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
- $ssl_protocol:SSL协议版本,比如TLSv1。
- $ssl_cipher:交换数据中的算法,比如RC4-SHA。
- $upstream_addr:upstream的地址,即真正提供服务的主机地址。
- $request_time:整个请求的总时间。
- $upstream_response_time:请求过程中,upstream的响应时间。