http
模块:http {
# 全局配置
}
作用: 定义 HTTP 服务器的全局配置。
详细解释: 这个模块包含了整个 HTTP 服务器的配置,包括全局性质的配置项,如日志、连接池大小等。
http 模块是 Nginx 配置中的顶层模块,用于配置 HTTP 服务器的全局设置。以下是一些常见的 http 模块中的配置指令以及它们的作用:
include
指令:
include /etc/nginx/conf.d/*.conf;
server_tokens
指令:
server_tokens off;
off
可以禁用服务器信息的显示,提高安全性。sendfile
指令:
sendfile on;
sendfile
来发送文件,可以提高文件传输效率。tcp_nopush
指令:
tcp_nopush on;
TCP_NOPUSH
选项。如果启用,将在头部发送完毕后立即发送数据,提高响应速度。tcp_nodelay
指令:
tcp_nodelay on;
TCP_NODELAY
选项。如果启用,禁用 Nagle 算法,减小数据包的传输延迟。keepalive_timeout
指令:
keepalive_timeout 65;
client_max_body_size
指令:
client_max_body_size 10m;
gzip
指令:
gzip on;
gzip_types
指令:
gzip_types text/plain application/xml;
default_type
指令:
default_type application/octet-stream;
这些是使用无序列表排列的 http
模块中的一些常见配置指令。在实际使用中,根据服务器的需求和安全性要求,可以选择启用或禁用这些功能,并根据需要进行定制。
server
模块:server
模块是 Nginx 配置中的一个重要模块,用于配置虚拟主机。以下是一些 server
模块中的常见配置指令及其作用,以及一些示例说明:server {
listen 80; # 监听的端口号
server_name example.com; # 服务器的域名或 IP 地址
# 根路径的配置
location / {
root /var/www/html; # 根目录
index index.html index.htm; # 默认文件索引
}
# 匹配 /images/ 路径的配置
location /images/ {
alias /var/www/images/; # 别名,指定文件夹的实际路径
}
# 反向代理配置
location /app/ {
proxy_pass http://backend_server; # 后端服务器的地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# SSL/TLS 配置
listen 443 ssl; # 监听 443 端口,并启用 SSL
ssl_certificate /etc/nginx/ssl/cert.pem; # SSL 证书文件路径
ssl_certificate_key /etc/nginx/ssl/key.pem; # SSL 私钥文件路径
# 其他 SSL/TLS 配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384';
ssl_prefer_server_ciphers off;
# 错误日志配置
error_log /var/log/nginx/error.log error;
# 访问日志配置
access_log /var/log/nginx/access.log;
# 其他配置
client_max_body_size 10m; # 最大请求体大小限制
}
listen
指令:
listen 80;
表示监听 HTTP 请求的默认端口 80。server_name
指令:
server_name example.com;
指定服务器响应来自 example.com
的请求。root
指令:
root /var/www/html;
设置服务器的根目录为 /var/www/html
。index
指令:
index index.html index.htm;
指定在请求的目录中查找的默认文件。location
指令:
location / {
try_files $uri $uri/ =404;
}
上述示例指定根路径 /
的处理规则,尝试查找请求的文件,如果找不到则返回 404 错误。error_page
指令:
error_page 500 502 503 504 /50x.html;
上述示例配置处理 500、502、503、504 错误码,将请求重定向到 /50x.html
。location = /50x.html
指令:
/50x.html
路径的处理规则。location = /50x.html {
root /usr/share/nginx/html;
}
上述示例配置处理请求精确匹配 /50x.html
路径的情况,返回位于 /usr/share/nginx/html
目录下的文件。access_log
指令:
access_log /var/log/nginx/example.access.log;
指定访问日志的路径。error_log
指令:
error_log /var/log/nginx/example.error.log;
指定错误日志的路径和级别。location
模块:server {
listen 80;
location /images/ {
# 前缀匹配,匹配以 /images/ 开头的 URI
alias /var/www/images/;
# 示例 URI: /images/photo.jpg
}
location = /about {
# 精确匹配 /about
root /var/www/html;
index about.html;
# 示例 URI: /about
}
location ~ \.php$ {
# 正则表达式匹配,匹配以 .php 结尾的 URI
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# 示例 URI: /index.php
}
location ~* \.png$ {
# 正则表达式不区分大小写匹配,匹配以 .png 结尾的 URI
root /var/www/images/;
# 示例 URI: /image.png
}
location ^~ /downloads/ {
# 非正则表达式匹配,优先匹配以 /downloads/ 开头的 URI
alias /var/www/downloads/;
# 示例 URI: /downloads/file.zip
}
location /files/ {
# 包含特殊字符,匹配以 /files/ 开头的 URI
alias /var/www/files/;
# 示例 URI: /files/document.pdf
}
location /docs {
# 包含特殊字符,匹配以 /docs 开头的 URI
try_files $uri $uri/ /docs/index.html;
# 示例 URI: /docs/manual/
}
location ~ ^/user/(?<username>[a-zA-Z0-9_-]+)/profile$ {
# 命名捕获组,匹配类似 /user/johndoe/profile 的 URI,并捕获用户名
alias /var/www/profiles/$username/;
# 示例 URI: /user/johndoe/profile
}
location / {
# 包含 if 条件语句,根据条件匹配执行不同的配置
if ($query_string ~ "param=value") {
return 403;
}
# 默认配置,匹配任何 URI
root /var/www/default/;
index index.html;
# 示例 URI: /home
}
}
作用: 定义不同 URL 路径的配置,用于匹配请求的 URI。
详细解释: location
模块根据请求的 URI 进行匹配,并提供不同的配置,允许你对不同的 URL 路径应用不同的设置。
当使用 location
块时,~
和 ^
是两个常见的修饰符,它们用于指定正则表达式匹配的方式。以下是对它们的解释说明:
~
符号:
location ~ \.php$ {
# 正则表达式匹配,匹配以 .php 结尾的 URI
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
~
用于指定一个区分大小写的正则表达式匹配。在上面的例子中,该 location
配置将匹配以 .php
结尾的 URI,例如 /index.php
。^
符号:
location ^~ /downloads/ {
# 非正则表达式匹配,优先匹配以 /downloads/ 开头的 URI
alias /var/www/downloads/;
}
^
用于指定一个非正则表达式的前缀匹配,该匹配会优先于其他正则表达式匹配。在上面的例子中,该 location
配置将优先匹配以 /downloads/
开头的 URI。使用这些符号时需要注意以下事项:
~
进行正则表达式匹配,则匹配是区分大小写的。^
进行前缀匹配,该匹配会优先于其他正则表达式匹配,即使其他正则表达式匹配更准确。这样的解释有助于理解 location
块中这些符号的作用,以及它们在正则表达式匹配中的不同用途。
events
模块:events {
# 配置与连接处理有关的参数
worker_connections 1024; # 每个工作进程的最大连接数
# 可选配置项
# multi_accept on; # 同时接受多个新连接
# use epoll; # 使用 epoll 事件模型
# worker_connections 2048; # 可以在这里覆盖全局的 worker_connections 设置
}
events
模块用于配置与连接处理相关的参数,例如允许的最大连接数。error_log
模块:http {
# ... 其他 http 模块配置
# 配置错误日志的位置和级别
error_log /var/log/nginx/error.log error;
# 可选配置项
# error_log /var/log/nginx/debug.log debug; # 同时记录调试级别的日志
# error_log syslog:server=127.0.0.1,facility=local7,tag=nginx,severity=info; # 将错误日志发送到 syslog
server {
# ... 其他 server 模块配置
# 配置该虚拟主机的错误日志
error_log /var/log/nginx/example.com_error.log warn;
# 可选配置项
# error_log /var/log/nginx/example.com_debug.log debug;
}
}
error_log
模块用于指定错误日志的路径和级别,以便记录服务器发生的错误。access_log
模块:http {
# ... 其他 http 模块配置
# 配置访问日志的位置和格式
access_log /var/log/nginx/access.log;
# 可选配置项
# access_log /var/log/nginx/access_debug.log debug; # 同时记录调试级别的访问日志
# access_log syslog:server=127.0.0.1,facility=local7,tag=nginx,severity=info; # 将访问日志发送到 syslog
server {
# ... 其他 server 模块配置
# 配置该虚拟主机的访问日志
access_log /var/log/nginx/example.com_access.log;
# 可选配置项
# access_log /var/log/nginx/example.com_access_debug.log debug;
}
}
access_log
模块用于指定访问日志的路径,记录客户端的访问请求信息。index
模块:http {
# ... 其他 http 模块配置
# 指定默认的文件索引顺序
index index.html index.htm;
# 可选配置项
# index index.php; # 添加 index.php 到默认索引列表
# index index.html index.htm default.html; # 自定义索引文件列表
# index; # 禁用默认索引,不自动寻找索引文件
}
index
模块用于指定当客户端请求一个目录时,服务器应该寻找哪些文件作为默认索引文件。proxy
模块:http {
# ... 其他 http 模块配置
server {
# ... 其他 server 模块配置
location / {
# 反向代理配置
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 可选配置项
# location /app/ {
# 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
模块用于配置反向代理,将请求转发给后端服务器,并将响应返回给客户端。ssl
模块:server {
listen 443 ssl; # 监听 443 端口,并启用 SSL
# SSL 证书和私钥的配置
ssl_certificate /etc/nginx/ssl/cert.pem; # SSL 证书文件路径
ssl_certificate_key /etc/nginx/ssl/key.pem; # SSL 私钥文件路径
# 可选配置项
# ssl_protocols TLSv1.2 TLSv1.3; # 指定支持的 SSL/TLS 协议版本
# ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384'; # 指定加密算法
# ssl_prefer_server_ciphers off; # 在客户端和服务器之间选择密码套件时,使用服务器的顺序
server_name example.com; # 服务器的域名或 IP 地址
# ... 其他 server 配置
}
ssl
模块用于配置支持 SSL/TLS 协议的服务器,包括证书和私钥的指定等。gzip
模块: http {
# ... 其他 http 模块配置
server {
# ... 其他 server 模块配置
# 启用 Gzip 压缩
gzip on;
# 可选配置项
# gzip_types text/plain application/xml; # 指定需要进行 Gzip 压缩的文件类型
# gzip_min_length 1000; # 设置最小压缩文件大小
# gzip_proxied any; # 允许通过代理服务器进行压缩
# gzip_disable "MSIE [1-6]\."; # 禁用对特定 User-Agent 的压缩
location / {
# ... 其他 location 配置
# 关闭对特定 User-Agent 的压缩
gzip_disable "MSIE [1-6]\.";
}
}
}
gzip
模块用于启用或禁用对客户端响应的内容进行 Gzip 压缩,以减小传输的数据量。