首页 > 系统相关 >深入理解和配置Nginx:从基础到高级

深入理解和配置Nginx:从基础到高级

时间:2024-05-30 11:29:24浏览次数:14  
标签:log nginx 高级 server Nginx 指令 深入 proxy

深入理解和配置Nginx:从基础到高级

Nginx 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3代理服务器。由于其稳定性、丰富的功能集、简单的配置和低资源消耗,Nginx 已成为世界上最受欢迎的 Web 服务器之一。

在这篇文章中,我们将详细介绍 Nginx 的配置文件结构,涵盖其核心参数和模块配置,并提供示例配置文件以帮助您理解如何使用这些配置。

Nginx 配置文件结构

Nginx 的主配置文件通常位于 /etc/nginx/nginx.conf。这个配置文件由指令和上下文块组成。指令是基本配置单元,上下文块包含一组相关的指令。上下文块可以嵌套,以形成复杂的配置结构。

Nginx 配置文件的主要部分

  1. 全局配置:适用于整个 Nginx 服务。
  2. HTTP 配置:配置 HTTP 服务的行为。
  3. Server 配置:配置虚拟主机。
  4. Location 配置:配置 URL 路径匹配规则。

一个简单的 Nginx 配置文件示例

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

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;

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

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }

        error_page 404 /404.html;
        location = /404.html {
            internal;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            internal;
        }
    }
}

全局配置

全局配置部分位于配置文件的顶部,包含一些基本的设置,比如用户权限和进程管理。

user 指令

定义 Nginx 进程运行的用户和组:

user nginx;

如果没有特别的需求,默认使用 nginx 用户即可。

worker_processes 指令

定义 Nginx 使用的工作进程数量:

worker_processes auto;

auto 会让 Nginx 自动根据 CPU 核心数决定进程数量,这通常是最佳选择。

error_log 指令

定义全局错误日志的位置和日志级别:

error_log /var/log/nginx/error.log warn;

可选的日志级别有 debuginfonoticewarnerrorcrit

pid 指令

指定存储 Nginx 进程 ID 的文件位置:

pid /var/run/nginx.pid;

Events 块

events 块包含影响 Nginx 服务器处理连接方式的指令。

worker_connections 指令

定义每个工作进程最大连接数:

worker_connections 1024;

这个值影响服务器的并发处理能力。

HTTP 块

http 块包含用于配置 HTTP 服务器的指令和其他相关上下文(如 serverlocation)。

include 指令

用于包括其他配置文件:

include /etc/nginx/mime.types;
include /etc/nginx/conf.d/*.conf;

这允许您将配置分割成多个文件,简化管理。

default_type 指令

设置默认的 MIME 类型:

default_type application/octet-stream;
log_formataccess_log 指令

定义日志格式并指定访问日志文件位置:

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;
  • sendfile:启用高效文件传输。
  • tcp_nopush:优化 TCP 包发送(与 sendfile 一起使用)。
  • tcp_nodelay:减少网络延迟。
keepalive_timeout 指令

设置 keep-alive 超时时间:

keepalive_timeout 65;
types_hash_max_size 指令

设置哈希表的最大大小:

types_hash_max_size 2048;

Server 块

server 块定义虚拟主机,可以包含多个 server 块。

listen 指令

定义服务器监听的端口:

listen 80;
server_name 指令

定义服务器名称:

server_name example.com www.example.com;
location

location 块用于定义基于 URL 路径的配置。

rootindex 指令

定义网站根目录和默认索引文件:

location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
}
error_page 指令

定义自定义错误页面:

error_page 404 /404.html;
location = /404.html {
    internal;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
    internal;
}

高级配置

反向代理配置

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

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            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;
        }
    }
}
upstream

定义一组后端服务器:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}
proxy_pass 指令

将请求转发到上游服务器:

location / {
    proxy_pass http://backend;
}
proxy_set_header 指令

设置传递给后端服务器的请求头:

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;

负载均衡配置

Nginx 支持多种负载均衡方法,如轮询、最少连接和 IP 哈希。

轮询(默认)
upstream backend {
    server backend1.example.com;
    server backend2.example.com;
}
最少连接
upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}
IP 哈希
upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

SSL/TLS 配置

Nginx 也可用于提供 HTTPS 服务。

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 /usr/share/nginx/html;
        index index.html index.htm;
    }
}
ssl_certificatessl_certificate_key 指令

指定 SSL 证书和密钥文件:

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

定义支持的 SSL/TLS 协议:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 指令

定义可接受的加密套件:



ssl_ciphers 'HIGH:!aNULL:!MD5';
ssl_prefer_server_ciphers 指令

优先使用服务器端的加密套件:

ssl_prefer_server_ciphers on;

缓存配置

Nginx 可以用于缓存静态内容或反向代理缓存。

静态内容缓存
http {
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_cache my_cache;
            proxy_pass http://backend;
            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_cache_path 指令

定义缓存路径和参数:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
proxy_cache 指令

启用缓存:

location / {
    proxy_cache my_cache;
}

压缩配置

Nginx 可以使用 gzip 压缩传输内容以提高传输效率。

http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_proxied any;
    gzip_min_length 1000;
}
gzip 指令

启用 gzip 压缩:

gzip on;
gzip_types 指令

定义需要压缩的 MIME 类型:

gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_proxied 指令

为代理请求启用 gzip:

gzip_proxied any;
gzip_min_length 指令

设置压缩的最小文件大小:

gzip_min_length 1000;

日志配置

Nginx 提供丰富的日志配置选项,可以帮助管理员监控和调试。

自定义日志格式

http {
    log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$request_time"';
    access_log /var/log/nginx/custom_access.log custom;
}
log_format 指令

定义自定义日志格式:

log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" "$request_time"';
access_log 指令

指定访问日志文件和格式:

access_log /var/log/nginx/custom_access.log custom;

错误日志

error_log /var/log/nginx/error.log error;
error_log 指令

定义错误日志文件和级别:

error_log /var/log/nginx/error.log error;

结论

Nginx 的配置文件虽然看起来复杂,但理解其结构和每个指令的用途后,可以创建非常强大和灵活的 Web 服务器配置。本文从基础配置到高级应用,详细解释了 Nginx 配置文件的各个方面。希望这篇文章能帮助大家更好地理解和使用 Nginx。

通过掌握这些知识,可以优化 Nginx 的性能,提升网站的可靠性和安全性,为用户提供更好的体验。无论是处理静态文件、反向代理、负载均衡还是提供 SSL/TLS 服务,Nginx 都是一个强大且高效的工具。

标签:log,nginx,高级,server,Nginx,指令,深入,proxy
From: https://blog.csdn.net/weixin_42173770/article/details/139318884

相关文章

  • 深入探讨Function Calling:在Semantic Kernel中的应用实践
    引言上一章我们熟悉了OpenAI的functioncalling的执行原理,这一章节我们讲解一下functioncalling在SemanticKernel的应用。在OpenAIPromptExecutionSettings跟LLM交互过程中,ToolCallBehavior的属性之前我们的章节有介绍过ToolCallBehavior:属性用于获取或设置如何......
  • 深入探索令牌桶限流的原理与实践
    在当今的互联网时代,随着用户数量和请求量的不断增加,系统的性能和稳定性面临着巨大的挑战。限流算法作为保障系统稳定性的重要手段之一,被广泛应用于各种服务和应用中。限流的核心目的是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓......
  • nginx命令
    先进入nginx.exe所在文件夹cdD:\nginx常用命令如下D:\nginx>startnginx---启动D:\nginx>nginx-sreload---重新加载配置D:\nginx>tasklist/fi"imagenameeqnginx.exe---查看nginx进程D:\nginx>nginx-sstop---启动杀掉nginx进程D:\nginx>taskkill/f/......
  • 在联网linux中编译nginx源码迁移到离线linux使用指南
    nginx没有预先编译好的npm包,通常需要通过编译源代码得到执行文件,下面介绍如何操作:1.找一台联网的linux服务器,安装必要的编译工具和依赖项sudoyumgroupinstall"DevelopmentTools"sudoyuminstallpcre-develzlib-developenssl-devel2.下载nginx源代码包wgethttp:/......
  • centos 7安装nginx
    1.安装nginx[root@dsc1~]#yuminstall-ynginx[root@dsc1~]#rpm-qa|grepnginxnginx-1.20.1-10.el7.x86_64nginx-filesystem-1.20.1-10.el7.noarch 2.启动systemctlstartnginxsystemctlstatusnginx 3.访问[root@dsc1~]#curl-I127.0.0.1HTTP/1.1200OKServer......
  • 深入理解Java的设计模式
    设计模式(DesignPatterns)是软件开发中的宝贵经验总结,提供了解决常见设计问题的模板和最佳实践。在Java开发中,设计模式尤为重要,因为它们能够提高代码的可维护性、可扩展性和可重用性。本篇博客将详细介绍几种常见的设计模式,帮助读者掌握如何在Java开发中应用这些模式。什么是设......
  • 深入探索Java HashMap底层源码:结构、原理与优化
    引言简述HashMap在Java集合框架中的地位及其应用场景。阐明学习HashMap底层原理的重要性,特别是在面试、性能调优和解决并发问题方面的价值。1.HashMap基础概念数据结构:介绍HashMap的核心——哈希表,包括数组加链表/红黑树的结构。线程安全性:强调HashMap是非线程安全的,以及在......
  • 深入解析关系数据库设计的艺术
    在数字信息的海洋中,关系数据库如同一座精心设计的图书馆,将繁杂的数据有序地分类、存储和检索。它不仅是计算机科学的一个重要分支,更是现代信息系统不可或缺的基石。今天,我们将一同探索关系数据库设计的奥秘,揭开它的面纱,理解其背后的原理与实践。一、关系数据库的基本概念关系......
  • 一本关于深入理解linux内核的书
    以下目录中所述关于深入理解linux内核:http://iteralink.top/resource/detail/7180573456050688000第一章走进Linux11.1GNU与Linux的成长 11.2Linux的开发模式和运作机制 21.3走进Linux内核 41.3.1Linux内核的特征 41.3.2Linux内核版本的变化 51.4......
  • 深入解析Web前端三大主流框架:Angular、React和Vue
    Web前端三大主流框架分别是Angular、React和Vue。下面我将为您详细介绍这三大框架的特点和使用指南。Angular核心概念:组件(Components):组件是Angular应用的构建块,每个组件由一个带有装饰器的类、一个HTML模板、一个CSS样式表组成。组件通过输入(@Input)和输出(@Output)装饰......