[TOC]
nginx 相关配置
安装
yum -y install pcre-devel openssl-devel gcc* make
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 自定义变量
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 本地或其他web服务器IP地址:端口
}
}
代理缓存
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
网友评论