nginx介绍与简单操作

介绍

简介

Nginx 是一款轻量级 HTTP 服务器,也是一款邮箱代理服务器,同时具备反向代理、通用 TCP/UDP 代理的功能,并且可以运行在 x86、ARM 等多种平台上,同时支持 Linux、Windows 等主流的操作系统

特点

1.支持高并发

单机 Nginx 可支持十万级的并发连接,经过优化后可最高支持百万级并发连接内存

2.资源消耗低

在同级 web 服务器中,Nginx 占用的内存最少,一万非活跃的 http keep-alive 连接仅消耗 2.5M

3.内存高扩展性

和 Apache 一样,Nginx 采用模块化设计,并支持非常丰富的第三方模块

高可靠性

Nginx 采用 master-worker 模式,如果 worker 出现故障,master 可以快速开启一个新的 worker 来提供服务

nginx架构

主进程:master

  1. 检查 Nginx 配置是否正确
  2. 创建、监控 worker 进程的数量和状态
  3. 接收对 Nginx 的管理指令,并作出对应操作

工作进程:worker

  1. 处理客户端请求
  2. 接收 master 发来的指令,并做对应操作

(默认情况下,nginx会建立和服务器CPU核心数相等的worker进程,woker进程之间相互独立,若一个进程故障不会影响其它进程 )

nginx关键工作机制

抢占机制

当客户端发起请求时,会激活accept_mutex互斥锁,哪个worker抢占了该互斥锁,该客户端的请求就由那个worker响应和处理

异步非阻塞模式

在传统事件处理模式下,如果所有的worker被客户端阻塞后,新来的客户就需要等待,直到原来的客户端释放worker后才能被处理请求,在异步非阻塞模式下,底层使用了linux的epoll模型,就算worker被阻塞,新的客户端请求也会被正常处理

nginx正向代理功能

定义

正向代理是位于客户端与目标服务器之间的代理服务器,客户端通过代理服务器间接访问目标服务器,目标服务器仅知晓代理服务器,不知真实客户端

作用场景
  1. 突破网络访问限制,如访问受区域限制的资源
  2. 隐藏客户端真实 IP,提升隐私性
  3. 实现请求的集中管理与过滤,如缓存资源、过滤请求内容
配置思路

在 Nginx 配置文件中,通过resolver指定 DNS 解析器(如resolver 8.8.8.8;),再通过location块配置请求转发规则,将客户端请求代理到目标服务器

示例

客户端需访问被区域限制的国外网站,配置 Nginx 正向代理后,客户端向 Nginx 发送请求,Nginx 转发请求至目标网站,再将响应返回给客户端,目标网站仅记录 Nginx 的 IP,从而实现访问与隐私保护

nginx反向代理功能

定义

反向代理是位于客户端与后端服务器之间的代理服务器,客户端直接访问代理服务器,代理服务器将请求转发至后端服务器并返回结果,客户端无需知晓后端服务器信息

核心功能
  1. **负载均衡:**分发请求至多台后端服务器,避免单点过载
  2. **隐藏后端架构:**客户端仅与代理服务器交互,提升系统安全性
  3. **SSL 终端:**统一处理 HTTPS 加密解密,减轻后端服务器负担
  4. **缓存静态资源:**将频繁访问的静态内容缓存至代理服务器,加速响应
适用场景

网站流量负载均衡、微服务架构入口、跨域请求处理、CDN 节点缓存等

nginx负载均衡功能

定义

负载均衡是 Nginx 反向代理的核心功能,通过将客户端请求分发至多台后端服务器,实现流量分摊,避免单点过载,提升系统可用性与并发处理能力。

常见策略
  1. **轮询(默认):**按请求顺序依次分配至后端服务器,适用于服务器性能相近场景。
  2. **加权轮询:**为服务器设置权重(weight),权重越高分配请求越多,适用于服务器性能差异场景。
  3. **IP 哈希:**根据客户端 IP 地址计算哈希值分配服务器,确保同一客户端始终访问同一服务器,适用于会话保持场景。
  4. **最少连接:**将请求分配至当前活跃连接数最少的服务器,动态优化资源利用率。
配置示例

在 Nginx 配置文件中,通过 upstream 模块定义后端服务器组(如 upstream backend {server 192.168.1.100 weight=5; server 192.168.1.101;}),再通过 proxy_pass 指令将请求转发至该服务器组。

配置操作与实验

部署Nginx

bash 复制代码
​
[root@server ~]# setenforce  0           

[root@server ~]# systemctl stop  firewalld

[root@server ~]# systemctl disable  firewalld

[root@server ~]# yum  install  nginx  -y

[root@server ~]# nginx  -V                            # 查看版本,编译器、配置参数等信息

[root@server ~]# systemctl start  nginx               # 启动httpd

[root@server ~]# systemctl enable  nginx              # 设置开机启动
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.

[root@server ~]# systemctl status  nginx              # 查看状态,q键退出查看

[root@server ~]# ps  -ef  |  grep  nginx              # 查看进程
root        1690       1  0 13:57 ?        00:00:00 nginx: master process /usr/sbin/nginx
nginx       1691    1690  0 13:57 ?        00:00:00 nginx: worker process
nginx       1692    1690  0 13:57 ?        00:00:00 nginx: worker process
root        1726    1510  0 14:00 pts/0    00:00:00 grep --color=auto nginx

# 测试,Windows中打开浏览器输入服务器IP地址

​

常用命令

systemctl系列

bash 复制代码
systemctl  start  nginx        # 启动服务

systemcctl restart  nginx      # 重启服务

systemctl  enable  nginx       # 开机启动
    
systemctl  stop  nginx         # 停止服务

systemctl  disable  nginx      # 取消开机启动

systemctl  status   nginx      # 查看状态

nginx自带命令

bash 复制代码
nginx                # 启动nginx

nginx   restart      # 重启服务

nginx  -s  reload    # 重新加载配置文件

nginx  -s  stop      # 强行停止服务

nginx  -s  quit      # 优雅停止服务,即所有请求处理完后退出服务

nginx  -v            # 查看版本号

nginx -t             # 检查配置文件的语法错误,无错返回ok

nginx配置文件

bash 复制代码
[root@server ~]# cd  /etc/nginx             # 服务目录
[root@server nginx]# yum  install  tree  -y
[root@server nginx]# tree
.
├── conf.d                                  # 子配置文件目录
├── default.d           
├── fastcgi.conf
├── fastcgi.conf.default
├── fastcgi_params
├── fastcgi_params.default
├── koi-utf                                 # KOI8-R 编码(俄语)转换的映射文件
├── koi-win                                 # KOI8-R 编码(俄语)转换的映射文件
├── mime.types                              # 配置支持的媒体类型
├── mime.types.default                      # 样例文件
├── nginx.conf                              # 主配置文件
├── nginx.conf.default                      # 样例文件
├── scgi_params            
├── scgi_params.default
├── uwsgi_params
├── uwsgi_params.default
└── win-utf                                 #  KOI8-R 编码(俄语)转换的映射文件

2 directories, 15 files

网页默认目录:/usr/share/nginx/html
访问日志:/var/log/nginx/access.log
错误日志:/var/log/nginx/error.log

主配置文件

bash 复制代码
[root@server ~]# vim  /etc/nginx/nginx.conf

结构

全局配置

  • 运行用户
  • Worker 数量
  • 日志参数
  • Include 导入的外部配置文件

性能配置

  • 工作模式
  • TCP 连接数
  • HTTP 模块配置
  • HTTP 请求和响应的参数

路由配置

  • 虚拟主机配置
  • 反向代理配置
  • 负载均衡配置

层级结构图

nginx.conf 配置文件的语法规则

  • 配置文件由指令与指令块构成
  • 每条指令以 ";" 分号结尾,指令与参数间以空格符号分隔
  • 指令块以 {} 大括号将多条指令组织在一起
  • include 语句允许组合多个配置文件以提升可维护性
  • 通过 # 符号添加注释,提高可读性
  • 通过 $ 符号使用变量
  • 部分指令的参数支持正则表达式,例如常用的 location 指令

使用cpolar实现内网穿透

cpolar 是一款无需公网 IP、无需路由器端口映射的内网穿透工具,能快速将内网服务(网站、接口、设备等)暴露到公网,实现远程访问。

核心原理

  • 本地安装 cpolar 客户端,与 cpolar 云端服务器建立加密连接。
  • 云端分配公网访问地址(临时 / 固定域名),所有公网请求通过该地址转发到内网对应服务。
  • 无需修改路由器配置,支持 HTTP/HTTPS/TCP/UDP 等多种协议。

核心优势

  • 操作简单:全程图形化界面或少量命令,新手可快速上手。
  • 跨平台支持:Windows、Mac、Linux、树莓派等系统均兼容。
  • 灵活适配:支持临时测试(免费版)和长期使用(付费固定域名)。
  • 安全可靠:传输数据加密,自带身份验证机制。

基础使用步骤

  • 下载安装:从 cpolar 官网获取对应系统客户端,完成安装并注册账号。
  • 启动服务:打开 cpolar 客户端,登录后选择要穿透的协议(如 HTTP),填写内网服务的 IP 和端口(如本地网站的 127.0.0.1:8080)。
  • 获取公网地址:启动穿透后,cpolar 会生成公网访问域名,复制该域名即可在外部设备访问内网服务。
  • 进阶配置(可选):付费用户可申请固定域名、配置自定义域名,或调整连接稳定性参数。

常见使用场景

  • 本地开发测试:将本地 Web 项目、接口暴露给外部同事或客户预览。
  • 远程访问设备:远程控制内网电脑、访问 NAS 文件、管理内网路由器。
  • 内网服务共享:分享内网搭建的网站、数据库、游戏服务器等。

使用nginx的http_ssl模块建立加密认证网站

查看

bash 复制代码
[root@server ~]# nginx  -V
# 看是否有--with-http_ssl_module模块,否则需要安装mod_ssl

配置文件

  • 证书文件:/....../xxxx.crt
  • 私钥文件:/....../xxxx.key

ssl配置文件的主要参数

bash 复制代码
[root@server ~]# vim  /etc/nginx/nginx.conf      # 主配置文https段,默认为注释,可以取消注释
# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2;                                   # 监听443端口
#        listen       [::]:443 ssl http2;   
#        server_name  _;                                               # 域名
#        root         /usr/share/nginx/html;                           # 网页默认
#
#        ssl_certificate "/etc/pki/nginx/server.crt";                  # 证书路径
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";      # 私钥文件路径
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers PROFILE=SYSTEM;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
相关推荐
小小测试开发1 小时前
JMeter 自动化实战:自动生成文件并传参接口的完整方案
运维·jmeter·自动化
门思科技2 小时前
LoRaWAN通信协议详解:架构、加密机制与核心应用
运维·服务器·网络·嵌入式硬件·物联网
乐维_lwops2 小时前
2025年运维监控建设重点是什么?
运维·监控系统·it监控
二进制coder2 小时前
Linux RTC 驱动子系统详细实现方案
linux·运维·实时音视频
淮北4943 小时前
linux系统学习(10.shell基础)
linux·运维·服务器·学习
视觉震撼3 小时前
RDP登录事件详细溯源分析脚本(兼容Windows PowerShell版本)
运维·网络·windows·网络安全·网络攻击模型·安全威胁分析·安全架构
noravinsc3 小时前
两台 centos 7.9 部署 pbs version 18.1.4 集群
linux·运维·centos
你的微笑,乱了夏天3 小时前
linux centos常用命令整理
linux·运维·centos
网硕互联的小客服4 小时前
Windows2008 如何禁用FSO?
运维·服务器·网络·windows·安全