Nginx:配置常⽤参数(详解)
⽬录
最近公司⽤到Nginx服务器,本着复习⼀遍,顺便写个笔记的想法,把常⽤参数配置总结⼀下:
1、模块简介
1.1 主模块
# 配置⽤户或者组,默认为nobody nobody。
#user www www;
#Nginx开启的worker进程数,建议为CPU的核数
#worker_processes 2;
#指定nginx进程运⾏⽂件存放地址
#pid /nginx/pid/nginx.pid;
#指定⽇志路径,级别。这个设置可以放⼊全局块、http块、server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg error_log log/error.log debug;
#可以在任意地⽅使⽤include指令实现配置⽂件的包含,类似于apache中的include⽅法,可减少主配置⽂件长度。
include vhosts/*.conf;
1.2 事件模块
events {
#设置⽹路连接序列化,防⽌惊现象发⽣,默认为on
accept_mutex on;
#默认: 500ms 如果⼀个进程没有互斥锁,它将延迟⾄少多长时间。默认情况下,延迟是500ms 。
accept_mutex_delay 100ms;
#设置⼀个进程是否同时接受多个⽹络连接,默认为off
multi_accept on;
#事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport,不建议设置,nginx会⾃⾏选择
#use epoll;
#最⼤连接数,默认为512
worker_connections  1024;
}
1.3 http部分
http {
#⽂件扩展名与⽂件类型映射表
include      pes;
# 默认⽂件类型,默认为text/plain
default_type  application/octet-stream;
#取消服务⽇志
#access_log off;
#允许sendfile⽅式传输⽂件,默认为off,可以在http块,server块,location块。
sendfile on;
#每个进程每次调⽤传输数量不能⼤于设定的值,默认为0,即不设上限。
sendfile_max_chunk 100k;
#连接超时时间,默认为75s,可以在http,server,location块。
keepalive_timeout 65;
#开启gzip资源压缩
gzip  on;
# 负载均衡,详细可看了⼀篇⽂章:learnku/articles/36737
upstream blog {
server 192.167.20.19:8081;
server 192.168.10.121:8080 weight=5;
}
#设定请求缓冲
client_header_buffer_size    128k;
large_client_header_buffers  4 128k;
#上传⽂件的⼤⼩限制默认1m
client_max_body_size 8m;
server {
#单连接请求上限次数。
keepalive_requests 120;
#监听端⼝
listen      80;
#监听地址
server_name  blog.13sai;
#设定⽇志格式
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log  /data/logs/access.log  main;
# 根⽬录
root /www/web/public;
# 定义错误提⽰页⾯
error_page  500 502 503 504 /50x.html;
location /static/ {
#root与alias主要区别在于nginx如何解释location后⾯的uri,这会使两者分别以不同的⽅式将请求映射到服务器⽂件上。            #root的处理结果是:root路径+location路径
#alias的处理结果是:使⽤alias路径替换location路径
alias /www/static/;
#过期30天,静态⽂件不怎么更新,过期可以设⼤⼀点,如果频繁更新,则可以设置得⼩⼀点。
expires 30d;
}
# 处理php请求到fpm端⼝
location ~ \.php$ {
fastcgi_pass  127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
location / {
proxy_set_header Host $host;
proxy_set_header  X-Real-IP  $remote_addr;
proxy_pass  blog;  #请求转向blog 定义的服务器列表
}
#禁⽌访问⽂件
location ~ /.git {
deny all;
allow 127.0.0.1; #允许的ip
}
}
}
2、部分参数详细说明
2.1 server_name
1.⾸先选择所有字符串完全匹配的server_name,如 blog.13sai 。
2.其次选择通配符在前⾯的server_name,如 *.13sai。
3.再次选择通配符在后⾯的server_name,如www.13sai.* 。
4.最后选择使⽤正则表达式才匹配的server_name,如 ~^\.sai\$
如果都不匹配
1、优先选择listen配置项后有default或default_server的
2、到匹配listen端⼝的第⼀个server块
2.2 location
location
语法: location[=|~|~*|^~|@]/uri/{...}
配置块:
server location会尝试根据⽤户请求中的URI来匹配上⾯的/uri表达式,
如果可以匹配,就选择 location{}块中的配置来处理⽤户请求。
location表达式类型:
~ 表⽰执⾏⼀个正则匹配,区分⼤⼩写;
~* 表⽰执⾏⼀个正则匹配,不区分⼤⼩写;
^~ 表⽰普通字符匹配。使⽤前缀匹配。如果匹配成功,则不再匹配其他location;
= 进⾏普通字符精确匹配。也就是完全匹配;
@ 它定义⼀个命名的 location,使⽤在内部定向时,例如 error_page, try_files
优先级:
等号类型(=)的优先级最⾼。⼀旦匹配成功,则不再查其他匹配项;
前缀普通匹配(^~)优先级次之。不⽀持正则表达式。使⽤前缀匹配,如果有多个location匹配的话,则使⽤表达式最长的那个;
正则表达式类型(~ ~*)的优先级次之。⼀旦匹配成功,则不再查其他匹配项;
常规字符串匹配,如果有多个location匹配的话,则使⽤表达式最长的那个。
2.3 return
语法:return code [text] return code URL;
return URL;
配置块:server,location,if
该指令⽤于结束规则的执⾏并返回状态吗给客户端。
状态码包括:
204(No Content)、
400(Bad Request)、
402(Payment Required)、
403(Forbidden)
404(Not Found)、
405(Method Not Allowed)、
406(Not Acceptable)、
408(Request Timeout)、
410(Gone)、
411(Length Required)、
413(Request Entity Too Large)、
416(Requested Range Not Satisfiable)、 500(Internal Server Error)、
501(Not Implemented)、
502(Bad Gateway)、
503(Service Unavailable)
504(Gateway Timeout)。
例如,⽰例,如果访问的URL以.sh .bash 结尾,返回状态码403
location ~ .*\.(sh|bash)?$ {
return 403;
}
2.4 rewrite
语法:rewrite regex replacement [flag];
默认值:—
配置块:server, location, if
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。正则:perl兼容正则表达式语句进⾏规则匹配替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite⽀持的flag标记
nginx 配置文件
执⾏顺序:
1. 执⾏server块的rewrite指令(这⾥的块指的是server关键字后{}包围的区域,其它xx块类似)
2. 执⾏location匹配
3. 执⾏选定的location中的rewrite指令
如果其中某步URI被重写,则重新循环执⾏1-3,直到到真实存在的⽂件
如果循环超过10次,则返回500 Internal Server Error错误
2.5 if指令
语法:if(condition){...}
默认值:⽆
配置块:server,location
对给定的条件condition进⾏判断。如果为真,⼤括号内的rewrite指令将被执⾏。
if条件(conditon)可以是如下任何内容:
⼀个变量名;false如果这个变量是空字符串或者以0开始的字符串;
使⽤= ,!= ⽐较的⼀个变量和字符串
是⽤~, ~*与正则表达式匹配的变量,如果这个正则表达式中包含},;则整个表达式需要⽤" 或' 包围
使⽤-f, !-f 检查⼀个⽂件是否存在
使⽤-d, !-d 检查⼀个⽬录是否存在
使⽤-e, !-e 检查⼀个⽂件、⽬录、符号链接是否存在
使⽤-x, !-x 检查⼀个⽂件是否可执⾏
实例:
if ($http_user_agent~*(mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
rewrite ^.+ /mobile last; #跳转到⼿机站
}
if ($request_method = POST) {
return 405;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
2.6 last & break
1. last 和 break 当出现在location 之外时,两者的作⽤是⼀致的没有任何差异。
注意⼀点就是,他们会跳过所有的在他们之后的rewrite 模块中的指令,去选择⾃⼰匹配的location
2. last 和 break 当出现在location 内部时,两者就存在了差异
-- last: 使⽤了last 指令,rewrite 后会跳出location 作⽤域,重新开始再⾛⼀次刚刚的⾏为
-- break: 使⽤了break 指令,rewrite后不会跳出location 作⽤域。它的⽣命也在这个location中终结。
解释通俗易懂:
last:重新将rewrite后的地址在server标签中执⾏
break:将rewrite后的地址在当前location标签中执⾏
2.7 permanent & redirect
permanent: 永久性重定向。请求⽇志中的状态码为301
redirect:临时重定向。请求⽇志中的状态码为302
3、应⽤
3.1 估算并发
Nginx 作为http服务器的时候:
max_clients = worker_processes * worker_connections/2
Nginx 作为反向代理服务器的时候:
max_clients = worker_processes * worker_connections/4
3.2 限制每个IP的并发连接数
定义⼀个叫“two”的记录区,总容量为 10M(超过⼤⼩将请求失败,以变量 $binary_remote_addr 作为会话的判断基准(即⼀个地址⼀个会话)。 限制 /download/ ⽬录下,⼀个会话只能进⾏⼀个连接。 简单点,就是限制 /download/ ⽬录下,⼀个IP只能发起⼀个连接,多过⼀个,⼀律503。如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。