nginx常见模块

分类

nginx的配置文件格式分为主模块,events块,http块,server块,location块。模块又大致分为核心模块,基础模块,邮件模块,其他模块。下面介绍一下常见的模块使用。

主模块

主模块一般为nginx的用户组,nginx的pid文件路径,worker的进程数,错误日志的存放路径及日志等级。

daemon

daemon off

这个表示nginx以前台模式运行。如果你的nginx不是在容器中运行的,请不要修改为off,默认为on。
因为在容器中nginx启动命令完成后,容器进程也就退出了,为了保持容器的状态,需要修改daemon为off。
nginx镜像中已经默认开启了off模式,CMD ["nginx", "-g", "daemon off;"]
也可以不用off,启动容器时使用docker run -d;或者在启动命令后加上&& cat,这样容器进程就会在前台卡住不会退出。

error_log

错误日志输出路径,有多种等级。

error_log /var/log/nginx/error.log [ debug | info | notice | warn | error | crit ]

如果nginx编译了--with-debug模块,还可以添加debug日志等级。

error_log LOGFILE [ debug_core | debug_alloc | debug_mutex | debug_event
]: | debug_http | debug_imap ;

include

可以在任意地方使用include指令实现配置文件的包含。

include vhosts/*.conf;

pid

指定nginx进程文件路径。

pid        /var/run/nginx.pid;

user

指定nginx worker进程运行用户,用户组,默认是nobody用户。

user  nginx nginx;

worker_processes

指定worker进程数。

worker_proceses     8;

worker_cpu_affinity

指定worker进程绑定的CPU。

worker_proceses     4;
worker_cpu_affinity 0001 0010 0100 1000;

worker_rlimit_nofile

指定每个worker进程最多能打开的文件描述符。

worker_rlimit_nofile 1047552;

events块

use

指定nginx使用的事件驱动模型,有select,poll,epoll,resig,/dev/poll,kqueue,eventport,区别在这里

use        epoll;

worker_connections

指定每个worker进程最大连接数

worker_connections  65535;

multi_accept

设置 worker进程是否可以同时接受多个网络连接,默认为off

multi_accept        on;

accept_mutex

nginx 使用连接互斥锁进行顺序的accept()系统调用,防止惊群现象。默认为on。

accept_mutex on; 

基本模块

http core模块

client_body_buffer_size

设置客户端请求体缓冲区大小。可以在http, server, location块中。如果请求体大于缓冲区,则将整个请求体或部分写入临时文件中。默认是8k或者16k,是页大小的2倍。

client_body_buffer_size         8k;

client_body_timeout

设置客户端的请求超时时间,只有在一个readstep中没有获取到body时才设置超时。如果在此时间之后客户端没有发送任何消息,nginx返回错误"Request time out"(408)。

client_body_timeout             60s;

client_header_buffer_size

设置客户端请求头的缓冲区大小。默认是1k。

client_header_buffer_size       1k;

client_header_timeout

读取header超时时间。

client_header_timeout           60s;

large_client_header_buffers

当header超出1k时,可以通过这个设置buffer大小。
请求行不能超过一个缓冲区的大小,如果客户端发送一个更大的头nginx返回错误" request URI too large"(414)。

请求的最长标题行也不能超过一个缓冲区的大小,否则客户端会得到错误“Bad request”(400)。

large_client_header_buffers     4 8k;

client_max_body_size

客户端请求体大小。如果超出会报错:Request Entity Too Large" (413)。在上传文件或更新时可能会遇到。默认是1m。

client_max_body_size 200m;

default_type

指定默认文件类型。

default_type text/html;

error_page

指定错误页面。

error_page   404          /404.html;
error_page   502 503 504  /50x.html;

keepalive_timeout

指定与客户端保持连接的超时时间。

keepalive_timeout  60s;

keepalive_requests

在长连接上可以发出的请求数。

keepalive_requests 10000;

listen

监听的地址和端口。

listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
listen [::]:8000; 
listen [fe80::1];

location

根据URI进行不同的配置。可以使用正则。

location  = / {

  # matches the query / only.
  [ configuration A ] 
}
location  / {
  # matches any query, since all queries begin with /, but regular
  # expressions and any longer conventional blocks will be matched first.
  [ configuration B ] 
}
location ^~ /images/ {
  # matches any query beginning with /images/ and halts searching, so regular expressions will not be checked.
  [ configuration C ] 
}
location ~* \.(gif|jpg|jpeg)$ {
  # matches any request ending in gif, jpg, or jpeg.
  [ configuration D ] 
}

root

指定请求的根路径。

sendfile

允许sendfile方式传输文件,默认为off。

sendfile on;

server

声明虚拟主机的配置。

listen       8080;   #监听端口
server_name  127.0.0.1;   #监听地址
server_name example.com  www.example.com;
location / {
    xxx
}

log_format

日志格式。

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

访问日志。

access_log  /var/log/nginx/access.log  main;

upstream

配置负载均衡。

upstream backend  {
  server backend1.example.com weight=5;
  server backend2.example.com:8080;
  server unix:/tmp/backend3;
}

server {
  location / {
    proxy_pass  http://backend;
  }
}

access

ngx_http_access_module 模块可以对特定IP客户端进行控制。

location / {
    deny    192.168.1.1;
    allow   192.168.1.0/24;
    allow   10.1.1.0/16;
    deny    all;
}

auth_basic

使用用户名和密码基于 HTTP 进行认证。

location  /  {
    auth_basic            "Restricted";
    auth_basic_user_file  conf/htpasswd;
}

htpasswd文件格式如下:密码必须使用函数 crypt(3) 加密。可以使用Apache的htpasswd工具来创建密码文件。

用户名:密码
用户名2:密码2:注释
用户名3:密码3

fastcgi

许Nginx 与FastCGI 进程交互,并通过传递参数来控制FastCGI 进程工作。

location / {
  fastcgi_pass   localhost:9000;
  fastcgi_index  index.php;
# 该指令指定的参数,将被传递给FastCGI-server。
  fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;
  fastcgi_param  QUERY_STRING     $query_string;
# 参数SCRIPT_FILENAME 是PHP 用来确定执行脚本的名字,而参数QUERY_STRING 是它的一个子参数。
  fastcgi_param  REQUEST_METHOD   $request_method;
  fastcgi_param  CONTENT_TYPE     $content_type;
  fastcgi_param  CONTENT_LENGTH   $content_length;
  # 处理POST请求
}

gzip

支持在线实时压缩输出数据流.

# 开启gzip
gzip             on;
# 设置允许压缩的页面最小字节数
gzip_min_length  1000;
# 设置gzip的缓冲区大小。按照原始数据大小以8k为单位的4倍申请内存。默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_buffers     4 8k;
# Nginx作为反向代理的时候启用,根据header信息来确定是否开启压缩。
gzip_proxied     expired no-cache no-store private auth;
# 匹配MIME类型进行压缩,(无论是否指定)"text/html"类型总是会被压缩的。
gzip_types       text/plain application/xml;

headers

设置HTTP报文的header。

# 设置过期时间。
expires     24h;
expires     0;
expires     -1;
expires     epoch;
# 当HTTP应答状态码为 200、204、301、302 或 304 的时候,增加指定的header。
add_header  Cache-Control  private;

index

指定用来做默认文档的文件名,可以在文件名处使用变量。 如果您指定了多个文件,那么将按照您指定的顺序逐个查找。 可以在列表末尾加上一个绝对路径名的文件。

index  index.$geo.html  index.0.html  /index.html;

referer

当request header中的“Referer”的值不正确时,可以阻止对站点的访问。

location /photos/ {
  valid_referers none blocked www.mydomain.com mydomain.com;

  if ($invalid_referer) {
    return   403;
  }

}

proxy

它的作用就是将请求转发到相应的服务器。在实际的反向代理工作中,会通过 location 功能匹配指定的URI,然后把接收到的符合匹配URI的请求通过proxy_pass抛给定义好的upstream节点池。

location /some/path/ {
    proxy_pass http://127.0.0.1;
}

#  与 rewrite 同时存在时,proxy_pass 中的 path 不会替换,相当于不起作用
location /name/ {
# /$1的意思是, 先将 /tmp/img 删除, 只保留其后面的路径
    rewrite    /name/([^/]+) /users?name=$1 break;
# 改写完之后, 再进行代理;
    proxy_pass http://127.0.0.1;
}

file
上面的只是对响应体的处理方式,其他比如对请求体的处理等详情参考这里:
https://blog.csdn.net/error311/article/details/106973476/

rewrite

用于实现URL的重写,301、302的跳转,http跳转到https等。
rewrite可以配置在 server、location、if。
如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查。

rewrite flag

redirect;
#临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求;
#使用相对路径,或者http://或https://开头,状态码:302

permanent;
#重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,状态码:301

break;
#重写完成后,停止对当前URL在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用
#适用于一个URL一次重写

last;
#重写完成后,停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查,不建议在location中使用
#适用于一个URL多次重写,要注意避免出现超过十次以及URL重写后返回500错误给用户

跳转型指由客户端浏览器重新对新地址进行请求,客户端的浏览器地址信息会发生变化,如:301,302。
代理型是在WEB服务器内部实现跳转,客户端的浏览器地址信息不会发生变化,如: last,break。

例子参考这里:
https://blog.csdn.net/wzj_110/article/details/125231908

0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x