美文网首页
Nginx配置解析

Nginx配置解析

作者: CaiGuangyin | 来源:发表于2021-09-23 22:44 被阅读0次

[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 自定义变量
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 本地或其他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

相关文章

网友评论

      本文标题:Nginx配置解析

      本文链接:https://www.haomeiwen.com/subject/rikagltx.html