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 {
#        }
相关推荐
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 分钟前
docker打tar包命令
运维·docker·容器
gs801405 分钟前
华鲲振宇 AT3500 G3 深度解析 —— 面向大模型推理的国产异构算力服务器
运维·服务器
Dovis(誓平步青云)10 分钟前
《从内核视角看 Linux:环形缓冲区 + 线程池的生产消费模型实现》
linux·运维·服务器
Cincoze-Johnny15 分钟前
Linux系统-应用问题全面剖析Ⅳ:德承工控机MD-3000在Ubuntu操作系统下[TPM功能]设置教程
linux·运维·ubuntu
默|笙16 分钟前
【Linux】进程(1)
linux·运维·服务器
wanhengidc20 分钟前
云手机的不足之处有哪些?
运维·服务器·科技·智能手机·云计算
zengshitang52031 分钟前
ACRN 实战应用:在一台电脑上同时安装Windows10、Ubuntu22.04、Ubuntu PREEMPT_RT实时系统并流畅运行
linux·运维·ubuntu
UP_Continue36 分钟前
Linux权限
linux·运维·服务器
努力也学不会java42 分钟前
【docker】Docker Image(镜像)
java·运维·人工智能·机器学习·docker·容器
LSL666_1 小时前
云服务器安装MySQL
运维·服务器·mysql