Nginx状态页

基于nginx模块ngx_http_auth_basic_module实现,在编译安装nginx的时候需要添加编译参数--withhttp_stub_status_module,否则配置完成之后监测会是提⽰语法错误。

http {
    # 其他 http 配置...

    server {
        listen 80; # 配置监听的端口
        server_name localhost; # 配置服务器名,可以根据实际情况修改

        location /nginx_status {
            stub_status on;
            access_log off;
        }

        # 其他 server 配置...
    }

    # 其他 http 配置...
}

image.png image.png

Active connections: 当前处于活动状态的客⼾端连接数,包括连接等待空闲连接数。
accepts:统计总值,Nginx⾃启动后已经接受的客⼾端请求的总数。
handled:统计总值,Nginx⾃启动后已经处理完成的客⼾端请求的总数,通常等于accepts,除⾮有因
worker_connections限制等被拒绝的连接。
requests:统计总值,Nginx⾃启动后客⼾端发来的总的请求数。
Reading:当前状态,正在读取客⼾端请求报⽂⾸部的连接的连接数。
Writing:当前状态,正在向客⼾端发送响应报⽂过程中的连接数。
Waiting:当前状态,正在等待客⼾端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于 active –(reading+writing),
Nginx 第三⽅模块

Nginx 第三方模块是由社区或第三方开发者创建的扩展模块,它们可以在 Nginx 的基础上增加额外的功能和特性。Nginx 第三方模块通过 C 或其他语言编写,并被编译到 Nginx 二进制文件中,从而使得 Nginx 具备更多的能力和灵活性。

以下是一些常见的 Nginx 第三方模块:
ngx_http_geoip_module:用于实现基于 IP 地址的地理位置信息查询功能,可以根据 IP 地址确定用户的地理位置。
ngx_http_lua_module:允许使用 Lua 脚本来扩展 Nginx 的功能,可以通过编写 Lua 脚本来处理请求、访问数据库、实现复杂的逻辑等。
ngx_http_headers_more_module:用于添加、删除或修改 HTTP 请求和响应的头部信息,增加了头部处理的灵活性。
ngx_cache_purge:允许清除 Nginx 反向代理缓存中的特定内容,非常有用的清理缓存的功能。
ngx_pagespeed:用于对网页进行优化,包括压缩和缓存等,以提高页面加载速度。
ngx_http_gzip_static_module:用于预压缩静态文件,提供额外的 Gzip 压缩功能。
ngx_brotli:支持使用 Brotli 压缩算法来压缩 HTTP 响应,以减小传输大小。
ngx_http_auth_pam_module:允许使用 PAM(Pluggable Authentication Modules)进行 HTTP 基本认证。
ngx_http_substitutions_filter_module:用于在响应内容中执行字符串替换,可以用于动态修改响应内容。
ngx_stream_ssl_preread_module:用于解析 TLS/SSL 握手阶段的 SNI(Server Name Indication),允许根据 SNI 进行流量路由。

image.png

Nginx 变量使⽤
内置变量
$arg_PARAMETER:表示请求中的查询参数(GET 请求参数)的值。例如,$arg_id 表示请求中名为 id 的查询参数的值。
$request_uri:表示完整的请求 URI,包括查询参数部分。
$request_method:表示客户端请求的 HTTP 方法,如 GET、POST、PUT 等。
$remote_addr:表示客户端的 IP 地址。
$http_USER_AGENT:表示客户端的 User-Agent 头部,即客户端的浏览器信息。
$http_referer:表示客户端的 Referer 头部,即客户端的来源 URL。
$server_name:表示当前服务器的名称。
$server_port:表示当前服务器监听的端口。
$request_filename:表示当前请求的文件路径。
$status:表示服务器响应的 HTTP 状态码。
$query_string:表示请求中的查询字符串部分。
$http_COOKIE:表示客户端请求中的 Cookie 头部。
$request_body:表示请求的请求体内容。
$uri:表示请求的 URI 部分,不包括查询参数。
$document_root:表示当前请求的根目录。
$args:表示请求中的查询参数部分。
$http_host:表示客户端请求中的 Host 头部,即请求的域名。
$request_time:表示服务器处理请求的总时间,单位为秒。
$upstream_response_time:表示 Nginx 与上游服务器之间的响应时间,通常用于反向代理场景。
$hostname:表示 Nginx 服务器的主机名。
$request_completion:表示请求是否成功完成,值为 OK 或 EMPTY。
$http_accept_language:表示客户端请求中的 Accept-Language 头部,即客户端的语言偏好。
$ssl_protocol:表示 SSL/TLS 握手时使用的协议,如 TLSv1.2。
$request_body_file:表示请求体内容的临时文件路径,当请求体较大时,会将内容保存在临时文件中。
$limit_rate:表示限制请求的传输速率,用于限制客户端请求的带宽。
$connection:表示当前客户端连接的唯一标识。
$tcpinfo_rtt 和 $tcpinfo_rttvar:表示客户端连接的 TCP 往返时延和时间差。
自定义变量

假如需要⾃定义变量名称和值,使⽤指令set $variable value;,则⽅法如下: Syntax: set $variable value; Default: — Context: server, location, if

set $name lgw;
echo $name;
set $my_port $server_port;
echo $my_port;
echo "$server_name:$server_port";
自定义日志格式

在 Nginx 中,你可以使用 log_format 指令来定义自定义的日志格式。通过自定义日志格式,你可以指定哪些信息将被记录到 Nginx 的访问日志中,以及它们的排列方式和格式。

log_format name [escape=default|json|none] string ...;

image.png

Nginx 压缩功能

Nginx 提供了压缩功能,可以通过启用 Gzip 和 Brotli 压缩来减小传输的数据量,从而提高网站性能和响应速度。压缩功能对于降低带宽占用、减少页面加载时间以及提高用户体验非常有用。

http {
    gzip on; # 启用 Gzip 压缩
    gzip_comp_level 6; # 设置 Gzip 压缩级别(1-9,级别越高,压缩率越高,但 CPU 开销也会增加)
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 压缩指定类型的文件
    gzip_min_length 1000; # 设置压缩文件的最小长度,只压缩超过指定长度的文件
    gzip_proxied any; # 启用代理服务器的响应也进行压缩
    gzip_vary on; # 在响应头中添加 Vary: Accept-Encoding,用于告诉缓存服务器根据不同的 Accept-Encoding 进行缓存
    gzip_disable "msie6"; # 禁用 IE6 及以下版本的 Gzip 压缩
    # 其他 http 配置...
}
http {
    brotli on; # 启用 Brotli 压缩
    brotli_comp_level 6; # 设置 Brotli 压缩级别(0-11,级别越高,压缩率越高,但 CPU 开销也会增加)
    brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 压缩指定类型的文件
    brotli_min_length 1000; # 设置压缩文件的最小长度,只压缩超过指定长度的文件
    brotli_static on; # 启用 Brotli 静态文件的预压缩,可以提高压缩效率
    # 其他 http 配置...
}
https配置

要为多个域名配置 HTTPS,你可以在 Nginx 的配置中为每个域名创建一个独立的 HTTPS Server 块,并分别指定相应的 SSL 证书和私钥。以下是一个示例配置,用于配置多个域名的 HTTPS:

http {
    # 配置全局的 SSL 缓存,提高性能
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 配置默认的 SSL 协议和加密算法
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS13+AESGCM+AES128:EECDH+AESGCM+AES128:EECDH+AES128:RSA+AESGCM+AES128:RSA+AES128';
    ssl_prefer_server_ciphers on;

    # 默认的 HTTPS Server 块,用于监听 443 端口
    server {
        listen 443 ssl;
        server_name _;
        ssl_certificate /path/to/default_ssl.crt; # 默认域名的 SSL 证书
        ssl_certificate_key /path/to/default_ssl.key; # 默认域名的 SSL 私钥

        # 可选:启用 OCSP Stapling 提供更快的证书状态验证
        ssl_stapling on;
        ssl_stapling_verify on;

        # 可选:配置 HSTS 头,增强安全性(可选,需要谨慎配置)
        # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

        # 默认的 location 配置
        location / {
            # 配置处理 HTTPS 请求的逻辑
            # ...
        }

        # 可选:配置访问日志
        access_log /var/log/nginx/default.access.log;
        error_log /var/log/nginx/default.error.log;
    }

    # 第一个域名的 HTTPS Server 配置
    server {
        listen 443 ssl;
        server_name domain1.com www.domain1.com;
        ssl_certificate /path/to/domain1_ssl.crt; # domain1.com 的 SSL 证书
        ssl_certificate_key /path/to/domain1_ssl.key; # domain1.com 的 SSL 私钥

        # 可选:启用 OCSP Stapling 提供更快的证书状态验证
        ssl_stapling on;
        ssl_stapling_verify on;

        # 可选:配置 HSTS 头,增强安全性(可选,需要谨慎配置)
        # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

        # 配置 domain1.com 的 location
        location / {
            # 配置处理 HTTPS 请求的逻辑
            # ...
        }

        # 可选:配置访问日志
        access_log /var/log/nginx/domain1.access.log;
        error_log /var/log/nginx/domain1.error.log;
    }

    # 第二个域名的 HTTPS Server 配置
    server {
        listen 443 ssl;
        server_name domain2.com www.domain2.com;
        ssl_certificate /path/to/domain2_ssl.crt; # domain2.com 的 SSL 证书
        ssl_certificate_key /path/to/domain2_ssl.key; # domain2.com 的 SSL 私钥

        # 可选:启用 OCSP Stapling 提供更快的证书状态验证
        ssl_stapling on;
        ssl_stapling_verify on;

        # 可选:配置 HSTS 头,增强安全性(可选,需要谨慎配置)
        # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

        # 配置 domain2.com 的 location
        location / {
            # 配置处理 HTTPS 请求的逻辑
            # ...
        }

        # 可选:配置访问日志
        access_log /var/log/nginx/domain2.access.log;
        error_log /var/log/nginx/domain2.error.log;
    }

    # 其他 HTTPS Server 配置...
    # ...
}
关于favicon.ico

favicon.ico 是网站的图标文件,通常用于在浏览器标签页、书签栏和收藏夹中显示网站的图标。它是 "Favorites Icon" 的缩写,因此得名。 当用户访问网站时,浏览器会自动尝试从网站根目录下寻找名为 favicon.ico 的图标文件,并将其显示在浏览器标签页等位置。如果网站根目录下没有 favicon.ico 文件,浏览器可能会尝试在其他位置或使用默认的图标来代替。 通常,网站的图标可以是一个 16x16 像素或 32x32 像素大小的图像文件,常见的格式包括 .ico、.png 或 .gif 等。在过去,.ico 格式是最常见的用于 favicon 的格式,但现在许多现代浏览器也支持其他格式。 如果你想在你的网站中添加一个自定义的 favicon 图标,可以按照以下步骤操作:

创建一个符合要求大小的图标文件,保存为 .ico 或其他支持的格式。 将图标文件命名为 favicon.ico。 将 favicon.ico 文件放置在你的网站根目录下。 清除浏览器缓存,然后刷新你的网站页面。现在,浏览器应该会显示你设置的图标。 除了将 favicon.ico 放置在网站根目录下,你还可以通过在 HTML 的 <head> 部分添加如下代码,显式地指定favicon 的路径:

<link rel="icon" href="/path/to/favicon.ico" type="image/x-icon">

image.png

新增或升级模块

当你重新编译 Nginx 时,Nginx 的配置文件并不会自动覆盖。重新编译 Nginx 主要是为了更新 Nginx 的可执行文件和模块,而不会影响配置文件的内容。 如升级openssl模块

./configure --with-openssl=/usr/local/ssl --其他编译选项
make
sudo make install