企业级 Nginx 高性能部署与优化实战
企业级 Nginx 服务器的部署与优化方案。内容包括源码编译安装、平滑升级回滚机制、配置文件优化(Worker 进程、CPU 绑定)、Location 匹配规则详解、用户认证、错误页面与日志管理、下载服务与限速、文件检测、状态监控、压缩功能、变量使用、URL 重写、HTTPS 加密、防盗链、反向代理、动静分离、缓存加速、七层与四层负载均衡、PHP 整合及 OpenResty 编译安装等核心知识点。

企业级 Nginx 服务器的部署与优化方案。内容包括源码编译安装、平滑升级回滚机制、配置文件优化(Worker 进程、CPU 绑定)、Location 匹配规则详解、用户认证、错误页面与日志管理、下载服务与限速、文件检测、状态监控、压缩功能、变量使用、URL 重写、HTTPS 加密、防盗链、反向代理、动静分离、缓存加速、七层与四层负载均衡、PHP 整合及 OpenResty 编译安装等核心知识点。





首先通过 nginx -s stop 停止服务,否则会显示端口占用。


不运行 make install
将 objs 下的 nginx 拷贝到原先的启动文件下
[root@Nginx sbin]# cp -f /root/nginx-1.29.4/objs/nginx /usr/local/nginx/sbin/nginx
-f 为强制覆盖。\ 表示绕过可能的别名。
查看 Nginx 日志文件夹
结束 Nginx 的 master 进程



重新将旧版本的 Nginx 启动脚本复制至启动文件夹
重新加载旧版本 Nginx 主进程
查看版本信息






测试

用子配置文件的方式编写
新建子配置文件目录
编写主配置文件
include "/usr/local/nginx/conf/conf.d/*.conf";
[root@Nginx ~]# mkdir -p /webdata/nginx/example.com/lee/html
[root@Nginx ~]# echo lee.example.com > /webdata/nginx/example.com/lee/html/index.html
mkdir -p /webdata/nginx/example.com/lee/html/lee
[root@Nginx conf.d]# echo lee > /webdata/nginx/example.com/lee/html/lee/index.html
#lee 标识 location 中的 root 值 + location 后面指定的值代表目录的路径


建立 /mnt/ 下默认发布文件
echo passwd > /mnt/index.html


五秒后自动断开


访问三次后自动断开

#匹配优先级从高到低:=, ^~, /*, 不带符号
表示区分大小写,严格访问该目录,不可包含


表示精确匹配,必须完全一致


表示由该目录开头,里面可以包含其他目录但必须是根目录下的该目录


表示访问的文件夹包含该名称由该字母开头的,后面可以跟其他字符,且区分大小写。


表示访问文件包含该内容,不区分大小写,只要包含即可被选中。但是同样改文件名前面必须一致。


为转义字符,通过此做法进行动静分离。




[root@Nginx conf.d]# mkdir -p /usr/local/nginx/html/admin
[root@Nginx conf.d]# echo amdin >/usr/local/nginx/html/admin/index.html



没有新建该访问内容,错误代码为 404 转换到错误页面内容上。

[root@Nginx ~]# mkdir -p /usr/local/nginx/logs/example.org/








通过配置文件中的参数进行显示优化




通过 autoindex_format 参数后面跟不同的页面类型达到设定页面风格的目的

try_files 会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部 URI 的指向。最后一个参数是回退 URI 且必须存在,否则会出现内部 500 错误。



只能 usr/local/nginx/conf/.htpasswd 文件中的用户才能查看


一个文件大小较大一个较小




删除原先的 nginx 启动文件,完成后将最新的启动文件拷贝到启动文件夹下。




= #比较变量和字符串是否相等,相等时 if 指令认为该条件为 true,反之为 false
!= #比较变量和字符串是否不相等,不相等时 if 指令认为条件为 true,反之为 false
~ #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假
~* #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~* #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真
-f 和 !-f #判断请求的文件是否存在和是否不存在
-d 和 !-d #判断请求的目录是否存在和是否不存在
-x 和 !-x #判断文件是否可执行和是否不可执行
-e 和 !-e #判断请求的文件或目录是否存在和是否不存在 (包括文件,目录,软链接)
注意: 如果$变量的值为空字符串或 0,则 if 指令认为该条件为 false,其他条件为 true。 nginx 1.0.1 之前$变量的值如果以 0 开头的任意字符串会返回 false




返回一个值


直接中断


将网页临时重写到百度






访问 break/index.html 时从写到 text1/index.html,遇到 break 直接中断。


遇到 last 时继续向下读取,重写到 location /test1 字段

[root@Nginx ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/nginx/certs/example.org.key -x509 -days 365 -out /usr/local/nginx/certs/example.org.crt


图片是从 nginx 服务器上获得的

访问时直接跳转到另外一个图片


[root@RS2 ~]# mkdir /var/www/html/web
[root@RS2 ~]# echo 172.25.254.20 web > /var/www/html/web/index.html


隐藏头部信息



默认访问不透传 server 信息



[root@RS1 ~]# vim /etc/httpd/conf/httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" combined
[root@RS1 ~]# systemctl restart httpd


在 RS1 中下载 php 软件。










错误页面设置
[root@Nginx ~]# mkdir -p /webdir/example.org/error/html
[root@Nginx ~]# echo error > /webdir/example.org/error/html/index.html
[root@Nginx ~]# vim /usr/local/nginx/conf/conf.d/vhosts.conf
server {
listen 8888;
root /webdir/example.org/error/html;
}

后端服务停止后



[root@Nginx ~]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-curl --with-iconv --with-mhash --with-zlib --with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring --enable-bcmath --with-fpm-systemd


设置监听端口

[root@Nginx php-fpm.d]# cp /root/php-8.3.30/php.ini-production /usr/local/php/etc/php.ini
[root@Nginx php-fpm.d]# vim /usr/local/php/etc/php.ini

[root@Nginx ~]# cp /root/php-8.3.30/sapi/fpm/php-fpm.service /lib/systemd/system/
[root@Nginx ~]# vim /lib/systemd/system/php-fpm.service

将其注释掉这些文件的只读权限,重新加载启动文件后启动 php

[root@Nginx ~]# vim ~/.bash_profile
export PATH=$PATH:/usr/local/nginx/sbin:/usr/local/php/sbin:/usr/local/php/bin

php 页面及静态页面







下载 configure 脚本工具








增加 Memcached 高速缓存模块


测试:ab -n 10000 -c500 http://php.baobao.org/example.php





导入子配置文件位置在 http 字段之外

stream 模块

另外的客户端测试

仅能有一个 stream 模块文件



OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
[root@Nginx ]# wget https://openresty.org/download/openresty-1.27.1.2.tar.gz
[root@Nginx ~]# dnf -yq install gcc pcre-devel openssl-devel perl zlib-devel
[root@Nginx ~]# useradd -r -s /sbin/nologin nginx
[root@Nginx ~]# tar zxf openresty-1.27.1.2
[root@webserver ~]# cd openresty-1.27.1.2/
[root@Nginx openresty-1.17.8.2]# ./configure \
--prefix=/usr/local/openresty \
--user=nginx --group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre --with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
[root@Nginx openresty-1.17.8.2]# gmake && gmake install
[root@webserver openresty]# vim ~/.bash_profile
export PATH=$PATH:/usr/local/openresty/bin
source ~/.bash_profile


微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online