nginx 安装
二进制安装
前置
如果你是在官网上手动下载的nginx源码文件自行构建安装的,在这个过程之前需要提前安装一些三方依赖。
yum install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
下边解释一下这些包的作用
gcc-c++:c语言编译器,nginx源码用c语言写的,之后编译它的时候需要用到
pcre、pcre-devel:nginx 的 http 模块使用 它们 来解析正则表达式(pcre 是一个perl库,包括 perl 兼容的正则表达式库;而pcre-devel 又是使用 pcre 开发的一个二次开发库)
zlib、zlib-devel:nginx 使用 zlib 对 http 包的内容进行 gzip 压缩。
openssl、openssl-devel:OpenSSL 让nginx支持 SSL 协议。
下载与解压
点击跳转至官网下载 ,推荐稳定版。
Legacy versions
是历史版本,Mainline version
是主线版本 也就是正在开发的版本。
wget -c https://nginx.org/download/nginx-1.27.1.tar.gz
tar -zxvf nginx-1.27.1.tar.gz
cd ./nginx-1.27.1
编译
以下是我的nginx编译配置项,仅供参考:
- 安装到/home/soft/nginx,目录中(默认在/usr/local/nginx )
- 启动HTTP2模块
- 启用SSL模块
- 启动Gzip模块
- make 是编译,make install 是安装
./configure --prefix=/home/soft/nginx --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module
make && make install
实际上./configure 可以跟很多 参数,用于指定编译配置。
如下在"./configure"配置中,"--with"表示启用模块,也就是说这些模块在编译时不会自动构建"--without"表示禁用模块,也就是说这些模块在编译时会自动构建,若你想Nginx轻量级运行,可以去除一些不必要的模块。
查看更多参数
$ ./configure --help
--help #打印帮助信息
--prefix=PATH #指定安装目录
--sbin-path=PATH #指定bin二进制文件存放目录
--modules-path=PATH #指定模块modules文件存放目录
--conf-path=PATH #指定配置文件存放目录
--error-log-path=PATH #指定错误,警告和诊断日志文件存放目录
--pid-path=PATH #指定进程号pid存放目录
--lock-path=PATH #指定lock存放目录--user=USER #指定工作进程使用的非特权用户
worker processes
--group=GROUP #指定工作进程使用的非特权用户组
worker processes--build=NAME #设置设置可选的程序集名称nginx
--builddir=DIR #设置设置可选的程序集名称nginx的目录--with-select_module #启用构建用于服务器操作的模块select()
--without-select_module #禁用构建用于服务器操作的模块select()
--with-poll_module #启用构建用于服务器操作的模块pull()
--without-poll_module #禁用构建用于服务器操作的模块pull()--with-threads #指定能使用的线程池
--with-file-aio #指定能够使用的异步文件I/O
--with-http_ssl_module #启用添加HTTPS协议支持到HTTP服务器的模块
--with-http_v2_module #启用通过HTTP / 2协议进行HTTP服务器操作的模块组装
--with-http_v3_module #启用通过HTTP / 3协议进行HTTP服务器操作的模块组装
--with-http_realip_module #允许将客户端的地址更改为在指定的头字段中传递的地址
--with-http_addition_module #允许您在响应之前和之后添加文本
--with-http_xslt_module #允许您使用XSLT模板转换XML响应,对于此模块的组装和操作,需要 libxml2和 libxslt库
--with-http_xslt_module=dynamic enable dynamic ngx_http_xslt_module
--with-http_image_filter_module #允许您转换JPEG,GIF,PNG和WebP格式的图像
--with-http_image_filter_module=dynamic enable dynamic ngx_http_image_filter_module
--with-http_geoip_module #使用现成的MaxMind数据库创建其值取决于客户端IP地址的 变量
--with-http_geoip_module=dynamic enable dynamic ngx_http_geoip_module
--with-http_sub_module #允许您在响应中将一个指定的字符串更改为另一个
--with-http_dav_module #用于使用WebDAV协议在服务器上自动执行文件管理任务
--with-http_flv_module #为Flash Video(FLV)文件提供服务器端伪流支持
--with-http_mp4_module #为MP4文件提供服务器端伪流支持
--with-http_gunzip_module #允许对Content-Encoding: gzip不支持gzip压缩方法的客户端使用“ ” 解包响应
--with-http_gzip_static_module #允许您提供具有相同名称和扩展名“ .gz” 而不是常规文件的预压缩文件
--with-http_auth_request_module #根据子查询的结果提供客户端授权
--with-http_random_index_module #为以斜杠(' /')结尾的查询提供服务,并将随机文件作为目录的索引文件发出
--with-http_secure_link_module #允许您验证所请求链接的真实性,保护资源免受未经授权的访问,以及限制链接的持续时间
--with-http_degradation_module enable ngx_http_degradation_module
--with-http_slice_module #允许您将请求拆分为子查询,每个子查询返回一个特定的响应范围
--with-http_stub_status_module #提供对基本服务器状态信息的访问--without-http_charset_module #禁用,该模块允许您将指定的编码添加到响应头的“Content-Type”字段,并将数据从一种编码重新编码到另一种编码
--without-http_gzip_module #禁止组装HTTP服务器响应压缩模块 。对于此模块的组装和操作,需要zlib库
--without-http_ssi_module #禁止组装ngx_http_ssi_module模块,该模块在通过它的响应中处理服务器端包含(SSI)命令
--without-http_userid_module #禁止组装ngx_http_userid_module模块 ,发出cookie以识别客户端
--without-http_access_module #禁止构建ngx_http_access_module模块,该模块允许您限制对某些客户端地址的访问
--without-http_auth_basic_module #禁止组装ngx_http_auth_basic_module模块,该模块允许您使用“HTTP基本身份验证”协议检查用户名和密码来限制对资源的访问
--without-http_mirror_module #禁止,该模块允许您通过创建后台镜像子查询来镜像原始请求
--without-http_autoindex_module #禁止组装ngx_http_autoindex_module模块 ,以斜杠(' /')结尾的请求,以及ngx_http_index_module模块 找不到索引文件时的列表目录
--without-http_geo_module #禁止,该模块允许您创建其值取决于客户端IP地址的变量
--without-http_map_module #禁止,该模块该模块允许为A / B测试创建变量
--without-http_split_clients_module #禁止,该模块允许为A / B测试创建变量
--without-http_referer_module #禁止,该模块允许阻止对具有标头中“Referer”字段的无效值的请求的站点的访问
--without-http_rewrite_module #禁止构建允许您重定向和更改请求URI的HTTP服务器模块 。对于该模块的组装和操作,需要PCRE库。
--without-http_proxy_module #禁止组装 HTTP服务器代理模块
--without-http_fastcgi_module #禁止,该模块允许向FastCGI服务器发送请求
--without-http_uwsgi_module #禁止,该模块允许向uwsgi服务器发送请求
--without-http_scgi_module #禁止,该模块允许向SCGI服务器发送请求
--without-http_grpc_module #禁止,该模块允许向gRPC服务器发送请求
--without-http_memcached_module #禁止,该模块允许从memcached服务器接收答案
--without-http_limit_conn_module #禁止,该模块允许您使用给定密钥限制连接数,特别是来自单个IP地址的连接数
--without-http_limit_req_module #禁止,该模块允许您限制处理给定密钥请求的速度,或者作为特殊情况,处理从单个IP地址接收的请求的速度
--without-http_empty_gif_module #禁止,单象素透明 GIF
--without-http_browser_module #禁止,该模块创建的变量的值取决于请求标头中“User-Agent”字段的值
--without-http_upstream_hash_module #禁止构建实现负载平衡哈希方法的模块
--without-http_upstream_ip_hash_module #禁用实现ip_hash负载均衡方法的模块的程序集
--without-http_upstream_least_conn_module #禁用构建实现least_conn负载平衡方法的模块
--without-http_upstream_keepalive_module #禁止组装实现与上游服务器的高速缓存连接的模块
--without-http_upstream_zone_module #禁止组装允许您将一组上游服务器的工作状态保存在 共享内存中的模块--with-http_perl_module #该模块允许您在Perl上编写位置处理程序和变量,以及将Perl调用插入SSI
--with-http_perl_module=dynamic enable dynamic ngx_http_perl_module
--with-perl_modules_path=PATH #指定Perl模块文件所在的目录
--with-perl=PATH #指定Perl所在的目录--http-log-path=PATH #设置主HTTP请求日志文件的名称
--http-client-body-temp-path=PATH #设置用于存储具有客户端请求主体的临时文件的目录。可以nginx.conf使用client_body_temp_path指令 在配置文件中更改文件名
--http-proxy-temp-path=PATH #设置用于存储临时文件的目录,其中包含从代理服务器接收的数据。可以nginx.conf使用proxy_temp_path指令 在配置文件中更改文件名
--http-fastcgi-temp-path=PATH #设置用于存储临时文件的目录,其中包含从FastCGI服务器接收的数据。可以nginx.conf使用fastcgi_temp_path指令 在配置文件中更改文件名
--http-uwsgi-temp-path=PATH #设置用于存储临时文件的目录,其中包含从uwsgi-servers接收的数据。可以nginx.conf使用uwsgi_temp_path指令 在配置文件中更改文件名
--http-scgi-temp-path=PATH #设置用于存储临时文件的目录,其中包含从SCGI服务器接收的数据。可以nginx.conf使用scgi_temp_path指令 始终在配置文件中更改文件名--without-http #拒绝HTTP服务器
--without-http-cache #禁用HTTP缓存--with-mail #启用POP3 / IMAP4 / SMTP 邮件代理服务器
--with-mail=dynamic enable dynamic POP3/IMAP4/SMTP proxy module
--with-mail_ssl_module #允许使用SSL / TLS为邮件代理组装模块。对于此模块的组装和操作,需要OpenSSL库
--without-mail_pop3_module #禁止,邮件代理服务器中的POP3协议
--without-mail_imap_module #禁用,邮件代理服务器中的IMAP协议
--without-mail_smtp_module #禁用,邮件代理服务器中的IMAP协议--with-stream #允许组装 流模块 以进行TCP / UDP代理和平衡
--with-stream=dynamic # enable dynamic TCP/UDP proxy module
--with-stream_ssl_module #允许模块组件通过SSL / TLS协议进行流模块操作 。模块不会。对于此模块的组装和操作,需要OpenSSL库
--with-stream_realip_module #允许将客户端的地址更改为PROXY协议头中传输的地址
--with-stream_geoip_module #该模块使用现成的MaxMind数据库创建其值取决于客户端IP地址的 变量
--with-stream_geoip_module=dynamic enable dynamic ngx_stream_geoip_module
--with-stream_ssl_preread_module #该模块允许从ClientHello消息中提取信息 而不需要SSL / TLS终止
--without-stream_limit_conn_module #禁止,该模块允许您限制给定密钥的连接数,特别是来自单个IP地址的连接数
--without-stream_access_module #禁止,该模块允许您限制对某些客户端地址的访问
--without-stream_geo_module #禁止,该模块允许您创建其值取决于客户端IP地址的变量
--without-stream_map_module #禁止,该模块允许您创建其值取决于其他变量值的变量
--without-stream_split_clients_module #禁止,该模块允许为A / B测试创建变量
--without-stream_return_module #禁止,该模块允许将指定值发送到客户端,然后关闭连接
--without-stream_upstream_hash_module #禁止构建实现负载平衡哈希方法的模块
--without-stream_upstream_least_conn_module #禁用构建实现least_conn负载平衡方法的模块
--without-stream_upstream_zone_module #禁止组装允许您将一组上游服务器的工作状态保存在 共享内存中的模块--with-google_perftools_module #支持使用Google Performance Tools分析nginx工作流程
--with-cpp_test_module enable ngx_cpp_test_module--add-module=PATH #添加引入第三方模块
--add-dynamic-module=PATH #组装外部动态模块目录--with-compat #包括与动态模块的兼容模式
--with-cc=PATH #指定用于构建的编译器
--with-cpp=PATH #指定在构建期间使用的预处理器
--with-cc-opt=OPTIONS #指定将添加到CFLAGS变量的其他参数,如果你想增加可运行文件的数量 select(),使用--with-cc-opt="-D FD_SETSIZE=2048"
--with-ld-opt=OPTIONS #指定将在链接期间使用的其他参数
--with-cpu-opt=CPU 允许组件,用于以下处理器之一:
pentium, pentiumpro, pentium3, pentium4,
athlon, opteron, sparc32, sparc64, ppc64--without-pcre #禁止使用PCRE库
--with-pcre #允许使用PCRE库
--with-pcre=DIR #指定PCRE库的路径
--with-pcre-opt=OPTIONS #设置其他PCRE构建选项
--with-pcre-jit #构建一个 支持JIT 的 PCRE库(1.1.12,pcre_jit指令 )--with-zlib=DIR #指定zlib库的路径
--with-zlib-opt=OPTIONS #设置其他zlib构建选项
--with-zlib-asm=CPU 允许在以下处理器中的一个优化的库的zlib汇编插入件的组件的使用:
pentium, pentiumpro--with-libatomic #使用libatomic_ops库启用构建
--with-libatomic=DIR #指定libatomic_ops库源的路径--with-openssl=DIR #指定OpenSSL库源的路径
--with-openssl-opt=OPTIONS #为OpenSSL设置其他构建选项--with-debug #允许调试日志
启动与停止
cd /usr/local/nginx/sbin/
启动: ./nginx
停止:./nginx -s stop
安全停止:./nginx -s quit
使用yum安装
这是推荐的方式,也是最简单的
yum install -y nginx
但是此方式安装一般都比较老,因为仓库里的软件老,如何更新呢?
为仓库配置nginx源,这样就可以了。
第一步:安装yum软件包管理器的扩展 yum-utils
,后边内部会用到
yum install yum-utils
第二步:升级yum仓库,创建一个文件/etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
priority=1
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
priority=1
最后,再次安装就是最新的了。
对了,这样默认是最新的稳定版,如果你想用最新开发版,执行下以下命令即可
yum-config-manager --enable nginx-mainline
其它
其它命令
检查配置文件是否正确:./nginx -t
刷新配置:./nginx -s reload
查看进程:ps aux|grep nginx
添加为系统服务
将自己编译安装的nginx版添加为,使其可systemctl start nginx
新增配置文件 /usr/lib/systemd/system/nginx.service
即可,参考
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/home/soft/nginx/logs/nginx.pid
ExecStartPre=/home/soft/nginx/sbin/nginx -t -c /home/soft/nginx/conf/nginx.conf
ExecStart=/home/soft/nginx/sbin/nginx -c /home/soft/nginx/conf/nginx.conf
ExecReload=/home/soft/nginx/sbin/nginx -s reload
ExecStop=/home/soft/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target