一、nginx简介
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,使用c语言编写的一款web服务软件.
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
官方网站 在此:https://nginx.org/
二、nginx作用
2.1 正向代理
需要在客户端配置代理服务器进行指定网站访问
如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来 访问,这种代理服务就称为正向代理。
2.2 反向代理
暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
2.3 负载均衡
增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
2.4 动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
三、Nginx架构和模块组成
整体采用模块化设计是 Nginx 的一个重大特点,甚至 http 服务器核心功能也是一个模块。旧版本的 Nginx 的模块是静态的,添加和删除模块都要对 Nginx 进行重新编译,1.9.11 以及更新的版本已经支持动态模块加载。
高度模块化的设计是 Nginx 的架构基础。Nginx 服务器被分解为多个模块,每个模块就是一个功能模块,只负责自身的功能,模块之间严格遵循“高内聚,低耦合”的原则。
3.1 核心模块
核心模块是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动机制、进程管理等核心功能。
3.2 标准 HTTP 模块
标准 HTTP 模块提供 HTTP 协议解析相关的功能,如:端口配置、网页编码设置、HTTP 响应头设置等。
3.3 可选 HTTP 模块
可选 HTTP 模块主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,如:Flash 多媒体传输、解析 GeoIP 请求、SSL 支持等。
3.4 邮件服务模块
邮件服务模块主要用于支持 Nginx 的邮件服务,包括对 POP3 协议、IMAP 协议和 SMTP 协议的支持。
3.5 第三方模块
第三方模块是为了扩展 Nginx 服务器应用,完成开发者自定义功能,如:Json 支持、Lua 支持等。
四、nginx的简要安装与使用
4.1下载
下载地址为:http://nginx.org/en/download.html
链接在此: nginx官方网站下载地址
4.1.1安装软件版本选择
如上图,无脑选 stable version即可。以下是版本说明:
- stable version:当前稳定版本,不折腾就选这个;
- mainline version:主力开发版本,俗称就是在开发新特性或者修复过去版本bug的开发版本,可能存在稳定性问题;
- legacy version:历史版本,如果不是对某个版本特定需要,否则还是建议考虑当前的stable 版本;
4.1.2 安装系统选择
一言以蔽之:截图红框不带任何后缀的,带版本号的链接就是linux版(主推版本,有些特性windows上没有);后缀带windows的顾名思义就是windows版本;
4.2 安装
4.2.1 linux版本安装(linux版本以redhat系linux为例,目前本人使用的centos 7)
(1)在安装Nginx之前,需确保系统已经安装了以下软件库:
gcc
openssl-devel、
pcre-devel
zlib-devel
没有可以通过以下方式安装:(debain系,例如Ubuntu等,可改为使用apt-get install)
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
(2)下面是Nginx安装过程:
安装方法主要有三种:
- yum安装
- 编译安装
- docker安装
注:docker安装可参考:https://blog.csdn.net/PowerKim/article/details/125002558
这里主要使用最简单的yum安装来实现,其它方案可自行百度。具体过程如下:
wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar zxvf nginx-1.22.1…tar.gz
./configure --with-http_stub_status_module --prefix=/opt/nginx
cd nginx-1.22.1.
make
make install
其中, –with-http_stub_status_module参数可选,该参数可以用来启用 Nginx 的 NginxStatus 功能,以监控 Nginx 的运行状态。想要了解更多的模块的情况可以通过 ./configure –help 选项查看。
4.2.2 windows 版本安装
下载windows版本的nginx,并解压到纯英文路径下即可;
目前个人测试,nginx版本1.22.1 stable version在windows11下运行正常;
4.3 启动与关闭
4.3.1 linux版本
- 启动
简单启动: ./nginx
指定配置文件启动:./nginx -c ~/nginx.conf # 以特定目录下的配置文件启动nginx: - 配置热加载
nginx支持配置热加载,即在运行状态下,重新加载修改后的配置文件,具体操作如下:
重新加载配置: nginx -s reload # 修改配置后重新加载生效 - 停止
快速停止: nginx -s stop # 快速停止nginx
有序停止: nginx -s quit # 完整有序的停止nginx
强行停止: kill cat /usr/local/nginx/logs/nginx.pid
补充其他停止方式:
ps -ef | grep ngin
kill -QUIT 主进程号 :从容停止Nginx
kill -TERM 主进程号 :快速停止Nginx
pkill -9 nginx :强制停止Nginx - 配置文件验证
配置文件验证: 验证nginx -t # 测试当前配置文件是否正确
测试指定的配置文件: nginx -t -c ~/nginx.conf # 测试特定的nginx配置文件是否正确
4.3.2 windows版本
- 启动
方法一:进入解压好的文件目录,双击nginx.exe即可;
方法二:打开cmd控制台,cd命令开启到解压好的文件目录,手动输入nginx.exe回车即可; - 配置热加载
nginx支持配置热加载,即在运行状态下,重新加载修改后的配置文件,具体操作如下:
打开cmd控制台,cd命令开启到解压好的文件目录,手动输入nginx.exe -s reload,回车即可; - 关闭
快速关闭:打开cmd控制台,cd命令开启到解压好的文件目录,手动输入nginx.exe -s stop,回车即可;
正常关闭:打开cmd控制台,cd命令开启到解压好的文件目录,手动输入nginx.exe -s quit,回车即可; - 查看进程:
可手动打开windows 任务管理器,自行查看。
4.3.3 浏览器访问
在不改变任何配置的前提下,nginx默认使用80端口,即只需打开浏览器,并在浏览器中输入localhost或者127.0.0.1回车查看是否有nginx默认欢迎页面展示即可,至此nginx确认安装成功。默认欢迎页面如下:
五、nginx功能简单实现
可参考这里:https://blog.csdn.net/m0_64830133/article/details/123150157
链接: nginx功能简单实现
六、nginx配置文件详解
6.1 总体配置说明
Nginx的配置文件nginx.conf位于其安装目录的conf目录下。
nginx.conf由多个块组成,最外面的块是main,main包含Events和HTTP,HTTP包含upstream和多个Server,Server又包含多个location:
main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。
- main块设置的指令将影响其他所有设置;
- server块的指令主要用于指定主机和端口;
- upstream指令主要用于负载均衡,设置一系列的后端服务器;
- location块用于匹配网页位置。
这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。
更为详细的说明,可参考这个:https://blog.csdn.net/wzb56_earl/article/details/46834409
链接: nginx配置文件详细说明
6.2 常用配置文件逐项说明(核心内容)
6.2.1 main块
#安全问题,建议用nobody,不要用root.
#user nobody;
#worker数和服务器的cpu数相等是最为适宜
worker_processes 2;
#work绑定cpu(4 work绑定4cpu)
worker_cpu_affinity 0001 0010 0100 1000
#work绑定cpu (4 work绑定8cpu中的4个) 。
worker_cpu_affinity 0000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
#error_log path(存放路径) level(日志等级)path表示日志路径,level表示日志等级,
#具体如下:[ debug | info | notice | warn | error | crit ]
#从左至右,日志详细程度逐级递减,即debug最详细,crit最少,默认为crit。
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
6.2.2 events块
events {
#这个值是表示每个worker进程所能建立连接的最大值,所以,一个nginx能建立的最大连接数,应该是worker_connections * worker_processes。
#当然,这里说的是最大连接数,对于HTTP请求本地资源来说,能够支持的最大并发数量是worker_connections * worker_processes,
#如果是支持http1.1的浏览器每次访问要占两个连接,
#所以普通的静态访问最大并发数是: worker_connections * worker_processes /2,
#而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connections * worker_processes/4。
#因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
worker_connections 1024;
#这个值是表示nginx要支持哪种多路io复用。
#一般的Linux选择epoll, 如果是(*BSD)系列的Linux使用kquene。
#windows版本的nginx不支持多路IO复用,这个值不用配。
use epoll;
#当一个worker抢占到一个链接时,是否尽可能的让其获得更多的连接,默认是off 。
multi_accept on;
#默认是on ,开启nginx的抢占锁机制。
accept_mutex on;
}
6.2.3 http块
http {
#当web服务器收到静态的资源文件请求时,依据请求文件的后缀名在服务器的MIME配置文件中找到对应的MIME Type,再根据MIME Type设置HTTP Response的Content-Type,然后浏览器根据Content-Type的值处理文件。
include mime.types;
#如果 不能从mime.types找到映射的话,用以下作为默认值
default_type application/octet-stream;
#日志位置
access_log logs/host.access.log main;
#一条典型的accesslog:
#101.226.166.254 - - [21/Oct/2013:20:34:28 +0800] “GET /movie_cat.php?year=2013 HTTP/1.1” 200 5209 “http://www.baidu.com” “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDR; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; Tablet PC 2.0); 360Spider”
#日志样例对应说明如下
#1)101.226.166.254:(用户IP)
#2)[21/Oct/2013:20:34:28 +0800]:(访问时间)
#3)GET:http请求方式,有GET和POST两种
#4)/movie_cat.php?year=2013:当前访问的网页是动态网页,movie_cat.php即请求的后台接口,year=2013为具体接口的参数
#5)200:服务状态,200表示正常,常见的还有,301永久重定向、4XX表示请求出错、5XX服务器内部错误
#6)5209:传送字节数为5209,单位为byte
#7)“http://www.baidu.com”:refer:即当前页面的上一个网页
#8)“Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; #.NET CLR 3.0.30729; Media Center PC 6.0; MDDR; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; Tablet PC 2.0); 360Spider”: agent字段:通常用来记录操作系统、浏览器版本、浏览器内核等信息
log_format main '$remote_addr -
r
e
m
o
t
e
u
s
e
r
[
remote_user [
remoteuser[time_local] “KaTeX parse error: Double superscript at position 12: request" ' '̲status
b
o
d
y
b
y
t
e
s
s
e
n
t
"
body_bytes_sent "
bodybytessent"http_referer” ’
‘“
h
t
t
p
u
s
e
r
a
g
e
n
t
"
"
http_user_agent" "
httpuseragent""http_x_forwarded_for”’;
#开启从磁盘直接到网络的文件传输,适用于有大文件上传下载的情况,提高IO效率。
sendfile on;
#一个请求完成之后还要保持连接多久, 默认为0,表示完成请求后直接关闭连接。
#keepalive_timeout 0;
keepalive_timeout 65;
#开启或者关闭gzip模块
#gzip on ;
#设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。
#gzip_min_lenth 1k;
#gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)
#gzip_comp_level 4;
#匹配MIME类型进行压缩,(无论是否指定)"text/html"类型总是会被压缩的。
#gzip_types types text/plain text/css application/json application/x-javascript text/xml
#动静分离
#服务器端静态资源缓存,最大缓存到内存中的文件,不活跃期限
open_file_cache max=655350 inactive=20s;
#活跃期限内最少使用的次数,否则视为不活跃。
open_file_cache_min_uses 2;
#验证缓存是否活跃的时间间隔
open_file_cache_valid 30s;
upstream myserver{
#1、轮询(默认)
#每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
#2、指定权重
#指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
#3、IP绑定 ip_hash
#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
#4、备机方式 backup
#正常情况不访问设定为backup的备机,只有当所有非备机全都宕机的情况下,服务才会进备机。
#5、fair(第三方)
#按后端服务器的响应时间来分配请求,响应时间短的优先分配。
#6、url_hash(第三方)
#按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
#ip_hash;
server 192.168.161.132:8080 weight=1;
server 192.168.161.132:8081 weight=1 backup;
#fair
#hash $request_uri
#hash_method crc32
}
server {
#监听端口号
listen 80;
#服务名
server_name 192.168.161.130;
#字符集
#charset utf-8;
#location [=|||^~] /uri/ { … }
= 精确匹配
~ 正则匹配,区分大小写
~ 正则匹配,不区分大小写
^~ 关闭正则匹配
#在工作中遇到了一个这样的问题,根据最大匹配规则,两个文件相似,再使用目录匹配时,最好是有区分 如newPoartal 和newPoartalA 应该配置: ~ ^/newPoartal/ { }
~ ^/newPoartalA { }
#匹配原则:
#1、所有匹配分两个阶段,第一个叫普通匹配,第二个叫正则匹配。
#2、普通匹配,首先通过“=”来匹配完全精确的location
#2.1、 如果没有精确匹配到, 那么按照最大前缀匹配的原则,来匹配location
#2.2、 如果匹配到的location有^~,则以此location为匹配最终结果,如果没有那么会把匹配的结果暂存,继续进行正则匹配。
#3、正则匹配,依次从上到下匹配前缀是或*的location, 一旦匹配成功一次,则立刻以此location为准,不再向下继续进行正则匹配。
#4、如果正则匹配都不成功,则继续使用之前暂存的普通匹配成功的location.
location / { # 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
#定义服务器的默认网站根目录位置
root html;
#默认访问首页索引文件的名称
index index.html index.htm;
#反向代理路径
proxy_pass http://myserver;
#反向代理的超时时间
proxy_connect_timeout 10;
proxy_redirect default;
}
location /images/ {
root images ;
}
location ^~ /images/jpg/ { # 匹配任何已 /images/jpg/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
root images/jpg/ ;
}
location ~*.(gif|jpg|jpeg)$ {
#所有静态文件直接读取硬盘
root pic ;
#expires定义用户浏览器缓存的时间为3天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力
expires 3d; #缓存3天
}
#error_page 404 /404.html;
#redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
七、官网配置参数说明
nginx官网所有模块及作用
生成是使用该命令配置的。它定义了系统的各个方面,包括nginx可用于连接处理的方法。最后,它会创建一个 .configureMakefile
该命令支持以下参数:configure
–help
打印帮助消息。
–prefix=path
定义将保存服务器文件的目录。同一目录还将用于 由 (库源的路径除外) 和配置文件中设置的所有相对路径。默认情况下,它设置为目录。configurenginx.conf/usr/local/nginx
–sbin-path=path
设置 nginx 可执行文件的名称。此名称仅在安装过程中使用。默认情况下,该文件名为 。prefix/sbin/nginx
–modules-path=path
定义了将安装nginx动态模块的目录。默认情况下,使用该目录。prefix/modules
–conf-path=path
设置配置文件的名称。如果需要,nginx总是可以通过命令行参数-c文件中指定它来启动不同的配置文件。默认情况下,该文件名为 。nginx.confprefix/conf/nginx.conf
–error-log-path=path
设置主错误、警告和诊断文件的名称。安装后,始终可以使用 error_log 指令在配置文件中更改文件名。默认情况下,该文件名为 。nginx.confprefix/logs/error.log
–pid-path=path
设置将存储主进程的进程 ID 的文件的名称。安装后,始终可以使用 pid 指令在配置文件中更改文件名。默认情况下,该文件名为 。nginx.pidnginx.confprefix/logs/nginx.pid
–lock-path=path
为锁定文件的名称设置前缀。安装后,始终可以使用 lock_file 指令在配置文件中更改该值。默认情况下,该值为 。nginx.confprefix/logs/nginx.lock
–user=name
设置非特权用户的名称,其凭据将由工作进程使用。安装后,始终可以使用 user 指令在配置文件中更改名称。默认用户名为 nobody。nginx.conf
–group=name
设置其凭据将由工作进程使用的组的名称。安装后,始终可以使用 user 指令在配置文件中更改名称。默认情况下,组名设置为非特权用户的名称。nginx.conf
–build=name
设置一个可选的nginx构建名称。
–builddir=path
设置生成目录。
–with-select_module
–without-select_module
启用或禁用构建允许服务器使用该方法的模块。如果平台似乎不支持更合适的方法(如 kqueue、epoll 或 /dev/poll),则会自动构建此模块。select()
–with-poll_module
–without-poll_module
启用或禁用构建允许服务器使用该方法的模块。如果平台似乎不支持更合适的方法(如 kqueue、epoll 或 /dev/poll),则会自动构建此模块。poll()
–with-threads
允许使用线程池。
–with-file-aio
允许在 FreeBSD 和 Linux 上使用异步文件 I/O (AIO)。
–with-http_ssl_module
允许构建将 HTTPS 协议支持添加到 HTTP 服务器的模块。默认情况下不构建此模块。构建和运行此模块需要 OpenSSL 库。
–with-http_v2_module
允许构建一个支持 HTTP/2 的模块。默认情况下不构建此模块。
–with-http_realip_module
允许构建ngx_http_realip_module模块,该模块将客户端地址更改为指定标头字段中发送的地址。默认情况下不构建此模块。
–with-http_addition_module
允许构建在响应之前和之后添加文本的ngx_http_addition_module模块。默认情况下不构建此模块。
–with-http_xslt_module
–with-http_xslt_module=dynamic
支持构建使用一个或多个 XSLT 样式表转换 XML 响应的ngx_http_xslt_module模块。默认情况下不构建此模块。构建和运行此模块需要 libxml2 和 libxslt 库。
–with-http_image_filter_module
–with-http_image_filter_module=dynamic
支持构建ngx_http_image_filter_module模块,用于转换 JPEG、GIF、PNG 和 WebP 格式的图像。默认情况下不构建此模块。
–with-http_geoip_module
–with-http_geoip_module=dynamic
支持构建ngx_http_geoip_module模块,该模块根据客户端 IP 地址和预编译的 MaxMind 数据库创建变量。默认情况下不构建此模块。
–with-http_sub_module
允许构建ngx_http_sub_module模块,该模块通过将一个指定的字符串替换为另一个字符串来修改响应。默认情况下不构建此模块。
–with-http_dav_module
支持构建通过 WebDAV 协议提供文件管理自动化的ngx_http_dav_module模块。默认情况下不构建此模块。
–with-http_flv_module
支持构建ngx_http_flv_module模块,该模块为 Flash 视频 (FLV) 文件提供伪流式服务器端支持。默认情况下不构建此模块。
–with-http_mp4_module
支持构建为 MP4 文件提供伪流式处理服务器端支持的ngx_http_mp4_module模块。默认情况下不构建此模块。
–with-http_gunzip_module
允许构建ngx_http_gunzip_module模块,该模块为不支持“gzip”编码方法的客户端解压缩带有“”的响应。默认情况下不构建此模块。Content-Encoding: gzip
–with-http_gzip_static_module
允许构建ngx_http_gzip_static_module模块,该模块允许发送文件扩展名为“”的预压缩文件,而不是常规文件。默认情况下不构建此模块。.gz
–with-http_auth_request_module
允许构建基于子请求结果实现客户端授权的ngx_http_auth_request_module模块。默认情况下不构建此模块。
–with-http_random_index_module
允许构建ngx_http_random_index_module模块,该模块处理以斜杠字符 (‘’) 结尾的请求,并在目录中选取一个随机文件作为索引文件。默认情况下不构建此模块。/
–with-http_secure_link_module
支持构建ngx_http_secure_link_module模块。默认情况下不构建此模块。
–with-http_degradation_module
启用构建模块。默认情况下不构建此模块。ngx_http_degradation_module
–with-http_slice_module
允许构建ngx_http_slice_module模块,该模块将请求拆分为子请求,每个子请求返回一定范围的响应。该模块提供了对大型响应的更有效缓存。默认情况下不构建此模块。
–with-http_stub_status_module
允许构建提供对基本状态信息的访问的ngx_http_stub_status_module模块。默认情况下不构建此模块。
–without-http_charset_module
禁止生成ngx_http_charset_module模块,该模块将指定的字符集添加到“Content-Type”响应标头字段,并且可以另外将数据从一个字符集转换为另一个字符集。
–without-http_gzip_module
禁止构建压缩 HTTP 服务器响应的模块。构建和运行此模块需要 zlib 库。
–without-http_ssi_module
禁止构建在传递 SSI 的响应中处理 SSI(服务器端包含)命令的ngx_http_ssi_module模块。
–without-http_userid_module
禁止构建设置适合客户端标识的 cookie 的ngx_http_userid_module模块。
–without-http_access_module
禁止构建允许限制对某些客户端地址的访问的ngx_http_access_module模块。
–without-http_auth_basic_module
禁止构建ngx_http_auth_basic_module模块,该模块允许通过使用“HTTP 基本身份验证”协议验证用户名和密码来限制对资源的访问。
–without-http_mirror_module
禁止构建通过创建后台镜像子请求来实现原始请求镜像的ngx_http_mirror_module模块。
–without-http_autoindex_module
禁止构建处理斜杠字符 (‘’) 结尾的请求的 ngx_http_autoindex_module 模块,并在ngx_http_index_module模块找不到索引文件时生成目录列表。/
–without-http_geo_module
禁止构建ngx_http_geo_module模块,该模块创建具有基于客户端 IP 地址的值的变量。
–without-http_map_module
禁止构建ngx_http_map_module模块,该模块使用基于其他变量的值创建变量。
–without-http_split_clients_module
禁止构建用于创建用于 A/B 测试变量的ngx_http_split_clients_module模块。
–without-http_referer_module
禁止构建ngx_http_referer_module模块,该模块可以阻止“Referer”标头字段中具有无效值的请求访问站点。
–without-http_rewrite_module
禁止构建允许 HTTP 服务器重定向请求和更改请求 URI 的模块。构建和运行此模块需要 PCRE 库。
–without-http_proxy_module
禁用构建 HTTP 服务器代理模块。
–without-http_fastcgi_module
禁止构建将请求传递到 FastCGI 服务器的ngx_http_fastcgi_module模块。
–without-http_uwsgi_module
禁止构建将请求传递到 uwsgi 服务器的ngx_http_uwsgi_module模块。
–without-http_scgi_module
禁止构建将请求传递到 SCGI 服务器的ngx_http_scgi_module模块。
–without-http_grpc_module
禁止构建将请求传递到 gRPC 服务器的ngx_http_grpc_module模块。
–without-http_memcached_module
禁止构建从 memcached 服务器获取响应的 ngx_http_memcached_module 模块。
–without-http_limit_conn_module
禁止构建限制每个密钥的连接数(例如,来自单个 IP 地址的连接数)的ngx_http_limit_conn_module模块。
–without-http_limit_req_module
禁止构建限制每个键的请求处理速率(例如,来自单个 IP 地址的请求的处理速率)的 ngx_http_limit_req_module 模块。
–without-http_empty_gif_module
禁止构建发出单像素透明 GIF 的模块。
–without-http_browser_module
禁止构建ngx_http_browser_module模块,该模块创建变量的值取决于“用户代理”请求标头字段的值。
–without-http_upstream_hash_module
禁止构建实现哈希负载平衡方法的模块。
–without-http_upstream_ip_hash_module
禁止构建实现ip_hash负载平衡方法的模块。
–without-http_upstream_least_conn_module
禁止构建实现least_conn负载平衡方法的模块。
–without-http_upstream_random_module
禁止构建实现随机负载平衡方法的模块。
–without-http_upstream_keepalive_module
禁止构建提供与上游服务器的连接缓存的模块。
–without-http_upstream_zone_module
禁止构建模块,以便能够在共享内存区域中存储上游组的运行时状态。
–with-http_perl_module
–with-http_perl_module=dynamic
支持构建嵌入式 Perl 模块。默认情况下不构建此模块。
–with-perl_modules_path=path
定义了一个将保留 Perl 模块的目录。
–with-perl=path
设置 Perl 二进制文件的名称。
–http-log-path=path
设置 HTTP 服务器的主请求日志文件的名称。安装后,始终可以使用 access_log 指令在配置文件中更改文件名。默认情况下,该文件名为 。nginx.confprefix/logs/access.log
–http-client-body-temp-path=path
定义用于存储保存客户端请求正文的临时文件的目录。安装后,始终可以使用 client_body_temp_path 指令在配置文件中更改目录。默认情况下,该目录名为 。nginx.confprefix/client_body_temp
–http-proxy-temp-path=path
定义一个目录,用于存储包含从代理服务器接收的数据的临时文件。安装后,始终可以使用 proxy_temp_path 指令在配置文件中更改目录。默认情况下,该目录名为 。nginx.confprefix/proxy_temp
–http-fastcgi-temp-path=path
定义了一个目录,用于存储包含从 FastCGI 服务器接收的数据的临时文件。安装后,始终可以使用 fastcgi_temp_path 指令在配置文件中更改目录。默认情况下,该目录名为 。nginx.confprefix/fastcgi_temp
–http-uwsgi-temp-path=path
定义了一个目录,用于存储包含从 uwsgi 服务器接收的数据的临时文件。安装后,始终可以使用 uwsgi_temp_path 指令在配置文件中更改目录。默认情况下,该目录名为 。nginx.confprefix/uwsgi_temp
–http-scgi-temp-path=path
定义了一个目录,用于存储包含从 SCGI 服务器接收的数据的临时文件。安装后,始终可以使用 scgi_temp_path 指令在配置文件中更改目录。默认情况下,该目录名为 。nginx.confprefix/scgi_temp
–without-http
禁用 HTTP 服务器。
–without-http-cache
禁用 HTTP 缓存。
–with-mail
–with-mail=dynamic
启用 POP3/IMAP4/SMTP 邮件代理服务器。
–with-mail_ssl_module
允许构建一个模块,该模块将 SSL/TLS 协议支持添加到邮件代理服务器。默认情况下不构建此模块。构建和运行此模块需要 OpenSSL 库。
–without-mail_pop3_module
禁用邮件代理服务器中的 POP3 协议。
–without-mail_imap_module
禁用邮件代理服务器中的 IMAP 协议。
–without-mail_smtp_module
禁用邮件代理服务器中的 SMTP 协议。
–with-stream
–with-stream=dynamic
支持为通用 TCP/UDP 代理和负载平衡构建流模块。默认情况下不构建此模块。
–with-stream_ssl_module
允许构建将 SSL/TLS 协议支持添加到流模块的模块。默认情况下不构建此模块。构建和运行此模块需要 OpenSSL 库。
–with-stream_realip_module
允许构建ngx_stream_realip_module模块,该模块将客户端地址更改为 PROXY 协议标头中发送的地址。默认情况下不构建此模块。
–with-stream_geoip_module
–with-stream_geoip_module=dynamic
支持构建ngx_stream_geoip_module模块,该模块根据客户端IP地址和预编译的MaxMind数据库创建变量。默认情况下不构建此模块。
–with-stream_ssl_preread_module
允许构建ngx_stream_ssl_preread_module模块,该模块允许在不终止 SSL/TLS 的情况下从 ClientHello 消息中提取信息。默认情况下不构建此模块。
–without-stream_limit_conn_module
禁止构建限制每个密钥的连接数(例如,来自单个 IP 地址的连接数)的ngx_stream_limit_conn_module模块。
–without-stream_access_module
禁止构建允许限制对某些客户端地址的访问的ngx_stream_access_module模块。
–without-stream_geo_module
禁止构建ngx_stream_geo_module模块,该模块创建具有基于客户端 IP 地址的值的变量。
–without-stream_map_module
禁止构建ngx_stream_map_module模块,该模块使用基于其他变量的值创建变量。
–without-stream_split_clients_module
禁止构建用于创建用于 A/B 测试变量的ngx_stream_split_clients_module模块。
–without-stream_return_module
禁止生成ngx_stream_return_module模块,该模块将某些指定的值发送到客户端,然后关闭连接。
–without-stream_set_module
禁止生成为变量设置值的ngx_stream_set_module模块。
–without-stream_upstream_hash_module
禁止构建实现哈希负载平衡方法的模块。
–without-stream_upstream_least_conn_module
禁止构建实现least_conn负载平衡方法的模块。
–without-stream_upstream_random_module
禁止构建实现随机负载平衡方法的模块。
–without-stream_upstream_zone_module
禁止构建模块,以便能够在共享内存区域中存储上游组的运行时状态。
–with-google_perftools_module
支持构建ngx_google_perftools_module模块,该模块可以使用Google Performance Tools分析nginx工作进程。该模块适用于nginx开发人员,默认情况下不是构建的。
–with-cpp_test_module
启用构建模块。ngx_cpp_test_module
–add-module=path
启用外部模块。
–add-dynamic-module=path
启用外部动态模块。
–with-compat
实现动态模块兼容性。
–with-cc=path
设置 C 编译器的名称。
–with-cpp=path
设置 C 预处理器的名称。
–with-cc-opt=parameters
设置将添加到 CFLAGS 变量的其他参数。在 FreeBSD 下使用系统 PCRE 库时,应指定。如果需要增加 支持的文件数,也可以在此处指定,如下所示:。–with-cc-opt=“-I /usr/local/include"select()–with-cc-opt=”-D FD_SETSIZE=2048"
–with-ld-opt=parameters
设置将在链接期间使用的其他参数。在 FreeBSD 下使用系统 PCRE 库时,应指定。–with-ld-opt=“-L /usr/local/lib”
–with-cpu-opt=cpu
启用按指定 CPU 进行构建:、、、。pentiumpentiumpropentium3pentium4athlonopteronsparc32sparc64ppc64
–without-pcre
禁用 PCRE 库的使用。
–with-pcre
强制使用 PCRE 库。
–with-pcre=path
设置 PCRE 库源的路径。需要从 PCRE 站点下载库分发并提取。其余的由nginx和完成。位置指令中的正则表达式支持和ngx_http_rewrite_module模块需要该库。./configuremake
–with-pcre-opt=parameters
为 PCRE 设置其他构建选项。
–with-pcre-jit
构建具有“实时编译”支持的 PCRE 库(1.1.12,pcre_jit指令)。
–without-pcre2
禁止使用 PCRE2 库而不是原始 PCRE 库 (1.21.5)。
–with-zlib=path
设置 zlib 库源的路径。库发行版(版本1.1.3 — 1.2.11)需要从zlib站点下载并提取。其余的由nginx和完成。ngx_http_gzip_module模块需要该库。./configuremake
–with-zlib-opt=parameters
为 zlib 设置其他构建选项。
–with-zlib-asm=cpu
允许使用针对指定 CPU 之一优化的 zlib 汇编器源:、 。pentiumpentiumpro
–with-libatomic
强制libatomic_ops库使用。
–with-libatomic=path
设置libatomic_ops库源的路径。
–with-openssl=path
设置 OpenSSL 库源的路径。
–with-openssl-opt=parameters
为 OpenSSL 设置其他构建选项。
–with-debug
启用调试日志。
参数用法示例(所有这些都需要在一行中键入):
./configure
–sbin-path=/usr/local/nginx/nginx
–conf-path=/usr/local/nginx/nginx.conf
–pid-path=/usr/local/nginx/nginx.pid
–with-http_ssl_module
–with-pcre=…/pcre2-10.39
–with-zlib=…/zlib-1.2.11
配置完成后,使用 编译并安装 nginx make
八、参考资料
- nginx配置文件:https://www.cnblogs.com/phy-java/p/15227058.html,作者:琴殇情醉;
- nginx配置简单说明:https://blog.csdn.net/PowerKim/article/details/125853497,作者:xuxu如生;
- 超详细的Nginx入门教程:https://blog.csdn.net/m0_64830133/article/details/123150157,作者:笙歌入梦遥;