Nginx服务配置及相关模块

news2025/1/18 3:46:43

目录

  • 一、Nginx简介
    • 1、Nginx简介
    • 2、I/O模型相关概念
    • 3、Nginx事件驱动模型
    • 4、Nginx和Apache的区别
  • 二、编译安装Nginx服务
    • 1.关闭防火墙,将安装的Nginx软件包安装到opt目录下
    • 2、编译安装Nginx
    • 3、创建用户、组,以便于更好的管理
    • 4、创建软连接并启动
    • 5、停止Nginx
    • 6、添加Nginx系统服务
    • 7、Nginx配置文件
      • Nginx主配置文件
      • nginx.conf详解
    • 8、打开浏览器测试
  • 四、访问状态统计配置
    • 写一个监控并发数的脚本
  • 五、基于授权的访问控制
  • 六、基于客户端的访问控制
  • 七、基于域名的Nginx虚拟主机
    • 为虚拟主机准备网页文档
    • 修改Nginx的配置文件
  • 八、基于IP地址的Nginx 虚拟主机
  • 九、基于端口的Nginx 虚拟主机
  • SSH 日志检查(secure)


一、Nginx简介

1、Nginx简介

Nginx(特点:占用内存少,并发能力强)

Nginx是一个高性能的 HTTP 和反向代理服务器。
Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件
单台物理服务器可支持30 000~50 000个并发请求。

Tengine

Tengine 是由淘宝网发起的 Web 服务器项目。它在 Nginx 的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine 的性能和稳定性已经在大型的网站如淘宝网、天猫商城等得到了很好的检验。(可以这样理解:淘宝网拿到了 Nginx 源代码之后,进行了功能的填充、优化等等,然后提交给
Nginx 官方,但是由于 Nginx 官方相应慢甚至不响应,加上语言沟通的不顺畅,于是淘宝公司就自己打包,在遵循 GPL 的原则上进行二次开发,于是就出了现在的 Tengine 这个版本)

注:NG并发连接能力受2个因素影响

1、CPU个数
2、本地物理服务器系统的最大文件数

Apache
Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适用于多处理器环境,因此,在一个apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。

2、I/O模型相关概念

  1. Nginx服务使用异步非阻塞模式:请求不需要排队,会反馈任务的完成结果。
  2. Apache服务使用同步阻塞模式:请求需要排队,且不会主动返回结果。
  3. 同步/异步:关注的是消息通信机制,即调用者在等待一件事情的处理结果时。被调用者是否提供完成。
  4. 同步:调用者需要主动询问结果。
  5. 异步:调用者不需要主动询问结果,被调用者会主动返回结果。
  6. 阻塞:系统同时只能处理1个请求,另外的请求需要排队。
  7. 非阻塞:系统同时处理多个请求。

3、Nginx事件驱动模型

1、select:一个应用程序,代理系统功能处理异步请求,最大连接数是1024个。

它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。

2、poll:select加强版取消了1024最大连接数。

poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态, 但是它没有最大连接数的限制,原因是它是基于链表来存储的。

3、epoll:poll的加强版。

epoll可以理解为event poll,不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。所以我们说epoll实际上是事件驱动(每个事件关联上fd)的,此时我们对这些流的操作都是有意义的。

4、Nginx和Apache的区别

1、Nginx是一个甚于事件的Web服务器; Apache是一个基于流程的服务器
2、Nginx所有请求都由一个线程处理; Apache单个线程处理单个请求
3、Nginx避免子进程的概念; Apache是基于子进程的
4、Nginx在内存消耗和连接方面更好; Apache在内存消耗和连接方面一般
5、Nginx的性能和可伸缩性不依赖于硬件; Apache依赖于CPU和内存等硬件
6、Nginx支持热部署; Apache不支持热部署
7、Nginx对于静态文件处理具有更高的效率;Apache相对一般
8、Nginx在反向代理场景具有明显优势; Apache相对一般

一般来说,需要性能的web服务,用nginx。若不需要性能只求稳定,就选用apache。

二、编译安装Nginx服务

1.关闭防火墙,将安装的Nginx软件包安装到opt目录下

systemctl stop firewalld 
systemctl disable firewalld #关闭防火墙
yum -y install pcre-devel zlib-devel gcc gcc-c++ make  #安装依赖包

在这里插入图片描述

2、编译安装Nginx

cd /opt/
 tar zxvf nginx-1.22.2.tar.gz 
 cd nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx \      #指定Nginx的安装路径
--user=nginx \                   #指定用户名
--group=nginx \                  #指定组名
--with-http_stub_status_module   #启动http_stub_status_module模块,支持状态统计
make -j2 && make install

3、创建用户、组,以便于更好的管理

(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)​Nginx服务程序默认以匿名运行

useradd -M -s /sbin/nologin nginx

在这里插入图片描述

4、创建软连接并启动

#创建软连接,让系统识别Nginx命令
 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
 
#检查文件是否正确
nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
 
#启动nginx
nginx
 
#查看是否启动nginx
netstat -antulp | grep nginx
 tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5964/nginx: master  

#如果遇到占用80端口的情况我们可以先查看pid号
cat /usr/local/nginx/logs/nginx.pid 
netstat -antulp | grep nginx

#在用kill -3命令暂停
kill -3   5964

5、停止Nginx

#首先查看nginx的PID号
cat /usr/local/nginx/logs/nginx.pid
netstat -antulp | grep nginx

#停止nginx
kill -3 5964
netstat -antulp|grep nginx
#这时候就查不到进程号了

6、添加Nginx系统服务

 vim /lib/systemd/system/nginx.service
 
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
 
#赋予权限并启动服务
chmod 754 /lib/systemd/system/nginx.service 
systemctl start nginx.service 

#再次查看80端口
 lsof -i:80
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   6032  root    6u  IPv4  35351      0t0  TCP *:http (LISTEN)
nginx   6033 nginx    6u  IPv4  35351      0t0  TCP *:http (LISTEN)

在这里插入图片描述

nginx -v  #查看nginx版本信息
nginx version: nginx/1.22.0

7、Nginx配置文件

Nginx主配置文件

全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

server块:配置虚拟主机的相关参数,一个http中可以有多个server。

location块:配置请求的路由,以及各种页面的处理情况。

vim /usr/local/nginx/conf/nginx.conf  #nginx.conf是主配置文件

nginx.conf详解

worker_processes  1;
#全局配置本机可运行多少个master进程,根据本机cpu数量设置数量,可设置为auto按cpu核数自动化调整
events {
#events事件处理模块
    worker_connections  1024;
#每个worker子进程可以处理多少个请求即可以打开多少个文件
}
http {
#http模块,web服务器与网页有关配置写在此模块中
    include       mime.types;
#mime.type中规定了那些文件是给用户查看的,若文件类型不在此文件中则是下载文件。
    default_type  application/octet-stream;
#默认支持文件类型
    sendfile        on;
#开启文件传输
    keepalive_timeout  65;
#长连接超时时间,单位为秒
    server {
#http模块中的server模块,主要配置监听端口,虚拟主机,dns域名等
        listen       80;
#监听所有ip的80端口
        server_name  localhost;
#主机名为本机,可虚拟域名
    location / {
#http模块下的location模块
            root   html;
#此location的根目录位置
            index  index.html index.htm;
#配置默认寻找文件,先寻找index.html若无此文件则找index.htm
        }
        error_page   500 502 503 504  /50x.html;
#500、502等错误界面跳转访问指定的/下的50x.html页面
        location = /50x.html {
#定义此location为精确匹配,必须是50x.html才能访问此页面
            root   html;
        }
}
}
    
[root@localhost conf]# mkdir -p /var/www/{abc,123}
[root@localhost conf]# cd /var/www/
[root@localhost www]# ls
123  abc
[root@localhost www]# echo 'this is 123 test web!' > 123/index.html
[root@localhost www]# echo 'this is abc test web!' > abc/index.html

在这里插入图片描述

vim /usr/local/nginx/conf/nginx.conf 
#增加location模块
        location /abc {
            root /var/www;
            index index.html;
        }

        location /123 {
            root   /var/www;
            index  index.html;
        }

在这里插入图片描述

systemctl reload nginx  #改完重新读取 nginx.conf 主配置

8、打开浏览器测试

在这里插入图片描述
在这里插入图片描述

四、访问状态统计配置

修改 nginx.conf 配置文件,指定访问位置并添加 stub_status配置

#先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的Nginx是否包含HTTP_STUB_STATUS模块
[root@localhost ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
cat /opt/nginx-1.22.0/auto/options | grep YES #可查看 nginx 已安装的所有模块

在这里插入图片描述

vim /usr/local/nginx/conf/nginx.conf
#添加STUB_STATUS模块
 location /state {              #访问位置为/status
            stub_status on;     #打开状态统计功能
            access_log off;     #关闭此位置的日志记录
        }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

写一个监控并发数的脚本

#!/bin/bash

while true
do
count=$(curl -Ls 192.168.154.10/state | grep 'Active connections' | awk '{print $3}')
if [ $count -ge 1 ];then
      echo '警告当前并发负载过高,并发数为:$count '
     fi
    sleep 2 #每两秒警告一次
done

五、基于授权的访问控制

[root@localhost ~]# yum install -y httpd-tools
#生成用户密码认证文件
[root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db zhangsan
New password:   #密码123456
Re-type new password:  #确认密码123456
Adding password for user zhangsan
[root@localhost ~]# cd /usr/local/nginx/
[root@localhost nginx]# cat passwd.db 
[root@localhost nginx]# htpasswd ./passwd.db lisi
[root@localhost nginx]# cat passwd.db 
[root@localhost nginx]# pwd

在这里插入图片描述

#降低权限
[root@localhost nginx]# chown nginx passwd.db 
[root@localhost nginx]# chmod 400 passwd.db 
vim /usr/local/nginx/conf/nginx.conf #更改配置文件
        location /abc {
            root /var/www;
            index index.html;
            auth_basic "Hello sir";
            auth_basic_user_file /usr/local/nginx/passwd.db;
        }

在这里插入图片描述

[root@localhost nginx]# nginx -t #检查语法格式
[root@localhost nginx]# systemctl restart nginx

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

六、基于客户端的访问控制

访问控制规则如下:
deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
allow IP/IP段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。

vim /usr/local/nginx/conf/nginx.conf
        location /state {
            stub_status on;
            access_log off;
            allow 127.0.0.1;       #允许本机访问
            allow 192.168.154.11;  #允许192.168.154.11的主机访问
            deny all;              #禁止其它主机访问
        }
systemctl restart nginx

在这里插入图片描述

使用IP地址为 192.168.154.11 的虚拟机测试成功

在这里插入图片描述

使用IP地址为 192.168.154.12 的虚拟机测试失败,403被加入黑名单

在这里插入图片描述

七、基于域名的Nginx虚拟主机

为虚拟主机准备网页文档

在这里插入图片描述

修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       80;
        server_name  www.accp.com;

        charset utf-8;

        access_log  logs/accp.com-access.log;

        location / {
            root   /var/www/abc;
            index  index.html index.htm;
        }

在这里插入图片描述

:35,55 co 80 #复制完修改后在末尾加个大括号

在这里插入图片描述
在这里插入图片描述

在Windows 系统测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在Linux 系统下测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、基于IP地址的Nginx 虚拟主机

在这里插入图片描述

vim /usr/local/nginx/conf/nginx.conf #修改配置文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

九、基于端口的Nginx 虚拟主机

vim /usr/local/nginx/conf/nginx.conf #修改配置文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

SSH 日志检查(secure)

 cd /var/log/
vim secure #ssh的连接信息

在这里插入图片描述
如果出现其他陌生的同一IP地址的主机多次尝试访问本机,说明可能在爆破本机。
解决问题:写一个脚本,如果陌生IP多次尝试访问本机未成功,则加入黑名单,禁止访问本机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/422876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FinClip 开发者工具重构升级!性能飞跃,体验有礼

一直以来不少开发者朋友在社区反馈,在使用 FIDE 工具的过程中,时常会遇到诸如加载不及时、代码预览/渲染性能不如意的情况,十分影响开发体验。 作为技术团队,我们深知一件趁手的开发工具对开发者的重要性,因此&#x…

企业AD域(域控服务器)的安装和配置详细教程

一、环境以及工具准备 软件:VMWare Workstation 2016 ( 下载链接:https://pan.baidu.com/s/1iX1VRilerYPGbGvX4pvaKw 提取码:75R6 ) 镜像:Windows Server 2016 ( 下载地址&#xff…

[CVPR 2020] Regularizing Class-Wise Predictions via Self-Knowledge Distillation

ContentsIntroductionClass-wise self-knowledge distillation (CS-KD)Class-wise regularizationEffects of class-wise regularizationExperimentsClassification accuracyReferencesIntroduction 为了缓解模型过拟合,作者提出 Class-wise self-knowledge distil…

SpringDataRedis客户端详解

SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,官网地址:https://spring.io/projects/spring-data-redis 提供了对不同Redis客户端的整合(Lettuce和Jedis&…

乡村振兴吹响品牌号角——首届中国乡村振兴品牌大会成功举办

“品牌是力量,是变量,也是流量。”这是浙江省衢州市人大常委会副主任、常山县委书记潘晓辉在首届中国乡村振兴品牌大会上分享的乡村振兴实践体会,引发与会代表的广泛共鸣。 首届中国乡村振兴品牌大会主会场 4月10日至11日,以“加…

计组2.2——数据在计算机中的存储

计组2.2定点数和浮点数定点数无符号数有符号数的定点表示——定点整数和定点小数移位运算1.算术移位1.原码算数移位2.反码算数移位3.补码算术移位4.计算机硬件的乘法是基于算数移位和加法完成的2.逻辑移位3.循环移位加减运算溢出判断硬件判断溢出法一:单一符号位法二…

51单片机语音提示盲人拐杖整点报时夜间警示超声波测距

实践制作DIY- GC0128-语音提示盲人拐杖 一、功能说明: 基于51单片机设计-语音提示盲人拐杖 二、功能介绍: 硬件组成: STC89C52单片机最小系统LCD1602显示器红色LED灯ADC0832光敏电阻采集光强DY-SV17F语音播报模块HSR04超声波测距多个按键…

如何在facebook上打造成功的个人品牌?马克·扎克伯格告诉你!

在现代商业社会中,一个企业成功的关键之一是打造出良好的企业形象,即所谓的“人设”。一个好的企业形象可以让消费者产生信任感和归属感,从而吸引更多的客户和业务机会。而如今,社交媒体成为了一个打造企业形象的重要工具&#xf…

JS操作文本域获取光标/指定位置插入

学习链接 js 如何获取与设置光标在input框的位置 在输入框/文本域中光标位置插入字符串 Web 中的“选区”和“光标” 可参考另外一篇&#xff1a;vue.js支持表情输入&#xff0c;这个比操作 div简单多了。 效果图 代码 <style scoped> textarea {outline: none;res…

微信小程序开发 | API应用案例(下)

API应用案例&#xff08;下&#xff09;6.1【案例5】模拟时钟6.1.1 案例分析6.1.2 前导知识6.1.3 钟表页面布局6.1.4 钟表页面绘制6.2【案例6】罗盘动画6.2.1 案例分析6.2.2 前导知识6.2.3 设计罗盘页面布局6.2.4 手指触摸旋转罗盘6.2.5 单击按钮操作罗盘6.3【案例7】文件上传与…

总结821

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 暴力英语&#xff1a;早上背颂并默写第19篇文章《I always knew I was going to be rich》&#xff0c;还有两三篇就达成…

Xamarin 可能的替代者.NET MAUI

Xamarin&#xff0c;虽然在 Android、iOS 和 Windows 上做得很好&#xff0c;但我们很快就会忘掉它。Xamarin的替代者已接近完成正式版并且有许多的改进&#xff1a; .NET MAUI。 就像很多人知道的那样&#xff0c;Xamarin 是微软专注于移动应用程序( iOS、Android和Windows)并…

JavaSE学习进阶day04_05 常见算法和泛型

9.1 排序概述 另外一种排序的方式&#xff0c;每一次比较完毕之后&#xff0c;本次循环中最大的数字就跑到右边去了 建议复习一下数据结构的排序章节 代码实现就不再说了&#xff0c;大家可以尝试写&#xff0c;但是我们今后一般都调用java里已经写好的排序算法。在C里也有已…

【AXU3EG】UltraScale+ MPSoC以及开发板介绍

Copyright © 2012-2020 芯驿电子科技&#xff08;上海&#xff09;有限公司 UltraScale MPSoC Zynq UltraScale MPSoC 系列是 Xilinx 第二代平台&#xff0c;其在 FPGA 内部集成了完整 ARM 处理子系统&#xff08;PS&#xff09;&#xff0c;包含了四核 Cortex-A53 加双核…

03-深度学习

一、适合图像处理的卷积神经网络 1. 为什么卷积神经网络适合图像处理? 如上图所示,如果使用全连接神经网络的话,输入图像大小为 1024x1024,第一层隐层神经元个数为 1000,第一层权重数量级为 109,过多的参数会导致过拟合。而卷积神经网络可以有效减少权重数量。 2. 卷积神…

HTML5 表单元素

文章目录HTML5 表单元素HTML5 新的表单元素HTML5 \<datalist> 元素HTML5 \<keygen> 元素HTML5 \<output> 元素HTML5 新表单元素HTML5 表单元素 HTML5 新的表单元素 HTML5 有以下新的表单元素: <datalist><keygen><output> 注意:不是所有…

【LLM】Windows本地CPU部署民间版中文羊驼模型踩坑记录

目录 前言 准备工作 Git Python3.9 Cmake 下载模型 合并模型 部署模型 前言 想必有小伙伴也想跟我一样体验下部署大语言模型, 但碍于经济实力, 不过民间上出现了大量的量化模型, 我们平民也能体验体验啦~, 该模型可以在笔记本电脑上部署, 确保你电脑至少有16G运行…

HTML学习(3)

文章目录HTML计算机代码HTML5语义元素HTML5 代码约定HTML字符集与符号HTML URLHTML 背景我的个人博客&#xff1a;欢迎来逛逛 HTML计算机代码 支持固定的字母尺寸和间距&#xff1a;<kbd> <samp> <code> <html><body><p>open a file,sel…

应用信息资源管理(张士玉、董焱)——第一章 总论

第一章 总论 1.1 信息社会 1.1.1 信息社会的形成 信息社会是指以信息技术为基础&#xff0c;信息产业为支撑&#xff0c;信息化为主要特征的社会形态。其形成经历了以下几个阶段&#xff1a; 信息化初期&#xff1a;20世纪60年代至70年代&#xff0c;电子计算机的出现和发展…

HummerRisk V1.0.0:架构全面升级,开启新篇章

HummerRisk V1.0.0发布&#xff1a; HummerRisk 由 SpringBoot 单体架构升级为 SpringCloud 微服务架构&#xff0c;性能和效率显著提升。同时新增 K8s 的检测规则组和规则实现&#xff0c;并优化多个模块的设计逻辑。 HummerRisk 保持高速的迭代&#xff0c;期待您的关注。 …