当前位置:首页 > 技术文章 > 正文内容

nginx中http模块介绍

arlanguage4个月前 (12-29)技术文章40

Nginx是一个高性能的Web服务器,其配置具有高度的灵活性和可定制性。其中,HTTP模块是Nginx配置的核心,可以用于定义HTTP请求的行为和响应。在本文中,我们将介绍Nginx HTTP模块配置项的常见用法。

配置语法

HTTP模块配置由多个指令组成,每个指令包含一个指令名称、参数和一个块配置。其基本语法如下:

指令名称 参数 {
    块配置
}

其中,指令名称和参数之间可以用空格或制表符分隔,块配置用花括号括起来。

常见配置项

server

server指令用于定义虚拟主机。可以使用多个server块配置多个虚拟主机,每个虚拟主机可以有不同的域名或IP地址和端口号。其基本语法如下:

server {
    listen       80;
    server_name  example.com www.example.com;
    location / {
        root   /var/www/html;
        index  index.html index.htm;
    }
}

其中,listen指令用于定义监听端口,server_name指令用于定义虚拟主机的域名,location块用于定义请求处理的规则。

location

location指令用于定义请求处理的规则。可以使用多个location块配置不同的请求处理规则,每个规则可以匹配URI的不同部分,从而定义不同的处理方式。其基本语法如下:

location / {
    root   /var/www/html;
    index  index.html index.htm;
}

其中,/表示要匹配的URI部分,root指令用于定义文件资源的根目录,index指令用于定义默认的索引文件。

proxy_pass

proxy_pass指令用于将请求代理到另一个服务器。可以使用该指令实现反向代理、负载均衡等功能。其基本语法如下:

location / {
    proxy_pass http://localhost:8080;
}

其中,http://localhost:8080表示代理的目标服务器地址和端口号。

try_files

try_files指令用于尝试访问不同的文件,直到找到一个可以访问的文件为止。可以使用该指令实现自定义的URL重写和错误处理。其基本语法如下:

location / {
    try_files $uri $uri/ /index.php;
}

其中,$uri表示要尝试访问的URI,/index.php表示默认的错误处理页面。

rewrite

rewrite指令用于重写URI,可以使用该指令实现自定义的URL重写和转发。其基本语法如下:

rewrite ^/blog/(.*)$ /news/$1 last;

其中,^/blog/(.*)$表示要匹配的URI正则表达式,/news/$1表示重写后的URI,last表示停止


在nginx中,http模块是其中一个最常用的模块。它提供了一些配置项来控制HTTP协议的处理方式,包括服务器的基本设置、缓存、代理、重定向和安全等。在这篇文章中,我们将会详细介绍一些常用的http模块配置项。

listen

listen用于配置nginx监听的端口和IP地址。它的语法如下:

listen address[:port] [default_server] [ssl] [http2] [spdy] [reuseport] [backlog=number] [deferred] [bind] [ipv6only=on|off] [so_keepalive=on|off|keepidle:keepintvl:keepcnt]

其中,address可以是一个IP地址或一个域名。如果省略了端口,则默认为80。default_server表示这是默认服务器,当nginx无法匹配到任何虚拟主机时会使用该服务器。ssl表示启用SSL协议。http2表示启用HTTP/2协议。spdy表示启用SPDY协议。reuseport表示启用SO_REUSEPORT特性,可以提高并发性能。backlog表示客户端连接队列的长度。deferred表示启用deferred模式。bind表示绑定到指定的地址。ipv6only表示是否仅使用IPv6。so_keepalive表示是否启用TCP keepalive功能。

server_name

server_name用于配置虚拟主机名称。它的语法如下:

server_name name [name ...];

其中,name可以是一个域名或IP地址。如果有多个名称,则使用空格分隔。

root

root用于配置静态文件的根目录。它的语法如下:

root path;

其中,path为文件根目录的路径。

index

index用于配置默认文档。它的语法如下:

index file [file ...];

其中,file可以是文件名或相对路径。如果有多个文件,则使用空格分隔。

location

location用于配置请求匹配规则以及相应的处理方式。它的语法如下:

location [modifier] uri {
    ...
}

其中,modifier可以是以下任意一个:

  • =:精确匹配
  • ~:区分大小写的正则表达式匹配
  • ~*:不区分大小写的正则表达式匹配
  • ^~:如果前缀匹配成功,则停止寻找匹配的location
  • /:通用匹配

uri表示要匹配的URI。如果有多个匹配项,则使用大括号将它们括起来。

proxy_pass

proxy_pass用于配置代理服务器的地址和协议。它的语法如下:

proxy_pass url;

其中,url为代理服务器的地址和协议。例如,http://127.0.0.1:8080。

try_files


access_log

用于配置访问日志文件的格式和位置。语法如下:

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

其中,path 表示日志文件的路径和文件名;format 表示日志文件的格式,可以使用 $ 开头的变量来自定义日志格式;buffer 表示缓存大小,单位为字节,默认值为 64k;gzip 表示是否启用 Gzip 压缩,level 表示压缩级别;flush 表示缓存刷新时间,单位为秒,默认值为 1s;if 表示条件,用于指定仅在满足条件时记录日志。

error_log

用于配置错误日志文件的格式和位置。语法如下:

error_log file [level];

其中,file 表示错误日志文件的路径和文件名;level 表示错误日志的记录级别,可以是 debug、info、notice、warn、error、crit、alert 或 emerg 中的一个,缺省值为 error。

sendfile

用于控制是否使用 sendfile 函数来传输文件。语法如下:

sendfile on | off;

其中,on 表示使用 sendfile 函数传输文件,off 表示不使用 sendfile 函数。

tcp_nopush

用于控制是否启用 TCP 的 NOPUSH 选项。语法如下:

tcp_nopush on | off;

其中,on 表示启用 TCP 的 NOPUSH 选项,off 表示禁用。

tcp_nodelay

用于控制是否启用 TCP 的 NODELAY 选项。语法如下:

tcp_nodelay on | off;

其中,on 表示启用 TCP 的 NODELAY 选项,off 表示禁用。

keepalive_timeout

用于控制 keep-alive 连接的超时时间。语法如下:

keepalive_timeout timeout;

其中,timeout 表示超时时间,单位为秒,默认值为 75s。

keepalive_requests

用于控制 keep-alive 连接的最大请求数。语法如下:

keepalive_requests n;

其中,n 表示最大请求数,默认值为 100。

resolver

用于配置 DNS 解析器地址。语法如下:

resolver address ... [valid=time] [ipv6=on|off];

其中,address 表示 DNS 解析器的地址,可以是一个 IP 地址或者一个主机名;valid 表示 DNS 解析结果的有效期,单位为秒,默认值为 30s;ipv6 表示是否启用 IPv6 解析,on 表示启用,off 表示禁用。

location指令

location指令用于匹配请求的URI,并指定相应的处理方式。在nginx的http、server、location配置块中均可使用location指令。下面是location指令的语法格式:

location [ 精确匹配 | 正则匹配 ] uri { … }

其中,uri可以是一个普通的字符串,也可以是一个正则表达式。如果uri是一个字符串,则表示对请求URI进行精确匹配;如果uri是一个正则表达式,则表示对请求URI进行正则匹配。location指令内部可以设置一系列的指令,用于指定对匹配到的请求的处理方式。例如:

location / {
    root /usr/share/nginx/html;
    index index.html;
}

location /api {
    proxy_pass http://127.0.0.1:8080;
}

上述配置中,第一个location指令用于精确匹配根目录(/)请求,将请求转发到/usr/share/nginx/html目录下的index.html文件;第二个location指令用于正则匹配以/api开头的请求,将请求转发到本地的8080端口上。

location指令还支持多种匹配方式,如前缀匹配、后缀匹配、正则匹配等。例如:

location ^~ /images/ {
    root /data/www;
    expires 30d;
}

location ~ \.(gif|jpg|jpeg|png)$ {
    root /data/images;
    expires 30d;
}

上述配置中,第一个location指令使用前缀匹配,匹配以/images/开头的请求,将请求的资源从/data/www目录下获取,并设置过期时间为30天;第二个location指令使用正则匹配,匹配以gif、jpg、jpeg、png为后缀的请求,将请求的资源从/data/images目录下获取,并设置过期时间为30天。

总结

nginx http模块是nginx的核心模块之一,负责处理HTTP请求和响应。在nginx的http模块中,可以通过一系列的配置项来控制nginx的行为,包括基本的配置项、模块配置项和http模块配置项。其中,http模块配置项是比较重要的一类配置项,它可以控制nginx在处理HTTP请求和响应时的行为。在http模块配置项中,比较常用的有server、location、proxy_pass等指令。熟练掌握这些指令,可以帮助我们更好地使用nginx构建高效的Web服务。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/533.html

标签: nginx 后缀名
分享给朋友:

“nginx中http模块介绍” 的相关文章

Linux中完全卸载nginx并重新安装

一、卸载停止Nginx软件/usr/local/nginx/sbin/nginx -s stop如果不知道nginx安装路径,可以通过执行ps命令找到nginx程序的PID,然后kill其PIDps -aux |grep nginx查找根下所有包含nginx的文件sudo find / -name...

PHP日志记录

背景在生产环境中日志的重要性显而易见,能快速定位问题和程序的调优。在LNMP架构中怎么记录好程序中的错误日志。设置error_log记录PHP日志信息#将会向PHP报告发生的每个错误 error_reporting = E_ALL #关闭页面显示才能将错误回写到日志文件 display_err...

nginx 解决 readv() failed (104: Connection reset by peer)

查看nginx error错误,发现上传接口报以下错:2019/10/10 19:58:25 [error] 299784#0: *5967188 readv() failed (104: Connection reset by peer) while reading upstream, clien...

nginx支持跨域的方法 nginx配置支持跨域

在nginx的配置文件中添加允许跨域的响应头。参考nginx官方文档,添加响应头的方法如下:在conf文件的server作用域中添加如下响应头:server { listen 80; # 其他配置... # 允许跨域 add_header Access-Control-Allow-...

Nginx 的日志 nginx的日志能否保存到日志审计里面?

Nginx 的日志主要有 2 个,一个是 access.log, 一个是 error.log。如果你不进行任何配置的话,这 2 个日志将会使用默认的日志配置,这个日志将会位于/var/log/nginx 目录中。针对虚拟主机的配置如果你使用了 Nginx 为虚拟主机的话。那么你可以在你的虚拟主机的配...

Nginx安全相关配置常用教程 nginx安全策略

1. 限制请求速度设置 Nginx、Nginx Plus 的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置 Nginx 每两秒钟接收一个客户端 IP 的请求(大约等同于每分钟30个请求)。limit_req_zone $binary_re...