问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

终极 Nginx 配置指南:最新版实践

创作时间:
作者:
@小白创作中心

终极 Nginx 配置指南:最新版实践

引用
CSDN
8
来源
1.
https://blog.csdn.net/weixin_45081413/article/details/138792348
2.
https://github.com/nginx/nginx/releases
3.
https://docs.nginx-cn.net/nginx-oss-sub/releases
4.
https://nginx.org/en/download.html
5.
https://en.linuxadictos.com/nginx-1-24-0-has-already-been-released-and-these-are-its-news.html
6.
https://www.oschina.net/news/214308/nginx-1-22-1-n-1-23-2-released
7.
https://devopsden.io/article/what-are-changes-in-nginx-1.24
8.
https://www.phoronix.com/news/Nginx-1.24-Released

Nginx 1.27.1 是目前最新的稳定版本,于 2024 年 8 月 14 日发布。作为全球第二大 Web 服务器,Nginx 在高流量网站和应用程序中占据重要地位。本文将详细介绍 Nginx 的最新配置指南,从基础配置到高级功能,从最佳实践到常见问题解决,帮助读者全面掌握 Nginx 的使用和优化。

01

Nginx 配置文件结构

Nginx 的配置文件通常位于 /etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf。配置文件由多个指令块组成,主要包括以下几个部分:

全局块

全局块包含影响 Nginx 全局的指令,通常位于配置文件的最顶部。

user www-data;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
  • user:指定运行 Nginx 的用户和组。
  • worker_processes:指定工作进程的数量,通常设置为 CPU 核心数或 auto
  • error_log:指定错误日志的路径和日志级别。
  • pid:指定 Nginx 主进程的 PID 文件路径。

events 块

events 块用于配置网络连接相关的参数。

events {
    worker_connections 1024;
    use epoll;
    multi_accept on;
}
  • worker_connections:每个工作进程允许的最大连接数。
  • use:指定事件模型,如 epoll(Linux 高效事件模型)。
  • multi_accept:允许每个工作进程同时接受多个连接。

http 块

http 块是 Nginx 配置的核心部分,用于配置 HTTP 服务器相关指令。

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    access_log /var/log/nginx/access.log;
    sendfile on;
    keepalive_timeout 65;
    gzip on;

    server {
        listen 80;
        server_name example.com;

        location / {
            root /var/www/html;
            index index.html index.htm;
        }
    }
}
  • include:包含其他配置文件,如 MIME 类型文件。
  • default_type:设置默认的 MIME 类型。
  • access_log:指定访问日志的路径和格式。
  • sendfile:启用高效文件传输模式。
  • keepalive_timeout:设置客户端与服务器之间的长连接超时时间。
  • gzip:启用 Gzip 压缩,减少传输数据量。

server 块

server 块用于配置虚拟主机,每个 server 块对应一个虚拟主机。

server {
    listen 80;
    server_name example.com www.example.com;

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

    location /images/ {
        alias /var/www/images/;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
  • listen:指定监听的端口和 IP 地址。
  • server_name:指定虚拟主机的域名。
  • location:配置请求的路由和处理方式。

location 块

location 块用于配置请求的路由和处理方式,支持正则表达式匹配。

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

location /images/ {
    alias /var/www/images/;
}

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
  • root:指定请求的根目录。
  • index:指定默认的索引文件。
  • alias:定义路径别名,用于替换 location 路径。
  • ~:表示使用正则表达式匹配。
  • fastcgi_pass:指定 FastCGI 服务器的地址。
02

高级功能配置

反向代理配置

Nginx 常用作反向代理服务器,将客户端请求转发到后端服务器。

location /api/ {
    proxy_pass http://backend_server;
    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_pass:指定后端服务器的地址。
  • proxy_set_header:设置转发给后端服务器的请求头。

SSL/TLS 配置

Nginx 支持 SSL/TLS 加密,保护数据传输的安全性。在最新版本中,默认启用了 TLSv1.3 协议。

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}
  • ssl_certificate:指定 SSL 证书文件路径。
  • ssl_certificate_key:指定 SSL 私钥文件路径。
  • ssl_protocols:指定使用的 SSL/TLS 协议版本。
  • ssl_ciphers:指定加密套件。
  • ssl_prefer_server_ciphers:优先使用服务器端的加密套件。

负载均衡配置

Nginx 可以作为负载均衡器,将请求分发到多个后端服务器。

upstream backend {
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
    }
}
  • upstream:定义后端服务器组。
  • server:指定后端服务器的地址。
03

最佳实践

性能优化建议

  1. 启用 Gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  1. 使用缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
  1. 优化连接设置
keepalive_timeout 65;
keepalive_requests 100;

安全配置建议

  1. 限制请求方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 444;
}
  1. 防止点击劫持
add_header X-Frame-Options SAMEORIGIN;
  1. 防止 XSS 攻击
add_header X-XSS-Protection "1; mode=block";

日常运维经验分享

  1. 定期检查日志
tail -f /var/log/nginx/error.log
  1. 使用 Nginx Plus 或开源监控工具进行监控

  2. 定期更新 Nginx 版本,应用安全补丁

04

常见问题与解决方案

  1. 502 Bad Gateway

    • 检查后端服务器是否正常运行
    • 检查 Nginx 和后端服务器之间的网络连接
  2. 403 Forbidden

    • 检查文件权限和目录权限
    • 确保 Nginx 用户有读取权限
  3. SSL/TLS 握手失败

    • 检查证书和私钥是否匹配
    • 确保 OpenSSL 版本兼容
  4. 性能瓶颈

    • 优化配置参数(如 worker_processes、worker_connections)
    • 使用缓存和压缩
    • 调整操作系统内核参数

Nginx 的配置文件结构清晰,指令丰富,能够满足各种复杂的 Web 服务器需求。通过合理配置,可以充分发挥 Nginx 的高性能和高并发处理能力。无论是初学者还是资深运维人员,都能从这份配置指南中获得宝贵的知识和经验。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号