1.1 官网下载最新源代码,并解压
目前官方最新版本我们直接去官网找到下载地址(https://nginx.org/download/)。不推荐直接使用 yum 安装,因为存在如下两个问题:
版本太旧,以 CentOS 为例,直接 yum 安装的版本是 1.12.2 版本,已经严重脱离
了时代;
无法自定义安装模块,安装目录等等,不方便后续的使用。
系统版本centos7.9
Nginx下载版本:1.22.1
[root@centos13 data]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@centos13 data]# wget https://nginx.org/download/nginx-1.22.1.tar.gz
--2022-10-25 12:21:11-- https://nginx.org/download/nginx-1.22.1.tar.gz
Resolving nginx.org (nginx.org)... 52.58.199.22, 3.125.197.172, 2a05:d014:edb:5704::6, ...
Connecting to nginx.org (nginx.org)|52.58.199.22|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1073948 (1.0M) [application/octet-stream]
Saving to: ‘nginx-1.22.1.tar.gz’
100%[========================================>] 1,073,948 1.01MB/s in 1.0s
2022-10-25 12:21:13 (1.01 MB/s) - ‘nginx-1.22.1.tar.gz’ saved [1073948/1073948]
[root@centos13 data]# ls
nginx-1.22.1.tar.gz
[root@centos13 data]# tar -xf nginx-1.22.1.tar.gz
[root@centos13 data]# ls
nginx-1.22.1 nginx-1.22.1.tar.gz
1.1 依赖库提前安装
Nginx 是完全使用 C 语言开发的,所以必须要有 C 编译环境,往往 CentOS新版本 的环境会预装 gcc 编译器,所以不用额外安装,如果没有gcc按照下面的指引安装即可。
往往我们会用的到 Nginx 的一些重要功能,比如压缩和解压缩功能,这时就必须需要依赖 zlib 库,想在配置文件中使用正则表达式,就必须安装pcre 库,最后想实现 SSL/TLS 功能,必须安装 openssl 库。
无论是在 Ubuntu 还是 CentOS 系统中都大致如此,只不过管理软件包的工具不一样,依赖库的名称也不一样。在 Ubuntu 系统下,在 Ubuntu 中执行如下命令安装依赖库
1.1.1 安装gcc 编译器
参考:https://cloud.tencent.com/developer/article/1626791
1.1.1.1 检查gcc是否安装、安装gcc编译器、安装GNU/Linux 进行开发的用户手册
[root@centos13 data]# gcc -v
-bash: gcc: command not found
默认的 CentOS 软件源上包含一个名称为Development Tools的软件包组,这个组合包含了 GCC 编译器以及一系列库文件,还有其他编译软件需要用到的工具。
想要安装 Development Tools 包含 GCC 编译器,运行:
[root@centos13 data]# yum group install "Development Tools"
……
Complete!
这个命令安装了一组新的软件包,包括gcc,g++,和make,具体安装包如下:(具体安装包随当前环境变化)
Installed:
autoconf.noarch 0:2.69-11.el7
automake.noarch 0:1.13.4-3.el7
bison.x86_64 0:3.0.4-2.el7
byacc.x86_64 0:1.9.20130304-3.el7
cscope.x86_64 0:15.8-10.el7
ctags.x86_64 0:5.8-13.el7
diffstat.x86_64 0:1.57-4.el7
doxygen.x86_64 1:1.8.5-4.el7
elfutils.x86_64 0:0.176-5.el7
flex.x86_64 0:2.5.37-6.el7
gcc.x86_64 0:4.8.5-44.el7
gcc-c++.x86_64 0:4.8.5-44.el7
gcc-gfortran.x86_64 0:4.8.5-44.el7
git.x86_64 0:1.8.3.1-23.el7_8
indent.x86_64 0:2.2.11-13.el7
intltool.noarch 0:0.50.2-7.el7
libtool.x86_64 0:2.4.2-22.el7_3
patch.x86_64 0:2.7.1-12.el7_7
patchutils.x86_64 0:0.3.3-5.el7_9
rcs.x86_64 0:5.9.0-7.el7
redhat-rpm-config.noarch 0:9.1.0-88.el7.centos
rpm-build.x86_64 0:4.11.3-48.el7_9
rpm-sign.x86_64 0:4.11.3-48.el7_9
subversion.x86_64 0:1.7.14-16.el7
swig.x86_64 0:2.0.10-5.el7
systemtap.x86_64 0:4.0-13.el7
Dependency Installed:
apr.x86_64 0:1.4.8-7.el7
apr-util.x86_64 0:1.5.2-6.el7
avahi-libs.x86_64 0:0.6.31-20.el7
boost-date-time.x86_64 0:1.53.0-28.el7
boost-system.x86_64 0:1.53.0-28.el7
boost-thread.x86_64 0:1.53.0-28.el7
bzip2.x86_64 0:1.0.6-13.el7
cpp.x86_64 0:4.8.5-44.el7
dwz.x86_64 0:0.11-3.el7
dyninst.x86_64 0:9.3.1-3.el7
efivar-libs.x86_64 0:36-12.el7
emacs-filesystem.noarch 1:24.3-23.el7
gdb.x86_64 0:7.6.1-120.el7
gettext-common-devel.noarch 0:0.19.8.1-3.el7
gettext-devel.x86_64 0:0.19.8.1-3.el7
glibc-devel.x86_64 0:2.17-326.el7_9
glibc-headers.x86_64 0:2.17-326.el7_9
gnutls.x86_64 0:3.3.29-9.el7_6
kernel-debug-devel.x86_64 0:3.10.0-1160.76.1.el7
kernel-headers.x86_64 0:3.10.0-1160.76.1.el7
libdwarf.x86_64 0:20130207-4.el7
libgfortran.x86_64 0:4.8.5-44.el7
libmodman.x86_64 0:2.0.1-8.el7
libmpc.x86_64 0:1.0.1-3.el7
libproxy.x86_64 0:0.4.11-11.el7
libquadmath.x86_64 0:4.8.5-44.el7
libquadmath-devel.x86_64 0:4.8.5-44.el7
libstdc++-devel.x86_64 0:4.8.5-44.el7
m4.x86_64 0:1.4.16-10.el7
mokutil.x86_64 0:15-8.el7
mpfr.x86_64 0:3.1.1-4.el7
neon.x86_64 0:0.30.0-4.el7
nettle.x86_64 0:2.7.1-9.el7_9
pakchois.x86_64 0:0.4-10.el7
perl-Data-Dumper.x86_64 0:2.145-3.el7
perl-Error.noarch 1:0.17020-2.el7
perl-Git.noarch 0:1.8.3.1-23.el7_8
perl-TermReadKey.x86_64 0:2.30-20.el7
perl-Test-Harness.noarch 0:3.28-3.el7
perl-Thread-Queue.noarch 0:3.02-2.el7
perl-XML-Parser.x86_64 0:2.41-10.el7
perl-srpm-macros.noarch 0:1-8.el7
python-srpm-macros.noarch 0:3-34.el7
subversion-libs.x86_64 0:1.7.14-16.el7
systemtap-client.x86_64 0:4.0-13.el7
systemtap-devel.x86_64 0:4.0-13.el7
systemtap-runtime.x86_64 0:4.0-13.el7
trousers.x86_64 0:0.3.14-2.el7
Dependency Updated:
glibc.x86_64 0:2.17-326.el7_9 glibc-common.x86_64 0:2.17-326.el7_9
rpm.x86_64 0:4.11.3-48.el7_9 rpm-build-libs.x86_64 0:4.11.3-48.el7_9
rpm-libs.x86_64 0:4.11.3-48.el7_9 rpm-python.x86_64 0:4.11.3-48.el7_9
安装GNU/Linux 进行开发的用户手册 & 查看gcc版本
[root@centos13 data]# yum install man-pages
……
Installed:
man-pages.noarch 0:3.53-5.el7
Complete!
[root@centos13 data]# gcc -v
……
gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
6.2.1.2 编译一个 Hello World 实例
创建一个hello.c文件
[root@centos13 data]# vim hello.c
在hello.c文件中写入以下内容
#include <stdio.h>
int main()
{
printf ("Hello World!\n");
return 0;
}
gcc编译文件,会在同一个文件夹下创建一个名称为hello的二进制文件。
[root@centos13 data]# gcc hello.c -o hello
[root@centos13 data]# ll
-rwxr-xr-x. 1 root root 8360 Oct 25 12:43 hello
-rw-r--r--. 1 root root 75 Oct 25 12:42 hello.c
[root@centos13 data]# ./hello #执行二进制文件
Hello World! #二进制文件执行输出内容
1.1.1 安装zlib zlib-devel、pcre pcre-devel、openssl openssl-devel 等依赖
[root@centos13 data]# yum install -y zlib zlib-devel
……
[root@centos13 data]# yum install -y pcre pcre-devel
……
[root@centos13 data]# yum install -y openssl openssl-devel
……
1.2 编译 & 安装
1.1.1 可选--默认配置安装
优点:简单,开箱即用
缺点:不能体现nginx模块定制化的效果。
[root@centos13 nginx-1.22.1]# cd nginx-1.22.1
[root@centos13 nginx-1.22.1]# ./configure
[root@centos13 nginx-1.22.1]# make && make install
……
make[1]: Leaving directory `/data/nginx-1.22.1'
这个方法就像是Windows系统安装软件一样,自动安装到默认目录,安装默认的组件。
1.1.1 可选—自定义安装
1.1.1.1 –help查看可以选择nginx的模块
configure参数官方详情:<u>http://nginx.org/en/docs/configure.html</u>
configure参数详情网络博客:https://www.cnblogs.com/flashfish/p/11025961.html
configure可以启用或者禁用的模块 , --with表示启用, --without表示禁用
[root@centos13 nginx-1.22.1]# ./configure --help
--help print this message #查看帮助信息
--prefix=PATH set installation prefix #设置安装目录
--sbin-path=PATH set nginx binary pathname #设置可执行文件目录
--modules-path=PATH set modules path #这是模块安装目录
--conf-path=PATH set nginx.conf pathname #设置配置文件安装目录
--error-log-path=PATH set error log pathname #设置错误日志安装目录
--pid-path=PATH set nginx.pid pathname #设置进程文件安装目录
--lock-path=PATH set nginx.lock pathname #设置nginx锁文件安装目录,挡nginx运行时会自动创建改文件,用于在一台服务器上允许运行一个nginx
--user=USER set non-privileged user for
worker processes #设置nginx运行进程时的用户名,如果没有指定默认为nobody , 这里没有指定也可以在配置文件("nginx.conf")中设置
--group=GROUP set non-privileged group for
worker processes #设置nginx运行时进程的用户组
--build=NAME set build name #设置编译名, 一个描述,没有其他作用
--builddir=DIR set build directory #设置编译目录,将编译后的文件写入到这个目录总
--with-select_module enable select module
--without-select_module disable select module
#启用或禁用select事件驱动模型。默认情况下在Linux2.6以上的内核版本中,Nginx支持使用Epoll高效的事件模型,我们可以在配置文件中使用"use epoll"指令开启它。
--with-poll_module enable poll module
--without-poll_module disable poll module
#启用或禁用poll事件驱动模型。默认情况下在Linux2.6以上的内核版本中,Nginx支持使用Epoll高效的事件模型,我们可以在配置文件中使用"use epoll"指令开启它。
--with-threads enable thread pool support #启用线程池功能。一般情况下主机有几核处理器在启动Nginx时就会创建几个Worker工作进程,进程创建线程处理每一个请求,当在CPU密集型计算、资源访问的环境下,很多请求都会开启对应的线程,可能会由于磁盘IO限制导致的线程处理请求时间变长,这不是我们期望看到的,我们就可以启用线程池功能,让请求排队等待处理,并且可以充分利用CPU提高处理效率。开启线程池需要AIO的支持。
--with-file-aio enable file AIO support #启用异步文件IO(AIO)支持。一般用于大文件传输的场景下。
--with-http_ssl_module enable ngx_http_ssl_module #q启用HTTP_SSL模块,用于构建HTTPS服务,默认不构建此模块
--with-http_v2_module enable ngx_http_v2_module #启用HTTP_V2模块,新的HTTP协议,相比HTTP1更优更快。默认情况下不够减此模块
--with-http_realip_module enable ngx_http_realip_module #启用HTTP_Realip模块,用于修改客户端请求头中客户端IP地址值,一般用于反向代理中,将真实的客户端IP传送给后端的应用服务器。默认情况下不构建此模块。
--with-http_addition_module enable ngx_http_addition_module #启用HTTP_Addition模块,用于在响应之前和之后添加文本。默认情况下不构建此模块。
--with-http_xslt_module enable ngx_http_xslt_module #启用HTTP_Xslt模块,这个模块是一个过滤器,它可以通过XSLT模板转换成XML响应。需要ibxml2和libxslt库的支持。默认情况下不构建此模块
--with-http_xslt_module=dynamic enable dynamic ngx_http_xslt_module #启用HTTP_Xslt动态模块,允许在配置文件中通过"load_module"指令手动启用和禁用模块的使用。默认情况下不构建此模块。
--with-http_image_filter_module enable ngx_http_image_filter_module #启用HTTP_Image_Filter模块,这个模块是一个集成图片处理器,我们可以使用它转换JPEG、GIF、PNG和WEBP格式的图像,验证这些格式图像的有效型(是不是此格式的图像),输出JSON格式的图像信息,旋转图像,按比例缩放图像,剪切图片等。默认情况下不构建此模块。
--with-http_image_filter_module=dynamic
enable dynamic ngx_http_image_filter_module #启用HTTP_Image_Filter动态模块,允许在配置文件中通过"load_module"指令手动启用和禁用模块的使用。默认情况下不构建此模块。
--with-http_geoip_module enable ngx_http_geoip_module #启用HTTP_Geoip模块,这个模块用于处理不同地区的访问,当来自某一个区域的访问时将其重定向到对应的服务或者项目上,需要MaxMind GeoIP库的支持。默认情况下不构建此模块。
--with-http_geoip_module=dynamic enable dynamic ngx_http_geoip_module #启用HTTP_Geoip动态模块,允许在配置文件中通过"load_module"指令手动启用和禁用模块的使用。默认情况下不构建此模块。
--with-http_sub_module enable ngx_http_sub_module #启用HTTP_Sub模块,这个模块是一个过滤器,用于修改响应的内容,可以将一个指定的字符串替换成另一个字符串。默认情况下不构建此模块。
--with-http_dav_module enable ngx_http_dav_module #启用HTTP_DAV模块,用于通过WEBDAV协议提供WEB的文件管理功能,类似于一个WEB的文件管理器,可以对服务器的文件进行管理。默认情况下不构建此模块。
--with-http_flv_module enable ngx_http_flv_module #启用HTTP_FLV模块,用于为Flash Video(FLV)文件提供伪流视频服务端支持,开启它则允许在网页上播放FLV格式的视频。默认情况下不构建此模块。
--with-http_mp4_module enable ngx_http_mp4_module #启用HTTP_MP4模块,用于为MP4格式的视频文件提供伪流视频服务端支持,开启它则允许在网页上播放MP4格式的视频。默认情况下不构建此模块。
--with-http_gunzip_module enable ngx_http_gunzip_module #启用HTTP_Gunzip模块,用于为不支持"gzip"编码方式的客户端解压响应,有些浏览器不支持"gzip"编码格式的请求和响应传输,若服务器开启了内容传输压缩功能(Gzip),则需要开启此项,服务器会本地解压数据,将数据传送给浏览器客户端。默认情况下不构建此模块。
--with-http_gzip_static_module enable ngx_http_gzip_static_module #启用HTTP_Gzip_Static模块,用于将静态内容压缩成".gz"为文件扩展名的预压缩文件,并缓存在本地,在响应时会将此文件发送以替代普通文件,运用此模块的好处就是不需要(Gzip)每次传输时都需要对文件进行处理压缩。在用于Squid+Nginx环境下,当Nginx启用(Gzip)内容传输压缩功能时,在使用Squid3.0以前版本搭建环境时会发现,Squid返回给客户端的并不是压缩状态,这就是由于没有启用此模块导致的。默认情况下不构建此模块。
--with-http_auth_request_module enable ngx_http_auth_request_module #启用HTTP_Auth_Request模块,此模块是一个请求验证模块,可以使用外部服务器或服务对网站的每个请求进行身份验证,当用户访问时,Nginx会向用于验证请求的外部服务器发出验证请求,若返回的状态码为200,则通过允许访问,若返回401或403,则访问会被拒绝。默认情况下不构建此模块。
--with-http_random_index_module enable ngx_http_random_index_module #启用HTTP_Random_Index模块,随机主页模块,当用户访问时,随机响应一个主页,而并非由"index"指令定义的一个主页,而是从主页池中随机选中一个主页面返回。默认情况下不构建此模块。
--with-http_secure_link_module enable ngx_http_secure_link_module #启用HTTP_Secure_Link模块,防盗链模块,用于检查请求链接的权限以及是否过期,多用于文件下载防盗链。默认情况下不构建此模块。
--with-http_degradation_module enable ngx_http_degradation_module #启用HTTP_Degradation模块,用于当主机剩余内存较低时,用户请求访问,Nginx会对某些"location"的请求返回204或444的响应码。默认情况下不构建此模块。
--with-http_slice_module enable ngx_http_slice_module #启用HTTP_Slice模块,此模块是一个过滤器,用于将一个大的完整的文件分割成多个小块文件,分段传送给用户,一般用于大文件传输的场景下,使用它可以让用户快速的得到响应。默认情况下不构建此模块。
--with-http_stub_status_module enable ngx_http_stub_status_module #启用HTTP_Stub_Status模块,状态信息统计模块,用于返回一个Nginx状态信息统计信息页面,管理员访问这个页面可以获取Nginx的请求处理、当前连接、等待连接等统计信息,一般用于监控Nginx的运行状态。默认情况下不构建此模块。
--without-http_charset_module disable ngx_http_charset_module #禁用HTTP_Charset模块,此模块用于将指定的字符集添加到"Content-Type"响应头字段中。此外此模块还可以将数据从一个字符集转换为另一个字符集,此模块用于字符集设置。不建议禁用。
--without-http_gzip_module disable ngx_http_gzip_module #禁用HTTP_Gzip模块,此模块用于HTTP响应内容传输压缩,可以将响应内存在传输时将其压缩成Gzip编码格式的响应传送给客户端,使用Gzip编码格式响应内容体积会变小,会提高传输效率。不建议禁用。
--without-http_ssi_module disable ngx_http_ssi_module #禁用HTTP_SSI模块,此模块是一个过滤器,用于处理通过它响应中的SSI(Server Side Includes)命令。目前支持的SSI命令列表并不完整,SSI指令是一种可以嵌入WEB页面的一种语法指令。
--without-http_userid_module disable ngx_http_userid_module #禁用HTTP_Userid模块,此模块用于识别客户端的Cookie。可以使用嵌入变量"$uid_got"和"$uid_set"记录已接受和设置的Cookie。
--without-http_access_module disable ngx_http_access_module #禁用HTTP_Access模块,此模块用于限制对某些客户端地址的访问,Allow or Deny。不建议禁用。
--without-http_auth_basic_module disable ngx_http_auth_basic_module #禁用HTTP_Auth_Basic模块,该模块用于HTTP基本身份验证,使用用户名和密码来限制对资源的访问。
--without-http_mirror_module disable ngx_http_mirror_module #禁用HTTP_Mirror模块,该模块用于将正式环境的流量拷贝到镜像(测试)环境下,一般用于测试环境引入真实环境的流量实现对测试环境的压力测试。
--without-http_autoindex_module disable ngx_http_autoindex_module #禁用HTTP_Autoindex模块,该模块用于在处理以斜杠字符('/')结尾的请求,并在找不到索引文件的情况下生成目录列表。
--without-http_geo_module disable ngx_http_geo_module #禁用HTTP_Geo模块,该模块用于从指定变量中获取客户端的IP地址,并将其嵌入到另外一个变量中。默认情况下从"$remote_addr"变量中取得客户端的IP地址。我们可以通过它结合"HTTP_Upstream"实现对来源客户端的负载均衡,当来自不同的客户端请求时,将其负载均衡给后端的不同的服务器处理;还可以使用它结合"HTTP_Map"+"HTTP_Limit_Conn"模块实现对来源客户端的限速功能
--without-http_map_module disable ngx_http_map_module #禁用HTTP_Map模块,该模块用于创建一个变量的映射表,结果变量可以是一个字符串也可以是另外一个变量。
--without-http_split_clients_module disable ngx_http_split_clients_module #禁用HTTP_Splic_Clients模块,该模块用于创建适用于A/B测试的变量,AB测试也称之为拆分测试,也就是将一个项目的两个不同版本发布,看用户更喜欢用于那个版本,若版本A受欢迎则发布版本A。
--without-http_referer_module disable ngx_http_referer_module #禁用HTTP_Referer模块,该模块用于防盗链,用于阻止对请求头部"referer"字段具有无效值的请求访问,可以设置一个白名单,非白名单的无效来源网址的连接则会拒绝请求,使用此模块我们还需考虑到,即使对于有效的请求,常规浏览器也可能不发送"referer"字段。不建议禁用。
--without-http_rewrite_module disable ngx_http_rewrite_module #禁用HTTP_Rewerte模块,该模块用于地址重写,用于将来源请求地址重定向到指定的地址上,可以保护真实的地址,增加安全性,该模块需要PCRE库的支持。不建议禁用。
--without-http_proxy_module disable ngx_http_proxy_module #禁用HTTP_Proxy模块,该模块用于将请求代理传递到另外一台WEB服务器去处理,Nginx的核心模块。不建议禁用。
--without-http_fastcgi_module disable ngx_http_fastcgi_module #禁用HTTP_FastCGI模块,该模块用于将请求代理传递到另外一台FastCGI服务器去处理,一般用于反代PHP。不建议禁用。
--without-http_uwsgi_module disable ngx_http_uwsgi_module #禁用HTTP_UwSGI模块,该模块用于将请求代理传递给另外一台UwSGI服务器去处理。
--without-http_scgi_module disable ngx_http_scgi_module #禁用HTTP_SCGI模块,该模块用于将请求代理传递给另外一台SCGI服务器去处理。
--without-http_grpc_module disable ngx_http_grpc_module #禁用HTTP_Grpc模块,该模块用于将请求代理传递给另外一台Grpc服务器去处理。
--without-http_memcached_module disable ngx_http_memcached_module #禁用HTTP_Memcached模块,该模块用于Nginx从Memcached服务器获取响应内容。一般用于Nginx+后端服务器+Memcached的环境下,当用户第一请求时,Nginx去Memcached中读取缓存数据,若没有则就请求后端的服务器去处理,后端服务器将静态页面的数据写入到Memcached缓存服务器中并返回响应给Nginx传递给用户,当用户第二次请求时则Nginx直接从Memcached缓存服务器中获取缓存的静态页面内容,Memcached缓存服务器是基于内存的,所以可以减少磁盘IO的使用,提高响应效率。
--without-http_limit_conn_module disable ngx_http_limit_conn_module #禁用HTTP_Limit_Conn模块,该模块用于限制并发连接数量以及下载带宽限制。
--without-http_limit_req_module disable ngx_http_limit_req_module #禁用HTTP_Limit_Req模块,该模块用于限制请求数量,可以限制请求的频率
--without-http_empty_gif_module disable ngx_http_empty_gif_module #禁用HTTP_Empty_Gif模块,该模块会在内容中常驻的一个1X1的透明空白的GIF图像,当用户请求时,返回该图像,一般用于测试。
--without-http_browser_module disable ngx_http_browser_module #禁用HTTP_Browser模块,该模块用于创建变量,变量的值取决于请求头中"user-agent"的值,一般用于区别新式或者旧式浏览器,若新式浏览器则将请求重定向到新式的WEB页面中,呈现新页面,若为旧式浏览器则将返回旧式的WEB页面。
--without-http_upstream_hash_module
disable ngx_http_upstream_hash_module #禁用HTTP_Upstream_Hash模块,该模块提供了由"Upstream"指令定义的一组服务器的负载均衡方法"Hash",该方法基于散列键值(hash),它会将客户端+服务端的映射关系存放到一个散列键值表中,当客户端第二次请求时则会匹配关系将请求转发至后端的同一台服务器上,实现会话保持功能。该模块提供指令"hash",在会话保持中,我们唯一能标识客户端的标志就是SessionID,所以我们可以使用指令"hash $cookie_jsession"实现会话保持功能。不建议禁用。
--without-http_upstream_ip_hash_module
disable ngx_http_upstream_ip_hash_module #禁用HTTP_Upstream_IP_Hash模块,该模块提供了由"Upstream"指令定义的一组服务器的负载均衡方法"ip_hash",该方法也用于会话保持,不过它是基于客户端IP的Hash方法,由于用户可能是ADSL接入的网络,所以客户端可能受动态IP影响会发生变化,所以一般不建议采用这种方法。
--without-http_upstream_least_conn_module
disable ngx_http_upstream_least_conn_module #禁用HTTP_Upstream_Least_Conn模块,该模块提供了由"Upstream"指令定义的一组服务器的负载均衡方法"least_conn",该方法用于将请求传递到具有最少活动连接、权重较高(性能最好)的后端服务器上去处理。
--without-http_upstream_random_module
disable ngx_http_upstream_random_module #
--without-http_upstream_keepalive_module
disable ngx_http_upstream_keepalive_module #禁用HTTP_Upstream_Keepalive模块,该模块可以为由"Upstream"指令定义的一组服务器提供保持长连接的功能,使用它则会为每个Worker工作进程与后端服务器保持空闲的长连接,连接数由"keepalive"指令指定,当空闲的长连接数量超过指定值时,将关闭最近最少使用的连接。
--without-http_upstream_zone_module
disable ngx_http_upstream_zone_module #禁用HTTP_Upstream_Zone模块,该模块可以将由"Upstream"指令定义的服务器组运行时的状态存储在共享内存区域中。
--with-http_perl_module enable ngx_http_perl_module #启用HTTP_Perl模块,用于在Perl中实现位置和变量处理程序,并可以将Perl调用到SSI中。默认情况下不构建此模块。
--with-http_perl_module=dynamic enable dynamic ngx_http_perl_module # 启用HTTP_Perl动态模块,允许在配置文件中通过"load_module"指定手动启用和禁用模块的使用。默认情况下不构建此模块。
--with-perl_modules_path=PATH set Perl modules path #设置一个用于保留Perl模块的目录路径。
--with-perl=PATH set perl binary pathname #设置Perl可执行命令文件的路径。
--http-log-path=PATH set http access log pathname #设置访问日志文件存放目录路径。安装后,可以在主配置文件中使用"access_log"指令修改。
--http-client-body-temp-path=PATH set path to store
http client request body temporary files #设置用于存储客户端请求主体的临时文件存放目录路径。安装后,可以在主配置文件中使用"client_body_temp_path"指令修改。
--http-proxy-temp-path=PATH set path to store
http proxy temporary files #设置用于存储从代理服务器接受的数据临时文件存放目录路径。安装后,可以在主配置文件中使用"proxy_temp_path"指令修改。
--http-fastcgi-temp-path=PATH set path to store
http fastcgi temporary files #设置用于存储从FastCGI服务器接受的数据临时文件存放目录路径。安装后,可以在主配置文件中使用"fastcgi_temp_path"指令修改。
--http-uwsgi-temp-path=PATH set path to store
http uwsgi temporary files #设置用于存储从UwSGI服务器接受的数据临时文件存放目录路径。安装后,可以在主配置文件中使用"uwsgi_temp_path"指令修改。
--http-scgi-temp-path=PATH set path to store
http scgi temporary files #设置用于存储从SCGI服务器接受的数据临时文件存放目录路径。安装后,可以在主配置文件中使用"scgi_temp_path"指令修改。
--without-http disable HTTP server #禁用HTTP_Core模块,该模块为Nginx的核心模块,用于提供HTTP服务所有核心功能。
--without-http-cache disable HTTP cache #禁用HTTP缓存。
--with-mail enable POP3/IMAP4/SMTP proxy module #启用HTTP_Mail_Core模块,该模块为Nginx的核心模块,用于提供POP3/IMAP4/SMTP邮件代理服务。默认情况下不构建此模块。
--with-mail=dynamic enable dynamic POP3/IMAP4/SMTP proxy module #启用HTTP_Mail_Core动态模块,允许在配置文件中通过"load_module"指令手动启用和禁用模块的使用。默认情况下不构建此模块。
--with-mail_ssl_module enable ngx_mail_ssl_module #启用Mail_SSL模块,用于邮件代理服务支持SSL/TLS协议,需要OpenSSL库的支持。默认情况下不构建此模块。
--without-mail_pop3_module disable ngx_mail_pop3_module #禁用Mail_POP3模块,当启用HTTP_Mail_Core模块时,若你不想使用POP3协议,则可以考虑单独禁用此模块。不建议禁用。
--without-mail_imap_module disable ngx_mail_imap_module #禁用Mail_IMAP模块,当启用HTTP_Mail_Core模块时,若你不想使用IMAP4协议,则可以考虑单独禁用此模块。不建议禁用。
--without-mail_smtp_module disable ngx_mail_smtp_module #禁用Mail_SMTP模块,当启用HTTP_Mail_Core模块时,若你不想使用SMTP协议,则可以考虑单独禁用此模块。不建议禁用。
--with-stream enable TCP/UDP proxy module #启用Stream_Core模块,Nginx的核心模块,用于实现TCP/UDP代理和四层负载均衡功能。默认情况下不构建此模块。此模块自Nginx1.9.0版本开始可用。
--with-stream=dynamic enable dynamic TCP/UDP proxy module #启用Stream_Core动态模块,允许在配置文件中通过"load_module"指令手动启用和禁用模块的使用。默认情况下不构建此模块。
--with-stream_ssl_module enable ngx_stream_ssl_module #启用Stream_SSL模块,用于提供SSL/TLS协议支持,需要OpenSSL库的支持。该模块用于Nginx四层负载功能中使用,需要开启Stream_Core模块。默认情况下不构建此模块。
--with-stream_realip_module enable ngx_stream_realip_module #启用Stream_Realip模块,用于修改客户端请求头中客户端IP地址值,一般用于反向代理中,将真实的客户端IP传送给后端的应用服务器。该模块用于Nginx四层负载功能中使用,需要开启Stream_Core模块。默认情况下不构建此模块。
--with-stream_geoip_module enable ngx_stream_geoip_module #启用Stream_Geoip模块,用于处理不同地区的访问,当来自某一个区域的访问时将其重定向到对应的服务或者项目上,需要MaxMind GeoIP库的支持。该模块用于Nginx四层负载功能中使用,需要开启Stream_Core模块。默认情况下不构建此模块。
--with-stream_geoip_module=dynamic enable dynamic ngx_stream_geoip_module #启用Stream_Geoip动态模块,允许在配置文件中通过"load_module"指令手动启用和禁用模块的使用。默认情况下不构建此模块
--with-stream_ssl_preread_module enable ngx_stream_ssl_preread_module #启用Stream_SSL_Preread模块,用于从客户端Hello消息中提取信息,而不会终止SSL/TLS。该模块用于Nginx四层负载功能中使用,需要开启Stream_Core模块。默认情况下不构建此模块。
--without-stream_limit_conn_module disable ngx_stream_limit_conn_module #禁用Stream_Limit_Conn模块,该模块用于限制并发连接数量以及下载带宽限制功能。该模块用于Nginx四层负载功能中使用,当开启Stream_Core模块时自动开启此功能。不建议禁用。
--without-stream_access_module disable ngx_stream_access_module #禁用Stream_Access模块,该模块用于限制对某些客户端地址的访问。该模块用于Nginx四层负载功能中使用,当开启Stream_Core模块时自动开启此功能。不建议禁用。
--without-stream_geo_module disable ngx_stream_geo_module #禁用Stream_Geo模块,该模块用于从指定变量中获取客户端的IP地址,并将其嵌入到另外一个变量中。默认情况下从"$remote_addr"变量中取得客户端的IP地址。该模块用于Nginx四层负载功能中使用,当开启Stream_Core模块时自动开启此功能。不建议禁用。
--without-stream_map_module disable ngx_stream_map_module #禁用Stream_Map模块,该模块用于创建一个变量的映射表,结果变量可以是一个字符串也可以是另外一个变量。该模块用于Nginx四层负载功能中使用,当开启Stream_Core模块时自动开启此功能。不建议禁用。
--without-stream_split_clients_module
disable ngx_stream_split_clients_module #禁用Stream_Splic_Clients模块,该模块用于创建适用于A/B测试的变量,AB测试也称之为拆分测试,也就是将一个项目的两个不同版本发布,看用户更喜欢用于那个版本,若版本A受欢迎则发布版本A。该模块用于Nginx四层负载功能中使用,当开启Stream_Core模块时自动开启此功能。
--without-stream_return_module disable ngx_stream_return_module #禁用Stream_Return模块,该模块用于向客户端发送指定值,然后关闭连接。该模块用于Nginx四层负载功能中使用,当开启Stream_Core模块时自动开启此功能。不建议禁用。
--without-stream_set_module disable ngx_stream_set_module #
--without-stream_upstream_hash_module
disable ngx_stream_upstream_hash_module #禁用Stream_Upstream_Hash模块,该模块提供四层负载均衡的一种调度方法,一般用于基于SessionID的会话保持场景下,当开启Stream_Core模块时自动开启此功能。不建议禁用。
--without-stream_upstream_least_conn_module
disable ngx_stream_upstream_least_conn_module #禁用Stream_Upstream_IP_Hash模块,该模块提供四层负载均衡的一种调度方法,基于来源IP的会话保持方法,由于来源IP的不稳定性,我们一般很少采用此种方法。当开启Stream_Core模块时自动开启此功能。
--without-stream_upstream_random_module
disable ngx_stream_upstream_random_module #
--without-stream_upstream_zone_module
disable ngx_stream_upstream_zone_module #禁用Stream_Upstream_Zone模块,该模块可以将由"Upstream"指令定义的服务器组运行时的状态存储在共享内存区域中。该模块用于Nginx四层负载功能中使用,当开启Stream_Core模块时自动开启此功能。
--with-google_perftools_module enable ngx_google_perftools_module ##启用Google_Perftools模块,用于可以使用Google Performance Tools分析Nginx的工作进程,分析程序性能瓶颈。该模块适用于Nginx开发人员,默认情况下不构建此模块。
--with-cpp_test_module enable ngx_cpp_test_module #启用Cpp_Test模块,用于C++测试。该模块适用于Nginx开发人员,默认情况下不构建此模块。
--add-module=PATH enable external module #添加第三方模块,需要指定第三方模块所在目录路径。
--add-dynamic-module=PATH enable dynamic external module #添加第三方动态模块,需要指定第三方动态模块所在目录路径。
--with-compat dynamic modules compatibility #启用动态模块兼容性。
--with-cc=PATH set C compiler pathname #设置GCC编译器所在目录路径
--with-cpp=PATH set C preprocessor pathname #设置GCC-C++编译器所在目录路径。
--with-cc-opt=OPTIONS set additional C compiler options #设置将添加到CFLAGS变量的其他参数,若在FreeBSD系统下使用PCRE库时,应指定"--with-ccc-opt="-I /usr/local/include""。若你在使用select事件驱动模型时,还可以使用它设置可打开的最大文件描述符数量,突破1024的限制,比如"--with-ccc-opt="-D FD_SETSIZE=2048""
--with-ld-opt=OPTIONS set additional linker options #设置将在连接期间使用的其他参数,若在FreeBSD系统下使用PCRE库时,应指定"--with-ccc-opt="-L /usr/local/lib""。
--with-cpu-opt=CPU build for the specified CPU, valid values:
pentium, pentiumpro, pentium3, pentium4,
athlon, opteron, sparc32, sparc64, ppc64 #设置CPU型号,为特定的CPU执行编译操作,有效的值:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, sparc32, sparc64,ppc64。
--without-pcre disable PCRE library usage #禁用PCRE库的使用。
--with-pcre force PCRE library usage #启用PCRE库的使用。PCRE库是一个Perl库,包含Perl兼容的正则表达式。
--with-pcre=DIR set path to PCRE library sources #若你是源码安装的PCRE库,则需要通过此项设置PCRE库的所在目录路径。
--with-pcre-opt=OPTIONS set additional build options for PCRE #为PCRE设置其他要编译的选项。
--with-pcre-jit build PCRE with JIT compilation support #启用"即时编译"的支持,开启此项,则会利用"pcre_jit"指令快速编译PCRE库。
--without-pcre2 do not use PCRE2 library #
--with-zlib=DIR set path to zlib library sources #若你是源码安装的Zlib库,则需要通过此项设置Zlib库的所在目录路径。当启用HTTP_Gzip模块的时候需要此库的支持。
--with-zlib-opt=OPTIONS set additional build options for zlib #为Zlib设置其他要编译的选项。
--with-zlib-asm=CPU use zlib assembler sources optimized
for the specified CPU, valid values:
pentium, pentiumpro #为Zlib库的编译设置特定CPU,会加快编译速度,有效值:pentium, pentiumpro。
--with-libatomic force libatomic_ops library usage #启用Libatomic_Ops库的使用。
--with-libatomic=DIR set path to libatomic_ops library sources #若你是源码安装的Libatomic_Ops库,则需要通过此项设置Libatomic_Ops库的所在目录路径。
--with-openssl=DIR set path to OpenSSL library sources #若你是源码安装的OpenSSL库,则需要通过此项设置OpenSSL库的所在目录路径。
--with-openssl-opt=OPTIONS set additional build options for OpenSSL #为OpenSSL设置其他要编译的选项
--with-debug enable debug logging #启用调试级别的日志。也可以手动修改主配置文件,使用"error_log /path/to/log debug;"指令设置调试级别的日志。
6.3.2.2 选择可选模块
想自定义比如安装目录、编译新的模块或者第三方模块,需要使用相应的参数。这里只设置少量的模块
[root@centos13 nginx-1.22.1]# ./configure --prefix=/root/nginx \
> --with-http_ssl_module \
> --with-http_stub_status_module \
> --with-http_gzip_static_module \
> --with-stream \
> --with-http_realip_module \
> --with-http_flv_module \
> --with-http_random_index_module \
> --with-mail \
> --with-pcre
……
[root@centos13 nginx-1.22.1]# make & make install
……
make[1]: Leaving directory `/data/nginx-1.22.1'
[1]+ Done make
[root@centos13 nginx-1.22.1]# ll /root/nginx/sbin/ #查看nginx命令是否在配置中的路径
total 7668
-rwxr-xr-x. 1 root root 7848368 Oct 26 07:14 nginx
[root@centos13 nginx]# vim /etc/profile #将nginx二进制文件添加到path, 就可以直接使用nginx命令
……
export PATH=/root/nginx/sbin:$PATH
……
[root@centos13 nginx]# source /etc/profile #source 刷一下文件
[root@centos13 nginx-1.22.1]# nginx -t #直接使用nginx命令检查配置文件语法,不用全路径
nginx: the configuration file /root/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /root/nginx/conf/nginx.conf test is successful
启动nginx
安装完成后,Nginx 的文件默认全在 --prefix 指定的目录中,即/root/nginx。编译出的 Nginx 二进制文件在 /root/nginx/sbin 目录下,默认的配置文件为 /root/nginx/conf/nginx.conf。
因为nginx默认用户是nobody,而且没有修改各个目录文件的权限,现在需要修改nginx的用户为root
[root@centos13 conf]# pwd
/root/nginx/conf
[root@centos13 conf]# vim nginx.conf
user root;
……
[root@centos13 conf]# nginx -t #检查nginx配置文件语法是否有问题
nginx: the configuration file /root/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /root/nginx/conf/nginx.conf test is successful
[root@centos13 conf]# nginx 启动nginx
[root@centos13 nginx]# ps -ef |grep nginx #查看nginx进程 , 可以看到master 和worker进程
root 55252 1 0 09:13 ? 00:00:00 nginx: master process nginx
root 55253 55252 0 09:13 ? 00:00:00 nginx: worker process
[root@centos13 nginx]# ss -lantp |grep 80 #查看启动的80端口
LISTEN 0 128 *:80 *:* users:(("nginx",pid=55253,fd=6),("nginx",pid=55252,fd=6))
[root@centos13 conf]# curl 127.0.0.1 #使用环回地址curl自己
……
<title>Welcome to nginx!</title>
……
使用其他设备192.168.232.14测试是否通,如果不通可以看看iptables是否drop
[root@localhost ~]# ip a |grep ens33|grep inet |awk '{print $2}'
192.168.232.14/24
[root@localhost ~]# curl 192.168.232.13
…
<title>Welcome to nginx!</title>
…
在浏览器上看下是否能够正常进入网页,在浏览器输ip地址回车

1.1 Nginx服务基础操作
nginx 启动nginx
nginx -t 检查nginx配置文件语法是否正常
nginx -v 查看nginx版本信息
nginx -V 查看详情,可以看编译进nginx的模块
nginx -s stop|reload|reopen stop、quit停止服务,区别和windows中的一致。 reload 热加载 , reopen 重新打开日志文件
nginx -c 配置文件路径 指定配置文件,默认配置文件在nginx安装目录下的conf/nginx.conf
1.1 nginx目录结构
所有结尾为 default 的文件都是备份文件,其他未做注释的目录,为在生产环境中较少用到的目录。
[root@centos13 nginx]# tree /root/nginx/
/root/nginx/
├── client_body_temp # post 大文件暂存目录
├── conf #nginx所有配置文件的目录
│ ├── fastcgi.conf # fastcgi相关的配置文件
│ ├── fastcgi.conf.default #fastcgi.conf的原始配置文件
│ ├── fastcgi_params #fastcgi的参数文件
│ ├── fastcgi_params.default
│ ├── koi-utf
│ ├── koi-win
│ ├── mime.types #媒体类型
│ ├── mime.types.default
│ ├── nginx.conf #nginx默认主配置文件,日志使用和修改主要在这里
│ ├── nginx.conf.default
│ ├── scgi_params #scgi相关参数文件
│ ├── scgi_params.default
│ ├── uwsgi_params #uwsgi相关参数文件
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp #fastcgi临时数据目录
├── html #nginx默认站点目录
│ ├── 50x.html 错误页面优雅代提显示文件,例如出现502等错误会调用此页面
│ └── index.html #默认的首页文件
├── logs #nginx日志文件目录
│ ├── access.log #访问日志文件
│ ├── error.log #错误日志文件
│ └── nginx.pid #pid文件,nginx进程启动后,会把所有进程的id号写到这文件
├── proxy_temp #临时目录
├── sbin #nginx 可执行文件目录
│ └── nginx #nginx 二进制可执行程序
├── scgi_temp #临时目录
└── uwsgi_temp #临时目录
网友评论