今天开始学习NGINX服务配置与部署
一.nginx服务搭建
nginx的安装
yum安装(openeuler可以直接安装):
[root@localhost ~]# yum install -y nginx
如果安装不了就先
[root@localhost ~]# yum install -y epel-release
(2)编译安装(生产环境下大多都是编译安装):
需下载源文件
好好了解一下 Nginx 编译安装时的配置参数里面的内容都是干什么用的
[root@localhost nginx]# nginx -V
nginx version: nginx/1.24.0
built by gcc 12.3.1 (openEuler 12.3.1-64.oe2403sp1) (GCC)
built with OpenSSL 3.0.12 24 Oct 2023
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_perl_module=dynamic --with-http_auth_request_module --with-mail=dynamic --with-mail_ssl_module --with-openssl-opt=yes --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -grecord-gcc-switches -pipe -fstack-protector-strong -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/generic-hardened-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/generic-hardened-ld -Wl,-E'
一、基础路径配置:定义 Nginx 文件 / 目录的位置
这类参数指定 Nginx 安装后,可执行文件、配置文件、日志文件等的存储路径,是运维时定位文件的核心依据。
参数 | 作用 |
---|---|
--prefix=/usr/share/nginx | Nginx 的主安装目录(前缀目录),其他路径默认基于此目录扩展(除非单独指定)。 |
--sbin-path=/usr/sbin/nginx | Nginx 核心可执行文件(nginx 命令)的路径,用于启动 / 停止 / 重启 Nginx(如 systemctl start nginx 本质调用此文件)。 |
--modules-path=/usr/lib64/nginx/modules | Nginx 动态模块(.so 文件)的存放目录,后续可通过 load_module 指令加载这里的模块。 |
--conf-path=/etc/nginx/nginx.conf | Nginx 主配置文件的路径,所有服务配置(如虚拟主机、反向代理)都基于此文件生效。 |
--error-log-path=/var/log/nginx/error.log | Nginx 错误日志的路径(如启动失败、请求报错等信息),是排查故障的关键日志。 |
--http-log-path=/var/log/nginx/access.log | HTTP 请求日志的路径(记录所有客户端请求的 IP、时间、URL、状态码等),用于流量分析和访问审计。 |
--http-xxx-temp-path (如 --http-client-body-temp-path ) | Nginx 处理 HTTP 请求时的临时文件目录:- client_body :存储客户端 POST 提交的表单数据(如文件上传临时数据);- fastcgi /proxy /scgi /uwsgi :存储反向代理(如代理 PHP-FPM、Tomcat)时的临时缓存数据。 |
--pid-path=/run/nginx.pid | 存储 Nginx 主进程 ID(PID)的文件路径,用于系统识别 Nginx 进程(如 kill $(cat /run/nginx.pid) 可停止 Nginx)。 |
--lock-path=/run/lock/subsys/nginx | Nginx 锁文件路径,用于防止多个进程同时操作 Nginx(如避免重复启动)。 |
二、用户与权限配置:定义 Nginx 进程的运行身份
控制 Nginx 进程的用户组权限,避免以 root 身份运行带来的安全风险。
参数 | 作用 |
---|---|
--user=nginx | Nginx 工作进程(处理请求的进程)的运行用户,通常创建专用的 nginx 用户,限制权限范围。 |
--group=nginx | Nginx 工作进程所属的用户组,与 --user 配合实现权限隔离。 |
三、核心功能与性能优化:启用底层能力
开启 Nginx 基础性能优化和核心特性,提升并发处理能力。
参数 | 作用 |
---|---|
--with-file-aio | 启用 异步文件 I/O(AIO),允许 Nginx 在读取文件时不阻塞进程,大幅提升高并发场景下的文件传输效率(如静态资源服务)。 |
--with-ipv6 | 启用 IPv6 协议支持,允许 Nginx 监听和处理 IPv6 地址的请求(适配现代网络环境)。 |
--with-pcre | 集成 PCRE(Perl Compatible Regular Expressions)库,支持 Nginx 配置中使用正则表达式(如 location ~ \.php$ 匹配 PHP 请求)。 |
--with-pcre-jit | 启用 PCRE 的 即时编译(JIT) 功能,将常用正则表达式编译为机器码,提升正则匹配速度(减少 CPU 占用)。 |
--with-debug | 启用 Nginx 调试模式,生成更详细的调试日志(仅用于开发 / 排查复杂问题,生产环境建议关闭,避免日志冗余)。 |
--with-google_perftools_module | 集成 Google Performance Tools 库,用于分析 Nginx 的性能瓶颈(如 CPU 占用、内存泄漏等),仅用于性能调优场景。 |
四、HTTP 模块:定义 Nginx 处理 HTTP 请求的能力
HTTP 模块是 Nginx 作为 Web 服务器 / 反向代理的核心,决定了支持的 HTTP 特性(如 HTTPS、压缩、缓存等)。参数中 --with-http_xxx_module
表示启用对应模块,=dynamic
表示「动态模块」(可后续加载,不强制编译进主程序)。
模块参数 | 作用 |
---|---|
--with-http_ssl_module | 启用 HTTPS 支持,允许 Nginx 配置 SSL 证书(如 listen 443 ssl ),实现加密传输(必备模块,保障数据安全)。 |
--with-http_v2_module | 启用 HTTP/2 协议支持,相比 HTTP/1.1 优化了并发传输(如多路复用、头部压缩),提升网页加载速度(需配合 HTTPS 使用)。 |
--with-http_realip_module | 启用 真实 IP 透传,当 Nginx 位于反向代理(如 CDN、负载均衡器)后端时,可通过此模块获取客户端真实 IP(而非代理服务器 IP),用于日志记录和访问控制。 |
--with-http_addition_module | 启用 内容追加 / 插入 功能,允许在 HTTP 响应的头部或尾部添加自定义内容(如给所有页面添加版权注释)。 |
--with-http_xslt_module=dynamic | 启用 XSLT 转换模块(动态),支持将 XML 响应转换为 HTML(通过 XSLT 样式表),适用于 XML 服务场景(较少用)。 |
--with-http_image_filter_module=dynamic | 启用 图片处理模块(动态),支持对图片进行缩放、裁剪、旋转、加水印等操作(如缩略图生成,无需依赖外部工具)。 |
--with-http_sub_module | 启用 内容替换模块,允许在 HTTP 响应中替换指定字符串(如将页面中的 old.domain.com 替换为 new.domain.com )。 |
--with-http_dav_module | 启用 WebDAV 协议支持,允许客户端通过 HTTP 进行文件上传、修改、删除(如用于简单的文件管理服务)。 |
--with-http_flv_module /--with-http_mp4_module | 启用 FLV/MP4 流媒体支持,优化视频文件的传输(如支持视频断点续传、进度拖拽,适合视频网站)。 |
--with-http_gunzip_module | 启用 Gunzip 解压,当客户端不支持 Gzip 时,自动将 Gzip 压缩后的资源解压后返回(兼容旧客户端)。 |
--with-http_gzip_static_module | 启用 静态 Gzip 压缩,允许 Nginx 直接返回预压缩好的静态文件(如 index.html.gz ),避免实时压缩消耗 CPU。 |
--with-http_random_index_module | 启用 随机索引,当访问目录时(如 http://domain.com/files/ ),随机返回目录下的一个文件(而非默认的 index.html )。 |
--with-http_secure_link_module | 启用 安全链接,生成带有过期时间或签名的临时 URL(如 http://domain.com/file.zip?sign=xxx&expires=xxx ),防止资源被非法下载。 |
--with-http_degradation_module | 启用 服务降级,当服务器负载过高时,自动返回简单响应(如 503 页面),避免服务崩溃。 |
--with-http_slice_module | 启用 分片请求,支持客户端将大文件请求拆分为多个小分片(如下载 1GB 文件时拆分为 10 个 100MB 分片),提升大文件下载速度和稳定性。 |
--with-http_perl_module=dynamic | 启用 Perl 嵌入模块(动态),允许在 Nginx 配置中嵌入 Perl 脚本(如复杂的访问控制逻辑),灵活性高但性能略低。 |
--with-http_auth_request_module | 启用 请求认证,允许 Nginx 将认证请求转发到后端服务(如 PHP 接口),由后端判断用户是否有权访问(如单点登录场景)。 |
五、邮件 / 流处理模块:扩展 Nginx 除 HTTP 外的能力
除了 Web 服务,Nginx 还可作为邮件代理或 TCP/UDP 反向代理,这类模块用于支持这些扩展场景。
模块参数 | 作用 |
---|---|
--with-mail=dynamic | 启用 邮件代理模块(动态),允许 Nginx 作为 SMTP/POP3/IMAP 代理(如转发邮件请求到后端邮件服务器,实现负载均衡)。 |
--with-mail_ssl_module | 为邮件模块启用 SSL 支持,实现邮件传输的加密(如 POP3S、IMAPS 协议)。 |
--with-stream=dynamic | 启用 TCP/UDP 流处理模块(动态),允许 Nginx 作为 TCP/UDP 反向代理(如代理数据库端口、Redis 端口,实现后端服务的负载均衡和高可用)。 |
--with-stream_ssl_module | 为流处理模块启用 SSL 支持,实现 TCP 连接的加密(如代理 MySQL 时使用 SSL 加密传输)。 |
六、编译优化:定义编译器参数,提升性能与安全性
通过编译器(如 GCC)的参数,优化 Nginx 二进制文件的性能和安全性,避免漏洞。
参数 | 作用(拆解 --with-cc-opt 和 --with-ld-opt 中的关键选项) |
---|---|
--with-cc-opt='...' (编译器参数) | 控制 GCC 编译时的选项:- -O2 :启用二级优化,平衡编译速度和程序性能;- -g /-grecord-gcc-switches :生成调试信息(用于排查崩溃问题);- -pipe :使用管道传递编译中间文件,加速编译;- -fstack-protector-strong /-Wp,-D_FORTIFY_SOURCE=2 :启用栈保护,防止缓冲区溢出攻击;- -Wall /-Werror=format-security :开启所有警告,且将格式安全错误视为编译错误(避免代码隐患);- -m64 /-mtune=generic :针对 64 位系统优化,适配通用 CPU;- -fasynchronous-unwind-tables /-fstack-clash-protection :增强堆栈异常处理,防止栈冲突攻击。 |
--with-ld-opt='...' (链接器参数) | 控制链接器(ld)生成二进制文件的选项:- -Wl,-z,relro /-Wl,-z,now :启用内存地址随机化和立即绑定,防止代码注入攻击;- -specs=/usr/lib/rpm/generic-hardened-ld :使用 RPM 系统的硬化链接规则,进一步提升安全性;- -Wl,-E :允许动态模块访问主程序的符号(确保动态模块正常加载)。 |
--with-openssl-opt=yes | 传递额外参数给 OpenSSL 编译(此处 yes 表示启用默认优化),确保 http_ssl_module 等模块使用的 OpenSSL 库性能最优。 |
[root@localhost nginx]# vim nginx.conf
error_log /var/log/nginx/error.log notice #错误文件日志
如果网站不能正常访问那是什么问题?
首先确定客户端是否有问题
nginx -t | 检查配置是否有问题 |
nginx -c configfilePath | 指定配置文件启动nginx |
[root@localhost ~]# nginx -t -c /etc/nginx/nginx.conf
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
信号名 | 含义 |
---|---|
stop | 直接停止 |
quit | 优雅的退出:有人在访问不会结束进程 |
reopen | 分割日志 |
reload | 重新加载配置文件 |
-s signal : send signal to a master process: stop, quit, reopen, reload
指定当前启动时的配置参数
[root@localhost ~]# nginx -g "daemon off;"