nginx配置文件介绍及示例
一、nginx配置文件一共有main,http,server,location,upstream,stream,events7个块。
step 1: main 块
作用:main 块是 Nginx 配置文件的顶级块,用于设置一些全局的参数和配置,这些配置会影响整个 Nginx 服务器的运行行为。
常见配置指令:
user:指定 Nginx 工作进程运行的用户和用户组,例如 user nginx nginx;。
worker_processes:设置 Nginx 工作进程的数量,一般根据服务器的 CPU 核心数来确定,如 worker_processes 4; 表示启动 4 个工作进程。
error_log:定义错误日志的路径和级别,如 error_log /var/log/nginx/error.log error;。
pid:指定 Nginx 主进程的进程 ID 文件的路径,例如 pid /var/run/nginx.pid;。
step 2:http 块
作用:http 块用于配置 HTTP 相关的功能和参数,包括服务器虚拟主机的定义、请求处理规则、缓存设置、日志配置等,是 Nginx 处理 HTTP 流量的核心配置部分。
常见配置指令:
server:用于定义一个虚拟主机,在其中可以配置监听端口、域名、请求处理的 location 等,例如:
access_log:配置访问日志的路径和格式,如 access_log /var/log/nginx/access.log combined;。
sendfile:设置是否启用 sendfile 功能来提高文件传输效率,如 sendfile on;。
gzip:开启或关闭 Gzip 压缩,并配置相关参数,如压缩级别、压缩的 MIME 类型等。
step 3:server 块
作用:server 块定义了一个虚拟主机,用于处理特定域名或 IP 地址的 HTTP 请求。一个 http 块中可以包含多个 server 块,每个 server 块对应一个不同的虚拟主机。
常见配置指令:
listen:指定虚拟主机监听的端口,如 listen 80; 或 listen 443 ssl; 表示监听 80 端口或 443 端口并启用 SSL。
server_name:设置虚拟主机对应的域名或 IP 地址,可以是单个域名,也可以是多个域名的列表,如 server_name example.com www.example.com;。
location:用于配置针对不同 URL 路径的请求处理规则。
step 4:location 块
作用:location 块用于根据请求的 URL 路径来匹配并处理请求,可以在 server 块内定义多个 location 块,以实现对不同路径的请求进行不同的处理。
常见配置指令:
root:指定请求的根目录,如 root /var/www/html; 表示将以该目录作为请求的根目录来查找文件。
index:设置默认的索引文件,如 index index.html index.htm; 表示当请求的路径为目录时,优先查找并返回这些索引文件。
proxy_pass:用于将请求反向代理到后端服务器,如 proxy_pass http://backend_server; 表示将请求转发到名为 backend_server 的后端服务器。
step 5:upstream 块
作用:upstream 块用于定义一组后端服务器,以便在进行反向代理或负载均衡时使用,可以在 http 块或 server 块中使用。
常见配置指令:
server:指定后端服务器的地址和端口,如 server backend1.example.com; 或 server backend2.example.com:8080;。
weight:为后端服务器设置权重,用于负载均衡时调整服务器的负载分配比例,如 server backend1.example.com weight=3; 表示该服务器的权重为 3,相对权重更高,会接收更多的请求。
step 6:stream 块
作用:stream 块用于处理 TCP 和 UDP 流量,类似于 http 块对 HTTP 流量的处理,可以定义 TCP 或 UDP 服务器、负载均衡等配置。
常见配置指令:
server:在 stream 块中定义一个 TCP 或 UDP 服务器,如 server { listen 1234; proxy_pass backend_server:5678; } 表示监听 1234 端口,并将流量代理到后端服务器的 5678 端口。
upstream:与 http 中的 upstream 类似,用于定义一组后端的 TCP 或 UDP 服务器,实现流量的负载均衡。
step 7:events 块
作用:events 块用于配置 Nginx 的事件处理模型相关的参数,主要影响 Nginx 对连接的处理方式和性能表现。
常见配置指令:
worker_connections:设置每个工作进程允许的最大连接数,例如 worker_connections 1024; 表示每个工作进程最多可以处理 1024 个并发连接。
use:指定使用的事件处理模型,如 use epoll; 表示使用 epoll 模型,不同的操作系统可能支持不同的事件处理模型,选择合适的模型可以提高性能。
二、常用的配置示例。
示例一:三节点192.168.0.90:81,192.168.0.91:81,192.168.0.92:81配置负载均衡,监听端口为80。
http {
upstream backend_servers {
server 192.168.0.90:81;
server 192.168.0.92:81;
server 192.168.0.91:81;
}
server {
listen 80;
server_name your_domain_name; # 替换为你的域名或IP地址(如果需要通过域名访问)
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
示例二:三节点192.168.0.90:81,192.168.0.91:81,192.168.0.92:81配置负载均衡,监听端口为80,算法为加权轮询,30秒内如果有3次连接失败,停止向该服务器转发请求。
http {
upstream backend_servers {
server 192.168.0.90:81 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.0.92:81 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.0.91:81 weight=2 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name your_domain_name; # 替换为你的域名或IP地址(如果需要通过域名访问)
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
示例三:三节点192.168.0.90:81,192.168.0.91:81,192.168.0.92:81配置负载均衡,监听端口为80;算法为加权轮询,30秒内如果有3次连接失败,停止向该服务器转发请求;开启与后端服务器的长连接。
http {
upstream gdmp_servers {
server 192.168.0.90:81 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.0.92:81 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.0.91:81 weight=2 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name your_domain_name; # 替换为你的域名或IP地址(如果需要通过域名访问)
location / {
#转发的后端服务器地址
proxy_pass http://gdmp;
#代理请求头中客户端请求的目标域名或 IP 地址和端口号
proxy_set_header Host $host;
#获取真实客户端 IP 地址
proxy_set_header X-Real-IP $remote_addr;
# 开启与后端服务器的长连接
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
}
示例四:三节点192.168.0.90:81,192.168.0.91:81,192.168.0.92:81配置负载均衡,监听端口为80;算法为加权轮询,30秒内如果有3次连接失败,停止向该服务器转发请求;开启与后端服务器的长连接,配置超时时间。
http {
upstream gdmp_servers {
server 192.168.0.90:81 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.0.92:81 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.0.91:81 weight=2 max_fails=3 fail_timeout=30s;
# 设置连接超时时间为300秒
keepalive_timeout 300s;
}
server {
listen 80;
server_name your_domain_name; # 替换为你的域名或IP地址(如果需要通过域名访问)
# 设置连接后端服务器的超时时间为300秒
proxy_connect_timeout 300s;
# 设置从后端服务器读取数据的超时时间为300秒
proxy_read_timeout 300s;
# 设置向后端服务器发送数据的超时时间为300秒
proxy_send_timeout 300s
location / {
#转发的后端服务器地址
proxy_pass http://gdmp;
#代理请求头中客户端请求的目标域名或 IP 地址和端口号
proxy_set_header Host $host;
#获取真实客户端 IP 地址
proxy_set_header X-Real-IP $remote_addr;
# 开启与后端服务器的长连接
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
}
示例五:三节点192.168.0.90:81,192.168.0.91:81,192.168.0.92:81配置负载均衡,监听端口为80;算法为加权轮询,30秒内如果有3次连接失败,停止向该服务器转发请求;开启与后端服务器的长连接,配置超时时间,配置错误页面跳转,配置日志。
http {
#自定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 配置访问日志,使用了名为main的日志格式
access_log /var/log/nginx/access.log main;
# 配置错误日志,默认日志级别
error_log /var/log/nginx/error.log;
upstream gdmp_servers {
server 192.168.0.90:81 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.0.92:81 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.0.91:81 weight=2 max_fails=3 fail_timeout=30s;
# 设置连接超时时间为300秒
keepalive_timeout 300s;
}
server {
listen 80;
server_name your_domain_name; # 替换为你的域名或IP地址(如果需要通过域名访问)
# 设置连接后端服务器的超时时间为300秒
proxy_connect_timeout 300s;
# 设置从后端服务器读取数据的超时时间为300秒
proxy_read_timeout 300s;
# 设置向后端服务器发送数据的超时时间为300秒
proxy_send_timeout 300s
location / {
#转发的后端服务器地址
proxy_pass http://gdmp;
#代理请求头中客户端请求的目标域名或 IP 地址和端口号
proxy_set_header Host $host;
#获取真实客户端 IP 地址
proxy_set_header X-Real-IP $remote_addr;
# 开启与后端服务器的长连接
proxy_http_version 1.1;
proxy_set_header Connection "";
}
# 配置错误页面跳转
error_page 500 502 503 504 /error.html;
location = /error.html {
internal;
root /usr/share/nginx/html;
}
# 配置访问日志,访问日志使用了combined这种预定义的日志格式
access_log /var/log/nginx/example.com_access.log combined;
# 配置错误日志,只记录警告及更严重级别的错误信息。
error_log /var/log/nginx/example.com_error.log warn;
}
}
示例六:三节点192.168.0.90:81,192.168.0.91:81,192.168.0.92:81配置负载均衡,监听端口为80;算法为加权轮询,30秒内如果有3次连接失败,停止向该服务器转发请求;开启与后端服务器的长连接,配置超时时间,配置错误页面跳转,配置日志,配置发送文件。
http {
#自定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 配置访问日志,使用了名为main的日志格式
access_log /var/log/nginx/access.log main;
# 配置错误日志,默认日志级别
error_log /var/log/nginx/error.log;
upstream gdmp_servers {
server 192.168.0.90:81 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.0.92:81 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.0.91:81 weight=2 max_fails=3 fail_timeout=30s;
# 设置连接超时时间为300秒
keepalive_timeout 300s;
}
server {
listen 80;
server_name your_domain_name; # 替换为你的域名或IP地址(如果需要通过域名访问)
# 设置连接后端服务器的超时时间为300秒
proxy_connect_timeout 300s;
# 设置从后端服务器读取数据的超时时间为300秒
proxy_read_timeout 300s;
# 设置向后端服务器发送数据的超时时间为300秒
proxy_send_timeout 300s
#启用 sendfile 机制来处理文件传输
sendfile on;
#Nginx 会尝试将多个小的数据包合并成一个较大的数据包,然后再一次性发送给客户端
tcp_nopush on;
#TCP 连接上禁用 Nagle 算法
tcp_nodelay on;
location / {
#转发的后端服务器地址
proxy_pass http://gdmp;
#代理请求头中客户端请求的目标域名或 IP 地址和端口号
proxy_set_header Host $host;
#获取真实客户端 IP 地址
proxy_set_header X-Real-IP $remote_addr;
# 开启与后端服务器的长连接
proxy_http_version 1.1;
proxy_set_header Connection "";
}
# 配置错误页面跳转
error_page 500 502 503 504 /error.html;
location = /error.html {
internal;
root /usr/share/nginx/html;
}
# 配置访问日志,访问日志使用了combined这种预定义的日志格式
access_log /var/log/nginx/example.com_access.log combined;
# 配置错误日志,只记录警告及更严重级别的错误信息。
error_log /var/log/nginx/example.com_error.log warn;
}
}
示例七:三节点192.168.0.90:81,192.168.0.91:81,192.168.0.92:81配置负载均衡,监听端口为80;算法为加权轮询,30秒内如果有3次连接失败,停止向该服务器转发请求;开启与后端服务器的长连接,配置超时时间,配置错误页面跳转,配置日志,配置发送文件,开启gzip压缩。
http {
#自定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 配置访问日志,使用了名为main的日志格式
access_log /var/log/nginx/access.log main;
# 配置错误日志,默认日志级别
error_log /var/log/nginx/error.log;
upstream gdmp_servers {
server 192.168.0.90:81 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.0.92:81 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.0.91:81 weight=2 max_fails=3 fail_timeout=30s;
# 设置连接超时时间为300秒
keepalive_timeout 300s;
}
server {
listen 80;
server_name your_domain_name; # 替换为你的域名或IP地址(如果需要通过域名访问)
# 设置连接后端服务器的超时时间为300秒
proxy_connect_timeout 300s;
# 设置从后端服务器读取数据的超时时间为300秒
proxy_read_timeout 300s;
# 设置向后端服务器发送数据的超时时间为300秒
proxy_send_timeout 300s
#启用 sendfile 机制来处理文件传输
sendfile on;
#Nginx 会尝试将多个小的数据包合并成一个较大的数据包,然后再一次性发送给客户端
tcp_nopush on;
#TCP 连接上禁用 Nagle 算法
tcp_nodelay on;
location / {
#转发的后端服务器地址
proxy_pass http://gdmp;
#代理请求头中客户端请求的目标域名或 IP 地址和端口号
proxy_set_header Host $host;
#获取真实客户端 IP 地址
proxy_set_header X-Real-IP $remote_addr;
# 开启与后端服务器的长连接
proxy_http_version 1.1;
proxy_set_header Connection "";
}
# 配置错误页面跳转
error_page 500 502 503 504 /error.html;
location = /error.html {
internal;
root /usr/share/nginx/html;
}
# 配置访问日志,访问日志使用了combined这种预定义的日志格式
access_log /var/log/nginx/example.com_access.log combined;
# 配置错误日志,只记录警告及更严重级别的错误信息。
error_log /var/log/nginx/example.com_error.log warn;
#开启gzip
gzip on;
#开启静态页面压缩
gzip_static on;
#特定浏览器禁用 gzip 压缩的指令,解决浏览器兼容性问题
gzip_disable "MSIE [1-6].";
#压缩级别5
gzip_comp_level 5;
#只有文件大小在 1 千字节及以上的文件才会被压缩
gzip_min_length 1k;
#启用4 个缓冲区来用于 gzip 压缩;每个缓冲区的大小为 16 千字节
gzip_buffers 4 16k;
#压缩的对象类型
gzip_types text/xml
text/css
text/plain
text/csv
text/javascript
text/json
text/x-component
application/javascript
application/x-javascript
application/xml
application/json
application/xhtml+xml
application/rss+xml
application/atom+xml
application/x-font-ttf
application/x-web-app-manifest+json
application/vnd.ms-fontobject
image/svg+xml
image/x-icon
font/ttf
font/opentype;
#不会在响应头中添加Vary: Accept-Encoding字段
gzip_vary off;
}
}
示例八:三节点192.168.0.90:81,192.168.0.91:81,192.168.0.92:81配置负载均衡,监听端口为80;算法为加权轮询,30秒内如果有3次连接失败,停止向该服务器转发请求;开启与后端服务器的长连接,配置超时时间,配置错误页面跳转,配置日志,配置发送文件,开启gzip压缩,配置ssl证书。
http {
#自定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 配置访问日志,使用了名为main的日志格式
access_log /var/log/nginx/access.log main;
# 配置错误日志,默认日志级别
error_log /var/log/nginx/error.log;
upstream gdmp_servers {
server 192.168.0.90:81 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.0.92:81 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.0.91:81 weight=2 max_fails=3 fail_timeout=30s;
# 设置连接超时时间为300秒
keepalive_timeout 300s;
}
server {
listen 80;
server_name your_domain_name; # 替换为你的域名或IP地址(如果需要通过域名访问)
# 设置连接后端服务器的超时时间为300秒
proxy_connect_timeout 300s;
# 设置从后端服务器读取数据的超时时间为300秒
proxy_read_timeout 300s;
# 设置向后端服务器发送数据的超时时间为300秒
proxy_send_timeout 300s
#启用 sendfile 机制来处理文件传输
sendfile on;
#Nginx 会尝试将多个小的数据包合并成一个较大的数据包,然后再一次性发送给客户端
tcp_nopush on;
#TCP 连接上禁用 Nagle 算法
tcp_nodelay on;
location / {
#转发的后端服务器地址
proxy_pass http://gdmp;
#代理请求头中客户端请求的目标域名或 IP 地址和端口号
proxy_set_header Host $host;
#获取真实客户端 IP 地址
proxy_set_header X-Real-IP $remote_addr;
# 开启与后端服务器的长连接
proxy_http_version 1.1;
proxy_set_header Connection "";
}
# 配置错误页面跳转
error_page 500 502 503 504 /error.html;
location = /error.html {
internal;
root /usr/share/nginx/html;
}
# 配置访问日志,访问日志使用了combined这种预定义的日志格式
access_log /var/log/nginx/example.com_access.log combined;
# 配置错误日志,只记录警告及更严重级别的错误信息。
error_log /var/log/nginx/example.com_error.log warn;
#开启gzip
gzip on;
#开启静态页面压缩
gzip_static on;
#特定浏览器禁用 gzip 压缩的指令,解决浏览器兼容性问题
gzip_disable "MSIE [1-6].";
#压缩级别5
gzip_comp_level 5;
#只有文件大小在 1 千字节及以上的文件才会被压缩
gzip_min_length 1k;
#启用4 个缓冲区来用于 gzip 压缩;每个缓冲区的大小为 16 千字节
gzip_buffers 4 16k;
#压缩的对象类型
gzip_types text/xml
text/css
text/plain
text/csv
text/javascript
text/json
text/x-component
application/javascript
application/x-javascript
application/xml
application/json
application/xhtml+xml
application/rss+xml
application/atom+xml
application/x-font-ttf
application/x-web-app-manifest+json
application/vnd.ms-fontobject
image/svg+xml
image/x-icon
font/ttf
font/opentype;
#不会在响应头中添加Vary: Accept-Encoding字段
gzip_vary off;
#证书路径
ssl_certificate /etc/nginx/cert/gdmp.com.pem;
#证书密钥路径
ssl_certificate_key /etc/nginx/cert/gdmp.com.key;
# SSL 会话超时时间为5分钟
ssl_session_timeout 5m;
#允许使用的加密算法套件
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#指定服务器支持的 SSL/TLS 协议版本
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#优先选择服务器配置的加密算法套件
ssl_prefer_server_ciphers on;
}
}
示例九:三节点192.168.0.90:81,192.168.0.91:81,192.168.0.92:81配置负载均衡,监听端口为80;算法为hash,30秒内如果有3次连接失败,停止向该服务器转发请求;开启与后端服务器的长连接,配置超时时间,配置错误页面跳转,配置日志,配置发送文件,开启gzip压缩,配置ssl证书。
http {
#自定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 配置访问日志,使用了名为main的日志格式
access_log /var/log/nginx/access.log main;
# 配置错误日志,默认日志级别
error_log /var/log/nginx/error.log;
upstream gdmp_servers {
hash $remote_addr consistent; # 通过配置一致性 hash 来防止调度异常
server 192.168.0.90:81 weight=3 max_fails=3 fail_timeout=30s;
server 192.168.0.92:81 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.0.91:81 weight=2 max_fails=3 fail_timeout=30s;
# 设置连接超时时间为300秒
keepalive_timeout 300s;
}
server {
listen 80;
server_name your_domain_name; # 替换为你的域名或IP地址(如果需要通过域名访问)
# 设置连接后端服务器的超时时间为300秒
proxy_connect_timeout 300s;
# 设置从后端服务器读取数据的超时时间为300秒
proxy_read_timeout 300s;
# 设置向后端服务器发送数据的超时时间为300秒
proxy_send_timeout 300s
#启用 sendfile 机制来处理文件传输
sendfile on;
#Nginx 会尝试将多个小的数据包合并成一个较大的数据包,然后再一次性发送给客户端
tcp_nopush on;
#TCP 连接上禁用 Nagle 算法
tcp_nodelay on;
location / {
#转发的后端服务器地址
proxy_pass http://gdmp;
#代理请求头中客户端请求的目标域名或 IP 地址和端口号
proxy_set_header Host $host;
#获取真实客户端 IP 地址
proxy_set_header X-Real-IP $remote_addr;
# 开启与后端服务器的长连接
proxy_http_version 1.1;
proxy_set_header Connection "";
}
# 配置错误页面跳转
error_page 500 502 503 504 /error.html;
location = /error.html {
internal;
root /usr/share/nginx/html;
}
# 配置访问日志,访问日志使用了combined这种预定义的日志格式
access_log /var/log/nginx/example.com_access.log combined;
# 配置错误日志,只记录警告及更严重级别的错误信息。
error_log /var/log/nginx/example.com_error.log warn;
#开启gzip
gzip on;
#开启静态页面压缩
gzip_static on;
#特定浏览器禁用 gzip 压缩的指令,解决浏览器兼容性问题
gzip_disable "MSIE [1-6].";
#压缩级别5
gzip_comp_level 5;
#只有文件大小在 1 千字节及以上的文件才会被压缩
gzip_min_length 1k;
#启用4 个缓冲区来用于 gzip 压缩;每个缓冲区的大小为 16 千字节
gzip_buffers 4 16k;
#压缩的对象类型
gzip_types text/xml
text/css
text/plain
text/csv
text/javascript
text/json
text/x-component
application/javascript
application/x-javascript
application/xml
application/json
application/xhtml+xml
application/rss+xml
application/atom+xml
application/x-font-ttf
application/x-web-app-manifest+json
application/vnd.ms-fontobject
image/svg+xml
image/x-icon
font/ttf
font/opentype;
#不会在响应头中添加Vary: Accept-Encoding字段
gzip_vary off;
#证书路径
ssl_certificate /etc/nginx/cert/gdmp.com.pem;
#证书密钥路径
ssl_certificate_key /etc/nginx/cert/gdmp.com.key;
# SSL 会话超时时间为5分钟
ssl_session_timeout 5m;
#允许使用的加密算法套件
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#指定服务器支持的 SSL/TLS 协议版本
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#优先选择服务器配置的加密算法套件
ssl_prefer_server_ciphers on;
}
}
备注:
proxy_connect_timeout,proxy_read_timeout ,proxy_send_timeout 只能在server或location块。
access_log,error_log指令通常应该在 http、server或 location块中使用。
sendfile 指令通常只能在 http、server 或 location 等特定的配置块中使用。
upstream 指令可以在 http 块和 server 块中使用。
stream指令可以在main 块使用,也可以在http 块之外独立的 stream 块。
证书只能在server或stream块。
gzip通常在 http或server块中使用。