nginx相关配置

accept_mutex 
  当某一时刻只有一个网络链接到来时,多个睡眠进程会同事被叫醒,叫做惊群问题,这个指令设置为on的时候会对nginx进程接受连接进行序列化,防止多个进程对连接的争抢。默认为on,只能在event中配置
worker_connections 
  主要用来设置允许每一个worker process 同时开启的最大连接数,不能大于文件系统支持打开的文件句柄数目,只能在event中配置
access_log path log_format
  定义访问日志路径,log_format 为日志格式名字,只在http中配置
log_format name string 
  定义日志格式,name 为日志格式名字,string为具体格式定义,只在http中配置
sendfile on | off  
  开启或者关闭sendfile()传送文件,如果这个选项开启,则可以定义下一个指令
sendfile_max_chunk size   
  开启sendfile()传送文件时每次传送最大的大小值
keepalive_timeout timeout  
  服务器对连接的保持时间
keepalive_requests number 
  长连接建立以后,用户端通过此连接发送请求,最大的次数,在server和location块中
listen IP:port | port 
  监听的ip和端口或者只监听端口,此外还可以设置在sock监听
server_name name 
  虚拟主机名,可以设置为多个,用逗号隔开,虚拟主机名可以用正则表达式,在server中设置
  正则表达式的捕获功能:
    server_name ~^www\.(.+)\.com$;
    当请求通过www.myserver.com 到达nginx服务器时,将会被下面的正则表达式 匹配,其中的myserver将会被捕获,并记录到$1中,在本server块下的配置中,当需要myserver时,就可以使用$1代替myserver了
    其中name 如果设置为ip,则就成了基于ip的虚拟主机了
location 配置 
  location 后可以加 = | ~ | ~* | ^~ uri 
    = 严格匹配uri
    ~ 区分大小写的正则
    ~* 不区分大小写的正则
    ^~ 
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;
  gzip_disable "MSIE [1-6]\."; IE6及以上的浏览器不使用压缩
  如果单个的server 不需要启用gzip,则只需在server中配置 gzip off 即可
rewrite
  rewrite regex replacement [flag]
    其中flag 可以为last、break、redirect、permanent
    last:得到新的url后,将新的url重新执行一下server中所有
    break:得到新的url后,将用新的url继续往下执行
    redirect:将重写厚的url 返回给客户端,状态码为302,临时重定向
    permanent:将重写厚的url 返回给客户端,状态码为301,永久重定向
    rewrite_log on | off 
      开启重写日志,开启后日志将以notice级别输出到errorlog中
防盗链
  server{
    listen 80;
    server_name www.myweb.name;
    location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)${
      valid_referers none blocked server_names *.myweb.name;
      if ($invalid_referer){
        rewrite ^/ http://www.myweb.com/images/forbidden.png;
      }
    }
  }
nginx 相关配置
#安装
yum -y install pcre-devel openssl-devel gcc*
useradd -r nginx
./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
make && make install 
#平滑升级概念
主进程不负责提供服务,仅仅负责管理各子进程,每一个worker线程可以同时响应多个请求,worker线程本身并不需要加载和分析配置文件,是由主进程完成的,所以worker线程可以在工作的同his,主进程来升级配置文件,新的用户到来,启用新的配置,旧的用户还使用旧的配置,当老用户全部退出以后,既全部升级为新的配置,既平滑升级

###主进程和worker进程
nginx的master进程负责读取和分析配置文件,按需要生成/收回工作进程,但不响应用户的请求
nginx的worker负责调用各种模块来完成各种功能,和磁盘交互等

#配置文件中的变量
set 自定义变量
$host 域名
$remote_addr 用户的地址
$request_uri 访问请求的uri(通常可以用location)
更多变量参照http://nginx.org/en/docs/http/ngx_http_core_module.html  nginx的http核心模块最下方

###配置文件中的正则
location 后边不加上边4个任何一个符号,表示只要从这个地方开始的都受其限定
如果出现了多个localtion,先匹配 = 号,然后不做模式匹配的,然后正则匹配的,然后不带符号
location [ = | ~ | ~* | ^~ ] uri {
        = 和后边的uri做精确匹配
        ~ 正则表达式的模式匹配(区分大小写)
        ~* 正则表达式的模式匹配(不区分大小写)
        ^~ 不做模式匹配
        !~*:取反,不区分大小写
        !~:取反,区分大小写
}
###配置文件中if的condition
-d,!-d:判断指定的路径是否为存在且为目录
-e,!-e:判断指定的路径是否存在,文件目录都可
-f,!-f:判断指定的路径是否存在且为文件
-x,!-x:判断指定路径的文件是否存在且可执行
###配置文件
##rewrite 正则 replacement [flag]
flag 重写完成 后续的工作该怎么完成
    break 重写完成之后 不在检查后边的,结束本次匹配(避免循环重写,可以用这个)
    last 重写完成之后 提前跳出,然后重第一个检查 rewrite 规则
    permanent 返回301代码,隐式重定向
    redirect 本身不完成重写,使用重定向机制完成返回另外一个地址,重定向完要重新检查 rewrite 类似last机制(返回302代码,显示重定向)
    写在if中的rewrite通常是要break的

###统计功能
location /status {
    stub_status on
}
access_log off; 关闭访问日志,定义服务器状态的相关信息,访问日志可能要关闭
access_log syslog:server=address[,parameter=values] [format];将日志发往日志服务器
###统计功能的内容参数
Active connections 活动的连接数
server accepts handled requests
已经接受过的连接,已经处理过的连接数,处理的请求数(启用keepalive以后一个连接可以发送N个请求)
前两个如果一样的话,没有任何一个连接断开
Reading: 0 Writing: 1 Waiting: 3
reading   读取客户端的连接数.
writing  响应数据到客户端的数量
waiting 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.

###压缩功能
gzip on | off
gzip_buffers number size 设置用来压缩一个响应的数目和大小
gzip_comp_level 1 压缩级别
gzip_disable regex 符合指定条件的不压缩
gzip_http_version 指定自己gzip所使用的http版本
gzip_min_length 设置执行压缩的最小值
gzip_proxied 是否在代理中允许使用gzip
gzip_types test/plain application/xml image压缩的类型
实例
http {
    gzip on;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
    gzip_disable msie6
}
###配置文件中的其他选项
worker_processes                4;启用几个工作线程的个数,也可以指定为auto
worker_rlimit_nofile            51200;修改worker进程可以打开的文件数目,和系统配置有关
use 使用哪一种事件驱动模型,默认epool
expires 定义过期时间
error_page 自定义错误指令
keepalive_timeout 65;繁忙的主机可以给5秒钟
worker_connections 1024;一个worker的连接数目
index 指定默认首页文件
listen 指定监听的address[:port]
autoindex on; 类似apache的Indexes,提供下载比较有用,其他情况应该关闭
server_name 对于一个基于主机名的虚拟主机来说,此项为必须
add_header Cache_Control private; 自定义首部信息
log_format      日志格式
worker_cpu_affinity 0001 0010 0100 1000;将worker进程绑定在那个cpu上(后边参数是cpu mask,此处代表1,2,3,4颗)
worker_priority 0;定义优先级NIS值,-20到20,默认是0,调小一点以使得nginx优先获得cpu使用权

###认证模块
auth_basic "authname" 启用了auth_basic认证并且认证名字叫什么
auth_basic_user_file "/path" 认证文件存放位置(由htpasswd创建)

###关于nginx的系统配置
ulimit -n或者vim /etc/security/limits.conf定义nginx nofile 51200

###反向代理
location /{
    proxy_pass http://127.0.0.1/remote/;
    proxy_set_header field value;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;将真实地址以header的方式传递给后方主机,需要后端服务器修改日志格式,来记录X-Real-IP值(apache 将%h修改为%{X-Real-IP}i)
}
###负载均衡
upstream webservers { upstream必须定义在server之外,http之内
    ip_hash  做iphash,保持会话一致 
    server IP backup;定义为backup以后是备用的,正常情况下不会被访问到,down表示当前server暂时不参与负载均衡
    server IP weight=1;
    server IP weight=1;
}
server {
    location / {
        proxy_pass http://webservers;
        proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;当碰到以上的错误的时候,把请求转发到下一台主机
        proxy_set_header X-Real-IP $remote_addr;
    }
}
###动静分离
实例
`server {
        listen 80
        server_name www.pro.com
        location ~* \.(jpg|png|gif|jpeg|html|css|js) {
            proxy_pass 
        }
}`
###代理缓存
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
    缓存目录,缓存目录层数,1:2代表一级目录用1 个十六进制表示,二级目录用两个十六进制表示,也可以用2:2等,最多1:2:3,键值空间名(后边要用)和大小(hash能存很多)
    上边保存在硬盘类似 /data/nginx/cache/c/29/alkjasdflkjaslkdfjlkasdjf
    其他选项
        inactive=time 非活动缓存从缓存中剔除的最大缓存时间
        max_size=size 缓存空间最大大小
proxy_cache zone|off 使用一个缓存区域,或者关闭缓存,遵循upstream服务器的响应报文首部中关于缓存的设定   
        Set-Cookie 
        Cache-Control containing "no-cache","no-store","private", or a "max-age" with a non-numberic or 0 value
        Expires with a time in the past
        X-Accel-Expires:0
proxy_cache_min_users:某响应报文被缓存之前至少应该被请求的次数,一般设定3次
proxy_cache_use_stale:在无法联系到upstream服务器时的那种情形下让nginx使用本地缓存的过期的缓存对象直接响应客户端请求
        proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_504 | http_404 | off
proxy_cache_valid [code] time: 用于为不同的响应设定不同时长的有效缓存时长,例如:proxy_cache_valid 200 302 10m;
proxy_cache_bypass string:设定在那种情形下,nginx将不从缓存中取数据:例如:
        proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment; 
        proxy_cache_bypass $http_pragma $http_authorization; 跟用户私有数据和认证有关的
使用实例
http {
    proxy_cache_path              /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
    server {
        location /{
            proxy_pass                http://www.test.com;
            proxy_set_header     Host \$host;
            proxy_cache             STATIC;
            proxy_cache_valid    200 1d;
            proxy_cache_valid    301 302 10m;
            proxy_cache_valid    any 1m;
            proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
            add_herder X-Via \$server_addr;
            add_header X-Cache-Stauts $upstream_cache_status; //启用ipstream后查看是否命中缓存
        }
    }
}


###子进程
worker进程接受和处理用户的请求
cache manager 和 cache loader 管理cache
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容