1、nginx内置变量
$arg_PARAMETER GET请求中变量名PARAMETER参数的值。
$args URL中的指令包含的参数
$binary_remote_addr 二进制码形式的客户端地址
$body_bytes_sent 传送页面的字节数
$content_length 请求头中的Content-length字段
$content_type 请求头中的Content-Type字段
$cookie_COOKIE cookie COOKIE的值
$document_root 保存了针对当前资源的请求的系统根目录
$document_uri 保存了当前请求中不包含指令的URI
$host 存放了请求的 host 名称
$hostname 机器名使用 gethostname系统调用的值
$http_HEADER HTTP请求头中的内容,HEADER为HTTP请求中的内容转为小写,-变为_(破折号变为下划线)
$sent_http_HEADER HTTP响应头中的内容,HEADER为HTTP响应中的内容转为小写,-变为_(破折号变为下划线)
$http_user_agent 客户端使用的浏览器的详细信息
$is_args 如果$args设置,值为"?",否则为""
$limit_rate 如果 nginx 服务器使用 limit_rate 配置了显示网络速率,则会显示,如果没有设置,则显示 0
$nginx_version 当前运行的nginx版本号
$query_string 与$args相同
$remote_addr 存放了客户端的IP地址
$remote_port 客户端请求 nginx 服务器时随机打开的端口,这是每个客户端自己的端口
$remote_user 已经经过Auth Basic Module验证的用户名
$request_uri 这个变量等于包含一些客户端请求参数的原始URI,它无法修改
$request_body_file 做反向代理时发给后端服务器的本地资源的名称
$request_method 请求资源的方式
$request_filename 当前请求的资源文件的路径名称,由root或alias指令与URI请求生成的文件绝对路径
$request_body 这个变量包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义
$request_completion 如果请求成功,设为"OK";如果请求未完成或者不是一系列请求中最后一部分则设为空
$scheme 请求的协议
$server_protocol 保存了客户端请求资源使用的协议的版本
$server_addr 保存了服务器的 IP 地址
$server_name 请求的服务器的主机名
$server_port 请求的服务器的端口号
$uri 请求中的当前URI,不同于浏览器传递的request_uri的值,它可以通过内部重定向,或者使用index指令进行修改
2、nginx自定义变量
set $variable value
3、主配置段
#定义Nginx运行的用户和用户组
user www www;
#nginx进程数,建议设置为等于CPU总核心数
worker_processes 8;
#全局错误日志定义类型
error_log /var/log/nginx/ info;
#进程文件
pid /var/run/;
#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致
worker_rlimit_nofile 65535;
#计时器解析度(请求到达nginx,nginx相应用户请求后,要获取系统时间并记录日志,高并发的时候可能每秒钟获取很多很多次)
#降低此值,可以减少gettimeofday()系统调用的次数
timer_resolution 100ms;
#指明worker进程的nice值:数字越小,优先级越高
#nice值范围:-20,19
#对应的优先级:100,139
worker_priority number;
4、events模块
#指明使用的时间模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型.
use epoll;
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 65535;
#master调度用户请求至个worker进程时使用的负载均衡锁:on表示能让多个worker轮流地、序列化的响应新请求
accept_mutex {off|on}
#延迟等待时间,默认为500ms
accept_mutex_delay time;
#accept_mutex用到的锁文件路径
lock_file file;
#告诉nginx收到一个新链接通知后接受尽可能多的链接
multi_accept on;
#keepalive超时时间
keepalive_timeout 60;
#客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置
client_header_buffer_size 4k;
#打开文件指定缓存
open_file_cache max=65535 inactive=60s;
#指多长时间检查一次缓存的有效信息
open_file_cache_valid 60s;
#文件缓存最小的访问次数,只有访问超过5次的才会被缓存
open_file_cache_min_uses 5;
#当搜索一个文件时是否缓存错误信息
open_file_cache_errors on;
5、http模块
#打开或关闭错误页面中的nginx版本号
server_tokens on;
#文件扩展名与文件类型映射表
include ;
#默认文件类型
default_type application/octet-stream;
#默认编码
charset utf-8,gbk;
#设定通过nginx上传文件的大小
client_max_body_size 1024m;
#开启高效文件传输模式
sendfile on;
#开启目录列表访问,合适下载服务器,默认关闭。
autoindex on;
#设置nginx在一个数据包里发送所有头文件,而不是一个接一个的发送
tcp_nopush on;
#是否对长连接使用TCP_NODELAY选项,不将多个小文件合并传输
tcp_nodelay on;
#长连接超时时间,单位是秒
keepalive_timeout 120;
#在一个长连接所能够允许请求的最大资源数
keepalive_requests 20;
#为制定类型的User Agent禁用长连接
keepalive_disable [msie6|safari|none];
#读取http请求报文首部的超时时长
client_header_timeout xxxx;
#读取http请求报文body部分的超时时长
client_body_timeout xxxx;
#发送响应报文的超时时长
send_timeout xxxx;
#设置用户保存各种key的共享内存的参数,5m指的是5兆
limit_conn_zone $binary_remote_addr zone=addr:5m;
#用来限制单位时间内的请求数目,以及速度限制。
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
#引用/etc/nginx/vhosts下的所有配置文件,如果主机名众多的情况下可以每个主机名建立一个文件,以方便管理
include /etc/nginx/vhosts/*;
#服务日志
access_log "/logs/Nginx/";
#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#gzip模块设置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
6、upstream模块
#轮询,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream bakend {
server 127.0.0.1:8888;
server 127.0.0.2:8888;
}
#weight,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,权值越高被分配到的几率越大。
upstream bakend {
server 127.0.0.1 weight=10;
server 127.0.0.2 weight=5;
}
#ip_hash,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream bakend {
ip_hash;
server 127.0.0.1:88;
server 127.0.0.2:80;
}
#fair,按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream bakend {
server 127.0.0.1:88;
server 127.0.0.2:80;
fair;
}
#url_hash,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backend {
server 127.0.0.1:888;
server 127.0.0.2:888;
hash $request_uri;
hash_method crc32;
}
7、server模块
#当超过限制规则后,返回的响应状态码,默认是503。
limit_conn_status 503;
#当达到最大限制规则的连接数后,记录日志的等级。
limit_conn_log_level notice;
#监听端口
listen 80;
#服务域名或IP
server_name ;
#https开启
listen 443 ssl;
ssl_certificate ;
ssl_certificate_key ;
ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
#定义服务器的默认网站根目录位置
root /usr/local/nginx/html;
#定义首页索引文件的名称
index ;
#定义错误提示页面
error_page 500 502 503 504 /;
#设定本虚拟主机的访问日志
access_log logs/ main;
8、location模块
#语法:location [=|~|~*|^~] uri {...}
#指令(必需参数):location
#前缀(可选参数):[=|~|~*|^~]
#匹配的网站网址(必需参数):uri
#匹配URI之后要执行的配置段(必需参数):{...}
正则解释:
= #表示精确匹配,优先级也是最高的
^~ #表示uri以某个常规字符串开头,理解为匹配url路径即可
~ #表示区分大小写的正则匹配
~* #表示不区分大小写的正则匹配
!~ #表示区分大小写不匹配的正则
!~* #表示不区分大小写不匹配的正则
/ #通用匹配,任何请求都会匹配到
@ #内部服务跳转
(x) #包含x
$ #结束
#反向代理demo
upstream webhost {
ip_hash;
server 127.0.0.1:6666;
server 127.0.0.2:6666;
}
server{
listen 80;
server_name ;
location / {
proxy_pass http://webhost;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以下是一些反向代理的配置,可选.
proxy_set_header Host $host;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
}
#URL重写demo
server{
listen 80;
server_name ;
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /?s=$1 last;
break;
}
}
}
#uploads目录禁用php文件执行demo
server{
listen 80;
server_name ;
location ~* ^/uploads/.*\.(php|php5)$ {
deny all;
}
}
#php文件使用php-fpm执行demo
server{
listen 80;
server_name ;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index ;
fastcgi_connect_timeout 86400;
fastcgi_send_timeout 86400;
fastcgi_read_timeout 86400;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
include ;
}
}