当前位置: 首页 > news >正文

Nginx简介

一、 什么是Nginx

Nginx(发音同engine x)是一款轻量级的Web服务器、反向代理服务器和负载均衡器,由俄罗斯程序员Igor Sysoev开发。Nginx的设计目标是高性能、高并发、高可靠、低资源消耗,可以作为Web服务器、反向代理服务器和负载均衡器使用。
Nginx作为Web服务器,主要提供以下基本功能:

  • 静态文件处理
    Nginx可以将静态文件(例如HTML、CSS、JavaScript等)直接返回给客户端,而不需要调用后端应用服务器处理。这样可以减轻后端服务器的负担,提高系统的吞吐量。

  • CGI脚本支持
    Nginx也支持CGI脚本的执行,当请求需要调用CGI脚本时,Nginx会将请求传递给后端的CGI进程,在CGI脚本的帮助下生成响应结果。

  • 反向代理
    Nginx可以作为反向代理服务器,将客户端的请求转发到后端应用服务器进行处理,并将处理结果返回给客户端。这样可以隐藏后端应用服务器的真实IP地址,提高系统安全性。

  • 负载均衡
    Nginx可以作为负载均衡器,将客户端的请求分摊到多台后端应用服务器上,提高系统的吞吐量和可靠性。

  • SSL/TLS支持
    Nginx支持SSL/TLS协议,可以对客户端和服务器之间的通信进行加密和解密操作,提高系统的安全性。

二、Nginx常用命令

# 启动 Nginx
systemctl start nginx  # 系统服务方式
nginx                       # 直接运行方式# 停止 Nginx
systemctl stop nginx   # 系统服务方式
nginx -s stop               # 快速停止
nginx -s quit               # 优雅停止(处理完当前请求)# 重启 Nginx(配置文件修改后需执行)
systemctl restart nginx
nginx -s reload             # 平滑重启(不中断服务)# 查看状态
systemctl status nginx# 验证配置文件是否正确
nginx -t

三、Nginx配置

/etc/nginx.conf 或者 /etc/nginx/nginx.conf

# 全局块(之前已配置,此处省略)
user  username;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}# HTTP 块:处理 HTTP 请求(区别于你之前的 stream 块)
http {include       /etc/nginx/mime.types;  # 识别文件类型(如 .html、.jpg)default_type  application/octet-stream;# 日志格式(记录请求详情)log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;  # 高效传输文件keepalive_timeout  65;  # 长连接超时时间# 反向代理核心:配置后端服务组(负载均衡用)upstream backend_servers {server 10.1.11.17:8080;  # 后端服务1(Tomcat)server 10.1.11.18:8080;  # 后端服务2(Tomcat)server 10.1.11.19:8080 weight=2;  # 权重2(接收请求的概率是其他服务的2倍)}# 虚拟主机:监听 80 端口,处理客户端请求server {listen       80;  # Nginx 暴露给客户端的端口server_name  www.yourdomain.com;  # 客户端访问的域名(如你的网站域名)# 所有请求(/ 表示匹配所有路径)都转发给 backend_servers 组location / {proxy_pass http://backend_servers;  # 反向代理核心指令:转发到后端服务组proxy_set_header Host $host;  # 传递客户端请求的 Host 头给后端proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实 IP 给后端proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链 IP}# 静态资源缓存:匹配 .jpg、.png 等图片,直接由 Nginx 处理location ~* \.(jpg|png|css|js)$ {root /opt/nginx/static;  # 静态资源在 Nginx 本地的路径expires 7d;  # 缓存 7 天}}
}
#steam块: 处理四层(TCP/UDP)流量
stream {log_format main '[$time_local] $remote_addr $remote_port '  # 时间、客户端IP、客户端端口
'$proxy_protocol_port '  # 代理协议端口(若启用proxy_protocol则有值,当前未启用则为空)
'$protocol $status $bytes_sent $bytes_received '  # 协议(TCP)、连接状态、发送/接收字节数
'$session_time "$upstream_addr" '  # 连接持续时间、后端服务地址(如10.1.11.227:60000)
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';  # 后端发送/接收字节数、连接后端耗时access_log /home/logs/nginx_access.log main;  # 访问日志:路径+使用上面定义的main格式# 第一组:Service1(单个后端节点)upstream Service1 {server 10.1.11.17:60000;  # 后端服务地址:IP+端口(仅1个节点,无负载均衡,单点风险)}# 第二组:Service2(三个后端节点,默认轮询负载均衡)upstream Service2 {server 10.1.11.18:60000;  # 节点1server 10.1.11.18:60001;  # 节点2server 10.1.11.18:60002;  # 节点3}# 第一个server:监听80端口,转发到ATPServiceserver {listen    8000;  # 监听服务器的8000端口(TCP协议,默认端口,客户端可直接通过IP:80连接)proxy_pass Service1;  # 将8000端口的TCP流量转发到Service1}# 第二个server:监听60000端口,转发到Service2,带连接保持配置server {listen 60000 so_keepalive=60m::10;  # 监听60000端口,启用TCP连接保持# so_keepalive参数含义:60m(连接空闲60分钟后发送探测包)::10(探测10次失败则断开连接)proxy_connect_timeout 1;  # 连接后端服务的超时时间(1秒,超时则认为后端不可用)proxy_pass Service2;  # 将60000端口的TCP流量转发到Service2(三个节点轮询)}
}

通用配置:

  • user:指定Nginx运行的用户和用户组。
  • worker_processes:指定工作进程数量,通常设置为CPU核心数的1-2倍。
  • error_log:指定错误日志文件路径。
  • pid:指定PID文件路径。
  • events.worker_connections:指定最大连接数。

http块配置:

  • http.include:加载mime.types文件。该文件中包含了多种MIME类型及其对应的文件扩展名。
  • http.default_type:默认MIME类型。当客户端没有提供Accept头部或者请求的文件类型在mime.types文件中未找到时,将使用该类型作为默认类型。
  • http.log_format:指定日志格式,常用选项有remoteaddr(客户端IP地址)、remote_addr(客户端IP地址)、remoteaddr(客户端IP地址)、time_local(本地时间)、request(请求信息)、request(请求信息)、request(请求信息)、status(响应状态码)等。
  • http.access_log:指定访问日志文件路径和格式。
  • http.sendfile:启用sendfile功能,加快文件传输速度。
  • http.tcp_nopush:启用TCP_NOPUSH选项,减少网络传输次数。
  • http.keepalive_timeout:keep-alive超时时间,用于控制客户端与服务器之间的连接保持时间。
  • server.listen:监听端口。
  • server.server_name:指定虚拟主机名称。
  • location:根据请求URI匹配指定的操作,常用选项有root(指定网站根目录)、index(默认首页文件名)等。 /:匹配所有客户端请求,通过 proxy_pass 转发到 backend_servers;
  • error_page:指定错误页面,常用选项有404(文件未找到)、500(服务器内部错误)等。
  • location.internal:禁止外部直接访问此页面。
  • upstream backend_servers:定义后端服务组,包含 3 台 Tomcat 服务器,第 3 台权重为 2(负载均衡规则);
  • proxy_set_header:传递客户端的关键信息(如真实 IP、域名)给后端,避免后端获取不到客户端真实身份;
  • location ~* .(jpg|png|css|js)$:匹配静态资源请求,Nginx 直接从本地 /opt/nginx/static 目录返回,不转发给后端。

stream块配置: 见配置中的注释

【1】https://cloud.tencent.com/developer/article/2293727
【2】https://blog.csdn.net/weixin_63043528/article/details/149525900

http://www.dtcms.com/a/365691.html

相关文章:

  • 自学嵌入式第三十四天:网络编程-TCP
  • dumpsys alarm 简介
  • Java+AI开发实战与知识点归纳系列:Spring流式输出实战——LangChain4j与Ollama集成
  • Spring Authorization Server 1.5.2 使用YML配置的方式,最常用法总结
  • VAR的教师强制teacher forcing
  • Canaan 阿瓦隆 A1246I 81T矿机评测:性能、功耗与能效全面分析
  • 解锁产品说明书的“视觉密码”:多模态 RAG 与 GPT-4 的深度融合 (AI应用与技术系列)
  • 【收藏必备】大模型面试宝典:Transformer到实战应用全解析,助你斩获30W年薪offer!
  • Debezium日常分享系列之:Debezium 3.3.0.Alpha2发布
  • MySQL 行转列 (Pivot) 的 N 种实现方式:静态、动态与 GROUP_CONCAT 详解
  • C++入门小馆:C++11第一弹
  • 面试复习题-Flutter
  • https 协议与 wss 协议有什么不同
  • 详细教程:如何利用nslookup命令查询DNS解析状态?
  • 深度学习------模型的保存和使用
  • CSS 伪类与伪元素:深度解析
  • 大疆图传技术参数对比 你了解多少?
  • 2025高教社杯数模国赛【思路预约】
  • Mysql的锁退化
  • 虚拟机+ubuntu+docker+python部署,以及中途遇到的问题和解决方案
  • 计算机科学领域-CS基础
  • 信创MySQL到达梦数据库的SQL语法转换技术解析
  • 使用Java定时爬取CSDN博客并自动邮件推送
  • CPU和GPU的区别与作用域
  • prometheus+grafana搭建
  • 虚拟机NAT模式通过宿主机(Windows)上网不稳定解决办法(无法上网)(将宿主机设置固定ip并配置dns)
  • 【面试题】OOV(未登录词)问题如何解决?
  • Unity 枪械红点瞄准器计算
  • K8S 部署 NFS Dynamic Provisioning(动态存储供应)
  • Grafana可视化平台深度解析:选型、竞品、成本与资源消耗