未登录

信蚁社区 通行证

搜索
热搜: 统信UOS 麒麟
查看: 131|回复: 0

[关于麒麟] 全网最详细基于Kylin的Nginx服务部署与配置(1/2)

[复制链接]

103

主题

4

回帖

339

积分

实习版主

Rank: 7Rank: 7Rank: 7Rank: 7

积分
339

最佳新人灌水之王优秀版主

发表于 2025-4-19 15:01:14 | 显示全部楼层 |阅读模式
以下所使用的环境为:
虚拟化软件:VMware Workstation 17 Pro
麒麟系统版本:Kylin-Server-V10-SP3-2403-Release-20240426-x86_64
一、Nginx基础

1. 常见Web服务器介绍

1.1 Apache服务器

Apache是目前世界上最流行的Web服务器之一,支持跨平台应用,可以运行在几乎所有的Unix、Windows、Linux系统平台上,尤其对Linux的支持相当完美。
特点
    开源免费,源码开放,有很多开发者参与设计和改进。 性能稳定,简单高速,可作代理服务器使用。 支持通过模块扩展功能,支持PHP、Perl、Python等多种脚本语言。 支持SSL/TLS加密和虚拟主机等功能。 社区支持强大。
1.2 IIS服务器

IIS是微软开发的Web服务器软件,主要用于在Windows操作系统上托管网站。
特点
    提供图形界面的管理工具,称为Internet服务管理器,可用于监视配置和控制Internet服务。 与其他微软产品(如ASP.NET)集成良好。 支持SSL/TLS加密和虚拟主机等功能。
1.3 Tomcat服务器

Tomcat是一个用于Java应用程序的开源Web服务器,通常与Apache一起使用,是一个开放源代码、运行Servlet和JSP Web应用软件的基于Java的Web应用软件容器。
特点
    技术先进,性能稳定,而且免费,深受Java爱好者欢迎。 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用。 是开发和调试JSP程序的首选
1.4 Lighttpd服务器

Lighttpd是一个开源的Web服务器软件,由德国人领导开发。其根本目的是提供一个专门针对高性能网站、安全、快速、兼容性好并且灵活的Web Server环境。
特点
    具有非常低的内存开销和CPU占用率,效能好。 支持FastCGI、CGI、Auth、输出压缩、URL重写、Alias等重要功能。 模块丰富,可以灵活配置和扩展。 源代码开放,有活跃的开发者社区。
1.5 Kangle服务器

Kangle是一款跨平台、功能强大、安全稳定、易操作的高性能Web服务器和反向代理服务器软件。它支持多种动态开发语言,如ASP、NET、Java等。
特点
    跨平台支持,可以在Linux、Windows、FreeBSD、OpenBSD等多种操作系统上运行。 实现虚拟主机独立进程、独立身份运行,用户之间安全隔离。 支持多种扩展接口,如ISAPI、FastCGI、CGI等,方便与其他Web服务器或应用程序集成。 具有强大的访问控制功能和智能防CC攻击能力。 内置内存/磁盘两级缓存,提高资源利用率和访问速度
1.6 IBM WebSphere服务器

IBM WebSphere是IBM公司开发的一套基于Java的应用服务器软件。它提供了一个可靠、安全、可扩展的平台,用于构建和运行企业级应用程序。
特点
    支持多种编程语言,如Java、Java EE、Node.js等,方便开发人员使用自己熟悉的语言进行开发。 提供集群和负载均衡等功能,可以轻松扩展应用程序的容量和性能。 强大的安全功能,包括身份验证、授权、数据加密等,保护企业应用程序的安全性和机密性。 支持分布式事务处理,确保在分布式环境下的数据一致性和可靠性。 丰富的管理和监控工具,可以对应用程序进行实时监控、故障排查和性能优化。
2. Nginx与Apache的区别

静态文件处理能力:Nginx高于Apache
资源消耗:Nginx优于Apache,以为Nginx是异步非阻塞处理模型,只需要几个进程就能够处理大量在线请求,而Apache仍然是进程模型或线程模型,也就是采用大量线程来处理大量在线请求。
    Nginx支持IO多路复用实现进程高并发,高效处理客户端请求 Apache支持的模块很多而且也比较稳定。而Nginx因为出现时间比较晚,比不上Apache Nginx自身就是一个反向代理服务器,支持七层负载均衡 Nginx处理动态页面比不上Apache,一般只用于处理静态页面和反向代理
3. Nginx介绍

Nginx是一个轻量级的web服务器,相比apache来说资源消耗更低。支持高并发的web服务和反向代理服务,支持基于IMAP/POP3/SMTP协议的邮件服务。同时也支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等模块功能。并且支持很多第三方的模块扩展。
Nginx主进程/工作进程
    一个主进程master:负载加载和分析配置文件、管理工作进程、平滑升级 多个工作进程worker:处理并响应用户请求
Nginx模块结构
    核心模块:HTTP模块、EVENT模块、MAIL模块 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块 第三方模块:HTTP Upstream Request Hash模块、Notice模块、HTTP Access Key模块
在线生成Nginx配置文件的网站
  1. https://nginx.p2hp.com/config/?global.app.lang=zhCN
复制代码
Nginx的主要作用
    提供静态页面展示和网页服务 通过虚拟主机技术,提供多个网站、多个域名的网页服务 提供反向代理服务 提供简单资源下载服务(FTP服务) 用户行为分析(日志功能)
4. master主进程原理

master是Nginx的主进程,负责管理Nginx的数据和常见worker工作进程。
    在Nginx启动时,检查 nginx.conf 配置文件的语法 根据配置文件创建和监控 worker 进程的数量和状态 监听套接字,接收client 发起的请求,然后由 worker 抢夺链接,成功抢夺的worker处理和响应客户端请求 接收管理员发送的Nginx信号(如关闭nginx),然后将信号传递给worker进程 当管理员发送reload,重新读取配置文件,创建新的worker进程,结束旧worker进程
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-1.png


5. 安装Nginx

5.1 YUM源安装Nginx

[Step1]: 连接互联网,编辑本地仓库文件
  1. vim /etc/yum.repos.d/nginx.repo
  2. # 在文件中输入以下内容[Nginx]name=nginx download
  3. baseurl=http://nginx.org/packages/centos/8/x86_64/
  4. enabled=1gpgcheck=0
复制代码
[Step2]: 使用yum安装nginx
  1. yum -yinstall nginx
复制代码
[Step3]: 查看nginx的安装文件
  1. rpm-ql nginx
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-2.png


5.2 源码编译安装Nginx

[Step1]: 连接互联网,下载源码包
  1. wget http://nginx.org/download/nginx-1.20.1.tar.gz
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-3.png


[Step2]: 安装nginx的依赖包
  1. yum install-y pcre-devel zlib-devel openssl-devel                # 默认应该只有openssl-devel没有预装
复制代码
[Step3]: 解压nginx源码包
  1. tar zxf nginx-1.20.1.tar.gz
  2. cd nginx-1.20.1/
复制代码
[Step4]: 执行configure,生成Makefile文件,将nginx安装到/opt/nginx目录下,该目录无需提前创建
  1. ./configure --prefix=/opt/ngin
复制代码
[Step5]: 编译安装
  1. make&&makeinstall
复制代码
[Step6]: 查看nginx的安装目录,可以看到该目录下存在一个sbin目录,里面存放着nginx管理命令
  1. tree /opt/nginx
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-4.png


[Step7]: 将nginx命令添加到环境变量中,在执行nginx命令时无需添加命令位置
  1. echo"PATH=$PATH:/opt/nginx/sbin">> /etc/profile
  2. source /etc/profile
  3. # 还可以通过export实现echo"export PATH=$PATH:/opt/nginx/sbin">> /etc/profile
  4. source /etc/profile
复制代码
5.3 管理Nginx服务

编译安装的Nginx
命令说明
nginx -t验证nginx.conf配置文件语法
nginx启动Nginx,如果当前存在一个运行的Nginx,会报错
nginx -s quit关闭Nginx服务
nginx -s stop停止Nginx服务
nginx -s reload重新加载Nginx服务配置文件内容
YUM源安装的Nginx
命令说明
systemctl start nginx.service启动Nginx服务
systemctl stop nginx.service停止Nginx服务
systemctl enable nginx.service将Nginx服务添加到开机自启
systemctl disable nginx.service将Nginx服务移除开机自启
systemctl reload nginx.service重新加载Nginx配置文件内容,不会重启Nginx服务
重复运行nginx服务时,会提示错误
  1. nginx
  2. nginx
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-5.png


当管理员发送reload信号时,master进程会重新读取nginx配置文件内容,然后创建新的worker进程,结束旧worker进程
  1. ps-ef|grep nginx
  2. nginx -s reload
  3. ps-ef|grep nginx
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-6.png


编译安装和YUM安装的Nginx在不启动的情况下,相互没有关联。但是如果使用nginx启动nginx服务,然后使用systemd停止nginx,会没有效果。【使用什么工具启动的Nginx,就使用什么工具去关闭】
  1. nginx                 # 启动nginx
  2. systemct status nginx.service
  3. ps-ef|grep nginx
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-7.png


通过添加-V选项可以看到Nginx服务的详细信息以及安装的所有模块
  1. nginx -V
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-8.png


YUM安装Nginx时会在/usr/sbin/中添加1个nginx命令,而编译安装会在安装目录下的/bin目录下有一个nginx命令。当两个命令混用时,有可能会出现nginx.pid找不到的情况。
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-9.png

  1. ps-ef|grep nginx |grep master                # 先查找到nginx的master进程对应的PIDecho12138> /opt/nginx/logs/nginx.pid        # 将该PID写入到nginx.pid文件中即可
  2. nginx -s reload
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-10.png


5.4 Nginx的主配置文件

编译安装的Nginx主配置文件路径
  1. 安装目录/conf/nginx.conf
复制代码
YUM源安装的Nginx主配置文件路径
  1. /etc/nginx/nginx.conf
复制代码
Nginx主配置文件结构
    **main block字段:**全局配置 **events字段:**事件驱动的相关配置 **http字段:**http/https协议相关的配置 **mail:**邮件协议的相关配置 **stream字段:**一般的TCP代理或负载均衡配置
正常运行必备的配置参数
    **user name:**启动Nginx工作进程的用户 **pid xxx/xxx/xxx:**指定存储Nginx主进程的进程号的文件路径 **include xxx:**包含进来的其他配置文件片段 **load_module xxx:**指定要装载的动态模块
配置参数的注意事项
    每条参数必须以分号结尾
  • 支持使用配置变量
      内建变量:由Nginx模块引入,可以直接使用 自定义变量:由用户set命令定义,例如:set name value; 引用变量:$name

性能优化相关配置参数
    work_processes 1:work进程数量默认为1,根据服务器的CPU数量设定,最大不应该超过CPU数量的2倍 **work_cpu_affinity auto:**worker与CPU进行绑定,做Nginx服务器可以使用此配置,由其它重要程序运行,不建议使用 **worker_priority number:**指定woker进程的nice值,设定worker进程的优先级(-20 ~ 20) **worker_rlimit_nofile number:**worker进程所能够打开的文件数量上限
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-11.png


5.5 http字段深入解析

全网最详细基于Kylin的Nginx服务部署与配置(1/2)-12.png


6. 基础Nginx服务搭建

节点设计
主机网络信息说明
Kylin-1192.168.110.1/24Web服务器
[Step1]: 事先已经基于源码安装好Nginx,启动Nginx服务
  1. nginx
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-13.png


[Step2]: 在安装Nginx的时候,默认会有一个测试页,访问该测试页
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-14.png


二、Nginx虚拟主机实验

1. 单个虚拟主机搭建

节点设计
主机网络信息说明
Kylin-1192.168.110.1/24Web服务器
Kylin-2192.168.110.2/24测试客户端
[Step1]: 新建网站素材目录和相关素材,分别创建索引文件、普通文件、未知文件和图片文件
  1. mkdir-p /virtual/01
  2. echo"Welcome to visit Virtual01!"> /virtual/01/index.html
  3. echo"欢迎访问Virtual01!"> /virtual/01/README.txt
  4. echo"None"> /virtual/01/none
  5. wget-O /virtual/01/pic.jpg https://inews.gtimg.com/om_bt/O0e2a37GGF5CDfNgK8GU29rF_2eJlHLDsa17LABXns7V4AA/641
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-15.png


[Step2]: 新建虚拟主机子配置文件
  1. vim /opt/nginx/conf/virtual01.conf
  2. # 写入下列内容
  3. server {
  4.    listen 80;# 定义监听端口
  5.    server_name www.meaauf.com;# 定义域名
  6.    charset utf-8;# 设置编码为 utf-8
  7.    location / {
  8.       root /virtual/01/;# 网站素材目录
  9.       index index.html;# 网站索引文件名}}
复制代码
[Step3]: 编辑Nginx主配置文件
  1. vim /opt/nginx/conf/nginx.conf
  2. # 在http字段内添加下列内容
  3. include       virtual01.conf;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-16.png


[Step4]: 重新加载Nginx服务,调整防火墙策略
  1. nginx -s reload
  2. firewall-cmd --add-service=http --permanent
  3. firewall-cmd --reload
复制代码
[Step5]: 编辑Kylin-2的hosts文件,添加域名解析
  1. vim /etc/hosts
  2. # 追加下列内容192.168.110.1 meaauf.com www.meaauf.com
复制代码
[Step6]: 访问Kylin-1的网页内容
  1. http://www.meaauf.com
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-17.png


[Step7]: 访问Kylin-1的图片资源
  1. http://www.meaauf.com/pic.jpg
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-18.png


[Step8]: 访问Kylin-1的文本资源,因为Kylin-2没有安装中文包所以会显示乱码,此处采用终端访问
  1. http://www.meaauf.com/README.txt
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-19.png


[Step9]: 访问Kylin-1的未知文件,此时会询问我们是否下载该文件
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-20.png


[Step10]: 查看Nginx可识别的文件文件,可以通过mime.types文件查看,也可以添加内容以支持用户自定义文件类型
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-21.png


2. 基于IP地址划分虚拟主机

节点设计
主机网络信息说明
Kylin-1192.168.110.1/24
192.168.110.11/24
Web服务器
Kylin-2192.168.110.2/24测试客户端
[Step1]: 为Nginx服务器临时添加一个IP地址,新建资源目录和索引文件
  1. ip address add192.168.110.11/24 dev ens33
  2. mkdir /virtual/02
  3. echo"您正在访问192.168.110.1"> /virtual/01/index.html
  4. echo"您正在访问192.168.110.11"> /virtual/02/index.html
复制代码
[Step2]: 删除上述实验创建的虚拟主机配置文件,新建虚拟主机配置文件 virtual01.conf
  1. rm-rf /opt/nginx/ virtual01.conf
  2. vim /opt/nginx/conf/virtual01.conf
  3. # 文件内容如下
  4. server {
  5.    listen 80;
  6.    server_name _;
  7.    charset utf-8;
  8.    location / {
  9.       root /virtual/01/;
  10.       index index.html;}}
复制代码
[Step3]: 新建虚拟主机配置文件 virtual02.conf
  1. vim /opt/nginx/conf/virtual02.conf
  2. # 文件内容如下
  3. server {
  4.    listen 192.168.110.11:80;
  5.    server_name _;
  6.    charset utf-8;
  7.    location / {
  8.       root /virtual/02/;
  9.       index index.html;}}
复制代码
[Step4]: 编辑主配置文件,在配置文件中引入虚拟主机配置文件
  1. vim /opt/nginx/conf/nginx.conf
  2. # 在http字段中添加下列内容
  3. include       virtual02.conf;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-22.png


[Step5]: 检查配置文件语法,重新加载nignx配置
  1. nginx -t
  2. nginx -s reload
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-23.png


[Step6]: Kylin-2使用不同的IP地址测试访问Nginx
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-24.png


3. 基于端口号划分虚拟主机

节点设计
主机网络信息说明
Kylin-1192.168.110.1/24Web服务器
Kylin-2192.168.110.2/24测试客户端
[Step1]: 新建虚拟主机配置文件 virtual8182.conf
  1. vim /opt/nginx/conf/virtual8182.conf
  2. # 文件内容如下
  3. server{
  4.    listen 81;
  5.    server_name _;
  6.    charset utf-8;
  7.    location / {
  8.      root /virtual/81/;
  9.      index index.html;}}
  10. server{
  11.    listen 82;
  12.    server_name _;
  13.    charset utf-8;
  14.    location / {
  15.      root /virtual/8/;
  16.      index index.html;}}
复制代码
[Step2]: 编辑Nginx主配置文件
  1. vim /opt/nginx/conf/nginx.conf
  2. # 往http字段中引入虚拟主机配置文件
  3. include       virtual8182.conf;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-25.png


[Step3]: 新建网站素材目录和索引文件
  1. mkdir /virtual/{81,82}echo"访问的是192.168.110.1:81!"> /virtual/81/index.html
  2. echo"访问的是192.168.110.1:82!"> /virtual/82/index.html
复制代码
[Step4]: 重新加载Nginx,调整防火墙策略
  1. nginx -s reload
  2. firewall-cmd --add-port=81/tcp --permanent
  3. firewall-cmd --add-port=82/tcp --permanent
  4. firewall-cmd --reload
复制代码
[Step5]: 客户端Kylin-2验证访问不同端口
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-26.png


4. 基于域名划分虚拟主机

节点设计
主机网络信息说明
Kylin-1192.168.110.1/24Web服务器
Kylin-2192.168.110.2/24测试客户端
[Step1]: 新建虚拟主机配置文件 virtualdomain.conf
  1. vim /opt/nginx/conf/virtualdomain.conf
  2. # 文件内容如下
  3. server{
  4.   listen 80;
  5.   server_name kylin1.meaauf.com;
  6.   charset utf-8;
  7.   location / {
  8.     root /virtual/kylin1/;
  9.     index index.html;}}
  10. server{
  11.   listen 80;
  12.   server_name kylin2.meaauf.com;
  13.   charset utf-8;
  14.   location / {
  15.     root /virtual/kylin2/;
  16.     index index.html;}}
复制代码
[Step2]: 编辑Nginx主配置文件
  1. vim /opt/nginx/conf/nginx.conf
  2. # 往http字段中引入虚拟主机配置文件
  3. include       virtualdomain.conf;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-27.png


[Step3]: 新建网站素材目录和索引文件
  1. mkdir /virtual/{kylin1,kylin2}]echo"您访问的是kylin1.meaauf.com!"> /virtual/kylin1/index.html
  2. echo"您访问的是kylin2.meaauf.com!"> /virtual/kylin2/index.html
复制代码
[Step4]: 重新加载Nginx
  1. nginx -s reload
复制代码
[Step5]: 编辑客户端Kylin-2的hosts文件,添加域名解析
  1. vim /etc/hosts
  2. # 追加文件内容192.168.110.1 meaauf.com www.meaauf.com kylin1.meaauf.com kylin2.meaauf.com
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-28.png


[Step5]: 客户端Kylin-2验证访问不同域名
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-29.png


三、Nginx日志管理

1. Nginx日志书写格式

查看编译安装的Nginx日志书写格式
  1. vim /opt/nginx/conf/nginx.conf
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-30.png


日志格式解析
  1. log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
  2. access_log  logs/access.log  main;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-31.png


日志参数解析
日志参数说明
$remote_addr记录访问网站的客户端IP地址
$remote_user当Nginx配置了基本认证,此处才会记录认证的用户名,否则为空
$time_local记录访问的时间和时区
$request请求的完整行,包含请求方法(POST/GET)、请求的URL和HTTP协议版本
$status响应的状态码
$body_bytes_sent发送给客户端的字节数
$http_referer引用页
$http_user_agent用户代理的字符串
$http_x_forwarded_fo通过HTTP代理或负载均衡器转发,会包含原始请求客户的IP地址
2. Nginx日志监控

节点设计
主机网络信息说明
Kylin-1192.168.110.1/24Web服务器
Kylin-2192.168.110.2/24测试客户端
[Step1]: 修改Nginx主配置文件,将日志信息相关配置语句取消注释。日志功能是默认开启的,与日志信息配置语句是否注释无关。
  1. vim /opt/nginx/conf/nginx.con
  2. # 将下列行取消注释
  3.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
  4.     access_log  logs/access.log  main;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-32.png


[Step2]: 重新启动nginx服务
  1. nginx -s reload
复制代码
[Step3]: 先清空nginx原有的日志信息,使用tail监控日志
  1. echo> /opt/nginx/logs/access.log
  2. tail-f /opt/nginx/logs/access.log
复制代码
[Step4]: 使用Kylin-2访问Nginx
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-33.png


[Step5]: 查看监控的日志信息,当日志参数值为空,会使用“-”占位。
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-34.png


[Step6]: 关闭日志功能
  1. vim /opt/nginx/conf/nginx.conf
  2. # 在http字段中添加下列语句
  3. access_log off;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-35.png


[Step7]: 检查Nginx配置文件语法,重新加载Nginx服务
  1. nginx -t
  2. nginx -s reload
复制代码
[Step8]: 清空日志内容,重新使用客户端访问Nginx。可以看到access.log日志文件为空。
在代理服务器、负载均衡服务器上可以不记录日志,减少磁盘I/O。
  1. > /opt/nginx/logs/access.log
  2. ll /opt/nginx/logs/access.log
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-36.png


3. 日志记录的许可范围

通过查看Nginx官网(Module ngx_http_log_module (nginx.org))提供的文档,可以看到
  1. access_log xxx;# 书写范围允许在 http, server, location, if in location, limit_except
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-37.png

  1. log_format name xxx;# 只允许书写在 http字段中
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-38.png


不同的书写位置,具有不同的生效含义
  1. http {
  2.         log_format name xxx;
  3.         access_log xxxx;# 全局生效
  4.        
  5.         server {
  6.                 access_log xxx;# 仅对当前虚拟主机生效}}
复制代码
4. 针对虚拟主机自定义日志

因为Nginx不允许 log_format 被放置在除http以外的块中,我们可以通过include的特性实现对虚拟主机的日志的自定义。
[Step1]: 先删除原有的所有虚拟主机配置文件与相关配置
  1. rm-rf /opt/nginx/conf/virtual*
  2. rm-rf /virtual/
复制代码
[Step2]: 新建网站素材目录和索引文件
  1. mkdir /{virtual01,virtual02}echo"virtual01"> /virtual01/index.html
  2. echo"virtual02"> /virtual02/index.html
复制代码
[Step3]: 新建虚拟主机,监听81端口
  1. vim /opt/nginx/conf/virtual01.conf
  2. # 写入下列内容,log_format和server是平级的,等同于在http里面。日志格式名main1不能重复,需要全局唯一
  3. log_format  main1  '$remote_addr - $remote_user [$time_local] "$request"';
  4. server {
  5.   listen 81;
  6.   server_name _;
  7.   access_log logs/virtual01.log main1;
  8.   location /{
  9.     root /virtual01/;
  10.     index index.html;}}
复制代码
[Step4]: 新建虚拟主机,监听82端口
  1. vim /opt/nginx/conf/virtual02.conf
  2. # 写入下列内容
  3. log_format  main2  '$remote_addr - $time_local';
  4. server {
  5.   listen 82;
  6.   server_name _;
  7.   access_log logs/virtual02.log main2;
  8.   location /{
  9.     root /virtual02/;
  10.     index index.html;}}
复制代码
[Step5]: 编辑Nginx主配置文件,在Server字段中引用虚拟主机配置文件,同时取消注释日志配置语句
  1. vim /opt/nginx/conf/nginx.conf
  2. # 在http字段中添加下列内容
  3. include       virtual01.conf;
  4. include       virtual02.conf;
  5. log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
  6.     access_log  logs/access.log  main;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-39.png


[Step6]: 检测nginx配置文件语法,重新加载nginx
  1. nginx -t
  2. nginx -s reload
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-40.png


[Step7]: 客户端Kylin-2分别访问Nginx的80、81和82端口
  1. curl http://192.168.110.1
  2. curl http://192.168.110.1:81
  3. curl http://192.168.110.1:82
复制代码
[Step8]: 分别查看日志文件,Nginx的日志匹配会先匹配虚拟主机中,其次才是全局配置中
  1. cat /opt/nginx/logs/virtual01.log
  2. cat /opt/nginx/logs/virtual02.log
  3. cat /opt/nginx/logs/access.log
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-41.png


5. 错误日志管理

通过访问Nginx官网可以看到关于error_log 的相关说明
  1. Syntax:                error_log file[level];
  2. Default:        error_log logs/error.log error;
  3. Context:        main, http, mail, stream, server, location
复制代码
error_log 日志分别存在7个等级,不同等级所记录的信息内容不一样,其中debug记录最详细,alert记录最简略
    debug:提供最详细的日志记录,包括处理的请求的每一步、模块加载、变量值 info:信息级别,记录一般的运行时信息 notice:通知级别,用于记录重要的正常操作信息 warn:警告级别,记录潜在的异常情况 error:错误级别,记录那些阻止正常请求处理的错误事件 crit:严重级别,记录非常严重的错误 alert:警报级别,用于表示需要立即采取行动的紧急情况
[Step1]: 编辑virtual01虚拟主机配置文件,添加错误日志记录,其中日志等级为 warn
  1. vim /opt/nginx/conf/virtual01.conf
  2. # 写入下列内容
  3. error_log logs/virtual01-err.log warn;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-42.png


[Step2]: 检测nginx配置文件语法,重新加载nginx
  1. nginx -t
  2. nginx -s reload
复制代码
[Step3]: 使用客户端访问错误页面
  1. curl http://192.168.110.1:81/kkk
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-43.png


[Step4]: 查看错误日志和访客日志的内容,两个日志都会记录内容,但是错误日志所记录的内容更加详细
  1. cat /opt/nginx/logs/virtual01.log
  2. cat /opt/nginx/logs/virtual01-err.log
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-44.png


6. 错误日志优化

常规的错误代码
    404:内容资源不存在 403:访问权限不足
[Step1]: 编辑virtual01虚拟主机配置文件,添加错误日志重定向
  1. error_page 404 error404.html;
  2. error_page 403 error403.html;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-45.png


[Step2]: 在/virtual01目录下新建404错误页面
  1. echo'<img src="404.jpg">'> /virtual01/error404.html
  2. echo'<img src="403.jpg">"'> /virtual01/error403.html
复制代码
[Step3]: 检测nginx配置文件语法,重新加载nginx
  1. nginx -t
  2. nginx -s reload
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-46.png


[Step4]: 客户端Kylin-2访问Nginx的错误页面,可以看到被重定向到error404页面
  1. http://192.168.110.1:81/kkkk
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-47.png


[Step5]: 将/virtual01目录下的index.html属组和其它人的权限设置为0,然后访问页面,可以看到被重定向到error403错误页面
  1. chmod600 /virtual01/index.html
  2. http://192.168.110.1:81
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-48.png


7. 手动切割日志

手动切割日志的核心思想
    将原先存在的 access.log 日志重命名 向 Nginx 发送 reopen 信号,重新生成日志
[Step1]: 利用for循环生成大量的日志信息
  1. fornin{1..1000};docurl http://192.168.110.1;done
复制代码
[Step2]: 将原先存在的日志备份,也就是重命名。如果设置了定时任务,计算机会在准点后进行备份,备份时间就会变成最新的一天,可以通过 -d yesterday指定日期为前一天。
  1. mv /opt/nginx/logs/access.log /opt/nginx/logs/access-$(date-d yesterday +%F).log
复制代码
[Step3]: 向nginx发送reopen信号,使其重新生成日志
  1. nginx -s reopen
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-49.png


8. logrotate日志切割工具

logrotate 是一个用于管理日志文件自动轮转、压缩、删除和邮寄的工具。logrotate主要配置文件在 /etc/logrotate.conf,可以通过在 /etc/logrotate.d/目录下单独的配置文件来管理特定的服务日志。
[Step1]: 编译安装的Nginx不会在/etc/logrotate.d/目录下创建文件,需要我们手动创建配置文件
  1. cp /etc/logrotate.d/samba /etc/logrotate.d/nginx
  2. # 写入下列内容
  3. /opt/nginx/logs/*.log {
  4.     daily                        # 日志轮转的频率是每天
  5.     missingok                # 如果日志文件不存在,忽略错误继续处理下一个文件
  6.     rotate 52# 最多保留52个存档
  7.     compress                # 切割后压缩文件
  8.     delaycompress        # 延迟压缩直到下一次切割,也就是本次切割不会压缩,下一次切割时才会压缩
  9.     notifempty                # 如果日志文件为空,不会进行切割
  10.     create 640 nginx adm        # 切割后创建一个新的空日志文件,权限设置为640,
  11.     sharedscripts                        # 标记脚本开始
  12.     postrotate                 # 日志切割要执行的命令
  13.             nginx -s reopen                # 向Nginx发送reopne信号
  14.     endscript                                # 标记sharedscripts脚本结束}
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-50.png


[Step2]: 先清除日志中内容,利用for循环产生大量日志信息
  1. > /opt/nginx/logs/access.log
  2. fornumin{1..10000};docurl http://192.168.110.1;done
复制代码
[Step3]: 手动执行 logrotate 命令切割日志,根据我们定义的选项【delaycompress】,日志的压缩会延迟到下一次的切割
  1. logrotate-f /etc/logrotate.d/nginx
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-51.png


[Step4]: 再次利用for循环产生大量日志信息,手动执行 logrotate 命令切割日志,可以看到第一次产生的日志已经被压缩
  1. fornumin{1..10000};docurl http://192.168.110.1;donelogrotate-f /etc/logrotate.d/nginx
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-52.png


[Step5]: 将日志切割任务写入cron定时任务中
  1. crontab-e# 写入下列内容
  2. 00 00 * * * logrotate-f /etc/logrotate.d/nginx
复制代码
四、Nginx高级功能

1. 实现类似FTP的目录索引下载命令

[Step1]: 新建一个目录,将本地光盘挂载到该目录下
  1. mkdir /mnt/cdrom
  2. mount /dev/cdrom /mnt/cdrom
复制代码
[Step2]: 新建虚拟主机配置文件
  1. vim /opt/nginx/conf/ftp.conf
  2. # 文件内容如下
  3. server{
  4.    listen 8080;
  5.    location /{
  6.       autoindex on;# 启用目录浏览功能
  7.       autoindex_localtime on;# 使目录列表中的文件时间以服务器本地时间显示
  8.       autoindex_exact_size off;# 显示文件的精确大小(字节)
  9.       root /mnt/cdrom;# 数据目录}}
复制代码
[Step3]: 编辑Nginx主配置文件
  1. vim /opt/nginx/conf/nginx.conf
  2. # 在http字段中引入虚拟主机配置文件
  3. include       ftp.conf;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-53.png


[Step4]: 检测nginx配置文件语法,重新加载nginx,调整防火墙策略
  1. nginx -t
  2. nginx -s reload
  3. firewall-cmd --add-port=8080/tcp --permanent
  4. firewall-cmd --reload
复制代码
[Step5]: 使用客户端浏览,同时该功能也可以为客户提供YUM仓库源
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-54.png


2. Nginx的链接数监控

如果监控Nginx链接数,需要查看当前的Nginx是否支持。
  1. nginx -V
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-55.png


链接数监控模块需要使用 http_stub_status_module 模块,而我们编译安装的Nginx不支持该模块。需要重新编译安装。
[Step1]: 先删除源有的nginx命令
  1. rm-rf /usr/sbin/nginx
复制代码
[Step2]: 重新解压nginx源码包
  1. tar-zxf nginx-1.18.0.tar.g
  2. cd nginx-1.18.0/
复制代码
[Step3]: 生成Makefile
  1. ./configure --prefix=/opt/nginx --with-http_stub_status_module        # 启用Nginx的HTTP stub status模块
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-56.png


[Step4]: 编译安装
  1. make&&makeinstall
复制代码
[Step5]: 将Nginx安装目录下的nginx命令拷贝到/usr/sbin目录下
  1. cp-a /opt/nginx/sbin/nginx /usr/sbin/
复制代码
[Step6]: 删除解压后的源码包,查看当前编译安装的Nginx支持模块,可以看到已经支持该模块
  1. rm-rf nginx-1.18.0
  2. nginx -V
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-57.png


[Step7]: 启动nginx
  1. nginx
复制代码
[Step8]: 新建虚拟主机配置文件
  1. vim /opt/nginx/conf/link.conf
  2. # 写入下列内容
  3. server {
  4.   listen 8080;
  5.   server_name _;
  6.   stub_status on;# 开启链接数监控
  7.   access_log off;# 关闭日志记录}
复制代码
[Step9]: 编辑Nginx主配置文件
  1. vim /opt/nginx/conf/nginx.conf
  2. # 在http字段中引入虚拟主机配置文件
  3. include       link.conf;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-58.png


[Step10]: 检测nginx配置文件语法,重新加载nginx
  1. nginx -t
  2. nginx -s reload
复制代码
[Step11]: 客户端访问,可以看到当前的链接数和http请求等参数
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-59.png


3. 基于IP地址的访问限制

Nginx分别提供了 allow和deny 字段来限制指定的IP地址访问。
  1. https://nginx.org/en/docs/http/ngx_http_access_module.html
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-60.png


allow和deny字段存在匹配顺序,根据书写顺序进行匹配。默认情况下,Nginx隐含allow语句,也就是默认允许所有网段主机访问。allow和deny字段是基于【$remote_addr】进行判断。
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-61.png


节点设计
主机网络信息说明
Kylin-1192.168.110.1/24
192.168.19.234
Web服务器
Kylin-2192.168.110.2/24
192.168.19.149
测试客户端
[Step1]: 新建虚拟主机配置文件
  1. vim /opt/nginx/conf/control.conf
  2. # 写入下列内容
  3. server{
  4.   listen 81;
  5.   server_name _;
  6.   location / {
  7.     allow 192.168.110.0/24;
  8.     root /www/control/;
  9.     index index.html;}}
复制代码
[Step2]: 新建网站素材目录和索引文件
  1. mkdir-p /www/control/
  2. echo"control test"> /www/control/index.html
复制代码
[Step3]: 编辑Nginx配置文件
  1. vim /opt/nginx/conf/nginx.conf
  2. # 在http字段中添加include
  3. include                control.conf;
复制代码
[Step4]: 重新加载nginx
  1. nginx -s reload
复制代码
[Step5]: 客户端Kylin-1测试访问Nginx,可以看到即使设置了只允许192.168.110.0/24网段访问,但是192.168.19.234未受影响。
  1. curl http://192.168.110.1:81
  2. curl http://192.168.19.234:81
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-62.png


[Step6]: 修改虚拟主机配置文件,添加deny语句
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-63.png


[Step7]: 重新加载nginx
  1. nginx -s reload
复制代码
[Step8]: 客户端Kylin-1重新测试访问,可以看到192.168.19.0/24已经被拒绝访问。
[Step9]: 可能会存在疑惑,Kylin-1和Kylin-2上都存在两个网段【192.168.110.0/24和192.168.19.9/24】,那么如何判断自己是使用哪个网段去访问对应的IP地址?
在这里插入图片描述
  1. # 也可以通过查看Nginx日志cat /opt/nginx/logs/access.log
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-64.png


4. 基于用户认证的访问限制

适用场景:内网环境中的的一些资料网站的保护。
[Step1]: 安装httpd-tools工具包
  1. yum install-y httpd-tools
复制代码
[Step2]: 创建密码文件
  1. mkdir /www/auth
  2. htpasswd -bc /www/auth/htpasswd kylin Kylin2024
复制代码
    **-b:**非交互式输入用户名和密码 **-c:**创建一个加密文件,此处的加密文件为 /www/auth/htpasswd **kylin Kylin2024:**分别为账号和密码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-65.png


[Step3]: 新建虚拟主机配置文件
  1. vim /opt/nginx/conf/auth.conf
  2. # 写入下列内容
  3. server {
  4.   listen 82;
  5.   server_name _;
  6.   location /{
  7.     root /www/auth/;
  8.     index index.html;
  9.     auth_basic "Please input your account password";# 弹出的提示信息
  10.     auth_basic_user_file /www/auth/htpasswd;# 指定密码验证文件}}
复制代码
[Step5]: 新建网站素材文件和索引文件
  1. echo"basic"> /www/auth/index.html
复制代码
[Step6]: 编辑Nginx主配置文件
  1. vim /opt/nginx/conf/nginx.conf
  2. # 在http字段中添加下列内容
  3. include       auth.conf;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-66.png


[Step7]: 验证Nginx配置文件语法,重新加载nginx,,调整防火墙策略
  1. nginx -t
  2. nginx -s reload
  3. firewall-cmd --add-port=82/tcp --permanent
  4. firewall-cmd --reload
复制代码
[Step8]: 客户端验证访问
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-67.png


全网最详细基于Kylin的Nginx服务部署与配置(1/2)-68.png


[Step9]: curl的方式访问
  1. curl-u kylin:Kylin2024 http://192.168.110.1:82
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-69.png


5. Nginx请求频率限制(限流)

ngx_http_limit_req_module用于限制每个定义键的请求处理率,特别是来自单个IP地址的请求的处理率。限制是使用“泄漏桶”方法实现的。
[Step1]: 新建虚拟主机配置文件
  1. vim /opt/nginx/conf/limit.conf
  2. # 文件内容如下
  3. limit_req_zone $binary_remote_addrzone=one:10m rate=1r/s;# limit_req_zone:定义一个限制请求的区域,告诉Nginx如何跟踪请求频率并应用限制# $binary_remote_addr:代表客户端IP地址的二进制形式,使用二进制可以减少内存占用# zone=one:10m:定义区域one,并为其分配10m内存# rate=1r/s:限制请求速率为每秒1个请求
  4. server {
  5.   listen 83;
  6.   server_name _;
  7.   access_log logs/limit.log;# 应用区域规则one,burst=3,允许超出限制后再解析3个请求,也就是请求速率超过1r/s也会额外处理3个请求
  8.   limit_req zone=one burst=3 nodelay;               
  9.   location /{
  10.     root /www/limit/;
  11.     index index.html;}}
复制代码
[Step2]: 编辑Nginx主配置文件
  1. vim /opt/nginx/conf/nginx.conf
  2. # 在http字段中添加下列内容
  3. include                limit.conf;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-70.png


[Step3]: 新建素材目录和索引文件
  1. mkdir /www/limit
  2. echo"limit limit"> /www/limit/index.html
复制代码
[Step4]: 验证配置文件语法,重新加载nginx,调整防火墙策略
  1. nginx -t
  2. nginx -s reload
  3. firewalld-cmd --add-port=83/tcp --permemnt
  4. firewalld-cmd --relaod
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-71.png


[Step5]: 监控日志,客户端正常访问Nginx
  1. tail-f /opt/nginx/logs/limit.log
  2. foriin{1..10};docurl http://192.168.110.1:83;sleep1;done
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-72.png


[Step6]: 清空日志,重新监控日志,客户端按照每秒2次的访问频率访问Nginx
  1. > /opt/nginx/logs/limit.log
  2. tail-f  /opt/nginx/logs/limit.log
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-73.png


6. Nginx编译安装第三方模块

默认情况下,在编译安装Nginx时,不会安装一些其他的模块,除了我们自行启用的模块
  1. nginx -V
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-74.png


[Step1]: 验证不存在该模块的情况下使用该模块:新建虚拟主机配置文件
  1. vim /opt/nginx/conf/eecho.conf
  2. # 写入下列内容
  3. server {
  4.   listen 81;
  5.   server_name _;
  6.   location /{echo"Using echo module.";echo$remote_addr;}}
复制代码
[Step2]: 验证不存在该模块的情况下使用该模块:编辑Nginx主配置文件
  1. vim /opt/nginx/conf/nginx.conf
  2. # 在http字段中添加下列内容
  3. include       eecho.conf;
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-75.png


[Step3]: 验证不存在该模块的情况下使用该模块:验证配置文件语法,此时会echo为未知指令
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-76.png


[Step4]: 安装git工具,然后从GitHub上下载echo模块的源码
  1. yum install-ygitgit clone https://github.com/openresty/echo-nginx-module.git
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-77.png


[Step5]: 下载完成后,当前目录下会存在一个echo-nginx-module的目录
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-78.png


[Step6]: 准备一个Nginx源码包,解压后进行编译安装
  1. tar zxf nginx-1.18.0.tar.gz
  2. cd nginx-1.18.0/
  3. # 添加echo的参数,别忘记启用原有的模块
  4. ./configure --prefix=/opt/nginx --add-module=/root/echo-nginx-module --with-http_stub_status_module
  5. make&&makeinstallcd# 切换会主目录rm-rf nginx-1.18.0                # 删除源码目录
复制代码
[Step6]: 重新查看nginx支持的模块
  1. /opt/nginx/sbin/nginx -V
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-79.png


[Step7]: 将nginx命令拷贝到sbin目录下或将nginx命令目录添加到环境变量中
  1. rm-rf /usr/sbin/nginx
  2. cp-a /opt/nginx/sbin/nginx /usr/sbin/
复制代码
[Step8]: 验证Nginx配置文件语法,重新加载Nginx配置文件
  1. nginx -t
  2. nginx -s reload
复制代码
[Step9]: 客户端访问Nginx
  1. curl http://192.168.110.1:81
复制代码
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-80.png


[Step10]: 使用浏览器访问,默认Nginx不会解析该内容,会以附加形式下载
全网最详细基于Kylin的Nginx服务部署与配置(1/2)-81.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表