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

Nginx 基本使用和高级用法详解

目录

  • Nginx 基本使用和高级用法详解
    • 一、Nginx 简介
    • 二、基本安装与使用
      • 1. 安装 Nginx
        • Ubuntu/Debian
        • CentOS/RHEL
      • 2. 基本操作命令
    • 三、配置文件结构
      • 1. 主要配置文件目录结构
      • 2. 基本配置示例(`/etc/nginx/nginx.conf`)
    • 四、虚拟主机配置
      • 1. 基本虚拟主机配置
      • 2. 启用站点
    • 五、高级配置技巧
      • 1. 反向代理配置
      • 2. 负载均衡
      • 3. SSL/TLS 配置
      • 4. 缓存配置
        • 代理缓存
        • 静态资源缓存
      • 5. 安全配置
      • 6. 限流配置
      • 7. URL 重写和重定向
      • 8. Gzip 压缩
    • 六、性能优化配置
      • 1. 连接优化
      • 2. 工作进程优化
    • 七、日志配置
      • 1. 自定义日志格式
      • 2. 日志分割脚本(`rotate_nginx_logs.sh`)
    • 八、监控和调试
      • 1. 状态页面配置
      • 2. 调试常用命令
    • 九、Docker 中的 Nginx
      • 1. Dockerfile 示例
      • 2. Docker Compose 示例
    • 结语

Nginx 基本使用和高级用法详解

一、Nginx 简介

Nginx 是一个高性能的 HTTP 和反向代理服务器,具有占用内存少、并发能力强等特点,广泛应用于 Web 服务、负载均衡、静态资源处理和反向代理等场景。

二、基本安装与使用

1. 安装 Nginx

Ubuntu/Debian
sudo apt update
sudo apt install nginx
CentOS/RHEL
sudo yum install nginx
# 或
sudo dnf install nginx

2. 基本操作命令

# 启动
sudo systemctl start nginx# 停止
sudo systemctl stop nginx# 重启
sudo systemctl restart nginx# 重新加载配置(不中断服务)
sudo systemctl reload nginx# 查看状态
sudo systemctl status nginx# 开机自启
sudo systemctl enable nginx

三、配置文件结构

1. 主要配置文件目录结构

/etc/nginx/
├── nginx.conf              # 主配置文件
├── conf.d/                 # 额外配置文件目录
├── sites-available/        # 可用站点配置文件
└── sites-enabled/          # 已启用站点配置文件(软链接指向 sites-available)

2. 基本配置示例(/etc/nginx/nginx.conf

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;events {worker_connections 1024;use epoll;multi_accept on;
}http {include /etc/nginx/mime.types;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;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
}

四、虚拟主机配置

1. 基本虚拟主机配置

# /etc/nginx/sites-available/example.comserver {listen 80;server_name example.com www.example.com;root /var/www/example.com;index index.html index.htm;location / {try_files $uri $uri/ =404;}# 静态资源缓存优化location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 1y;add_header Cache-Control "public, immutable";}
}

2. 启用站点

# 创建软链接启用站点
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/# 测试配置是否正确
sudo nginx -t# 重新加载配置
sudo systemctl reload nginx

五、高级配置技巧

1. 反向代理配置

server {listen 80;server_name api.example.com;location / {proxy_pass http://localhost:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 超时设置proxy_connect_timeout 30s;proxy_send_timeout 30s;proxy_read_timeout 30s;# 缓冲设置proxy_buffering on;proxy_buffer_size 4k;proxy_buffers 8 4k;}
}

2. 负载均衡

upstream backend {server backend1.example.com weight=3;server backend2.example.com;server backend3.example.com;server backup.example.com backup;
}server {listen 80;server_name app.example.com;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

3. SSL/TLS 配置

server {listen 443 ssl http2;server_name example.com;ssl_certificate /etc/ssl/certs/example.com.crt;ssl_certificate_key /etc/ssl/private/example.com.key;# SSL 安全设置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;ssl_prefer_server_ciphers off;# HSTS 强制 HTTPSadd_header Strict-Transport-Security "max-age=63072000" always;root /var/www/example.com;index index.html;
}

4. 缓存配置

代理缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;server {location / {proxy_cache my_cache;proxy_pass http://backend;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;add_header X-Cache-Status $upstream_cache_status;}
}
静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {expires 1y;add_header Cache-Control "public, immutable";
}

5. 安全配置

# 隐藏版本号
server_tokens off;# 安全响应头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;# 上传大小限制
client_max_body_size 10m;# 限制非法请求方法
if ($request_method !~ ^(GET|POST|HEAD)$) {return 405;
}

6. 限流配置

# 定义限流区域
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login:10m rate=2r/m;server {location /api/ {limit_req zone=api burst=20 nodelay;proxy_pass http://backend;}location /login {limit_req zone=login burst=5;proxy_pass http://backend;}
}

7. URL 重写和重定向

server {# 强制跳转 HTTPSif ($scheme = http) {return 301 https://$server_name$request_uri;}# 路径重定向location /old-path {return 301 /new-path;}# 去除 .html 扩展名location / {try_files $uri $uri.html $uri/ =404;}# RESTful URL 重写location /api/v1/users {rewrite ^/api/v1/users/(.*)$ /api/v1/users?id=$1 last;}
}

8. Gzip 压缩

gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_typestext/plaintext/csstext/xmltext/javascriptapplication/jsonapplication/javascriptapplication/xml+rssapplication/atom+xmlimage/svg+xml;

六、性能优化配置

1. 连接优化

events {worker_connections 4096;use epoll;multi_accept on;
}http {sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;keepalive_requests 1000;# 文件描述符缓存open_file_cache max=200000 inactive=20s;open_file_cache_valid 30s;open_file_cache_min_uses 2;open_file_cache_errors on;
}

2. 工作进程优化

worker_processes auto;
worker_cpu_affinity auto;# 提高文件描述符限制
worker_rlimit_nofile 65535;

七、日志配置

1. 自定义日志格式

log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" ''rt=$request_time uct="$upstream_connect_time" ''uht="$upstream_header_time" urt="$upstream_response_time"';access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;

2. 日志分割脚本(rotate_nginx_logs.sh

#!/bin/bash
# rotate_nginx_logs.shLOG_DIR="/var/log/nginx"
DATE=$(date -d "yesterday" +%Y-%m-%d)mv $LOG_DIR/access.log $LOG_DIR/access.$DATE.log
mv $LOG_DIR/error.log $LOG_DIR/error.$DATE.log# 通知 Nginx 重新打开日志文件
kill -USR1 $(cat /var/run/nginx.pid)# 压缩7天前的日志
find $LOG_DIR -name "*.log" -mtime +7 -exec gzip {} \;

提示:可配合 cron 定时执行日志轮转。

八、监控和调试

1. 状态页面配置

server {listen 8080;server_name localhost;location /nginx_status {stub_status on;access_log off;allow 127.0.0.1;deny all;}
}

访问 http://localhost:8080/nginx_status 可查看连接状态。

2. 调试常用命令

# 测试配置语法
sudo nginx -t# 打印完整配置(含 include)
sudo nginx -T# 查看 Nginx 编译参数和模块
nginx -V# 实时查看日志
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log# 压力测试(Apache Bench)
ab -n 1000 -c 100 http://example.com/

九、Docker 中的 Nginx

1. Dockerfile 示例

FROM nginx:alpineCOPY nginx.conf /etc/nginx/nginx.conf
COPY sites/ /etc/nginx/sites-available/
COPY html/ /usr/share/nginx/html/RUN ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/EXPOSE 80 443CMD ["nginx", "-g", "daemon off;"]

2. Docker Compose 示例

version: '3.8'
services:nginx:image: nginx:alpineports:- "80:80"- "443:443"volumes:- ./nginx.conf:/etc/nginx/nginx.conf- ./sites:/etc/nginx/sites-available- ./html:/usr/share/nginx/html- ./ssl:/etc/sslnetworks:- webnetnetworks:webnet:driver: bridge

结语

本指南涵盖了 Nginx 的 基础安装、虚拟主机、反向代理、负载均衡、SSL 配置、缓存、安全加固、限流、URL 重写、Gzip 压缩、性能调优、日志管理、监控调试 以及 Docker 部署 等核心内容,适用于构建高可用、高性能、安全的 Web 服务架构。

建议在生产环境中结合具体业务场景进行配置优化,并定期审查安全策略和性能指标。

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

相关文章:

  • 移位操作符
  • vue3实现两个shp文件同时展示
  • 黄埔企业网站建设东莞住建局电话是多少
  • python+uniapp基于微信小程序的学院设备报修系统
  • 【项目部署】JavaWeb、MavenJavaWeb项目部署至 Tomcat 的实现方式
  • 付费网站搭建如何评价一个网站做的是否好
  • 360网站排名怎么做南京app软件开发
  • 时序数据库全面重构指南
  • 标签之表格._单元格合并(本文为个人学习笔记,内容整理自哔哩哔哩UP主【非学者勿扰】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)
  • Linux小课堂: 文件操作核心命令深度解析(cat、less、head、tail、touch 与 mkdir 命令)
  • Docker赋能SkyEye云部署:解锁嵌入式仿真测试新效率,赋能企业研发加速
  • docker部署MySQL主从服务集群
  • 网站推广可采用的方法有哪些毕设做网站难吗
  • 方案图网站西安网站建设设计的好公司哪家好
  • 邻接矩阵的基本操作
  • 【JavaEE初阶】1124网络原理
  • 烟台建网站公司南昌做网站哪家公司好
  • windows安装minicoda
  • 网站能否做二维码什么是网络营销产生的技术基础
  • 自己的网站怎么做排名网络营销有必要学吗
  • 关于太阳光模拟器的常见问题解答(二)
  • 模拟量线性变换FC_S_ITR函数(基恩士PLC完整ST代码)
  • MCP(模型上下文协议)是什么?是AI 时代的 “USB-C”
  • 数字企业选哪家
  • 视程空间Pandora:终端算力破晓,赋能边缘计算未
  • Visual Basic 参数传送-形参与实参
  • 机器视觉的电路板字符缺陷检测应用
  • 如何进行坡向分析
  • 外贸网站一站式海外推广铜仁市住房和城乡建设局网站
  • 乐迪信息:设备温度异常怎么办?AI摄像机热成像双光监测