nginx配置参数详解

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/error.log info;

#进程文件
pid /var/run/nginx.pid;

#一个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 mime.types;
    
#默认文件类型
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/access.log";

#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 www.loclhost.test;

#https开启
listen 443 ssl;
ssl_certificate www.loclhost.test.pem;
ssl_certificate_key www.loclhost.test.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 index.php;
    
#定义错误提示页面    
error_page   500 502 503 504  /50x.html;

#设定本虚拟主机的访问日志
access_log  logs/host.access.log  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 www.locahost.test;
    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 www.locahost.test;
    location / {
        if (!-e $request_filename) {
            rewrite  ^(.*)$  /index.php?s=$1  last;  
            break;
        }
    }
}

#uploads目录禁用php文件执行demo
server{
    listen 80;
    server_name www.locahost.test;
    location ~* ^/uploads/.*\.(php|php5)$ {
        deny all;
    }
}                

#php文件使用php-fpm执行demo
server{
    listen 80;
    server_name www.locahost.test;
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_connect_timeout 86400;
        fastcgi_send_timeout 86400;
        fastcgi_read_timeout 86400;
        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include        fastcgi_params;
        include fastcgi.conf;
    }
}    

  • 27
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值