一、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 300slocation / {#转发的后端服务器地址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 300slocation / {#转发的后端服务器地址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;#开启gzipgzip on;#开启静态页面压缩gzip_static on;#特定浏览器禁用 gzip 压缩的指令,解决浏览器兼容性问题gzip_disable "MSIE [1-6].";#压缩级别5gzip_comp_level 5;#只有文件大小在 1 千字节及以上的文件才会被压缩gzip_min_length 1k;#启用4 个缓冲区来用于 gzip 压缩;每个缓冲区的大小为 16 千字节gzip_buffers 4 16k;#压缩的对象类型gzip_types text/xml text/csstext/plaintext/csvtext/javascripttext/jsontext/x-componentapplication/javascriptapplication/x-javascriptapplication/xmlapplication/jsonapplication/xhtml+xmlapplication/rss+xmlapplication/atom+xmlapplication/x-font-ttfapplication/x-web-app-manifest+jsonapplication/vnd.ms-fontobjectimage/svg+xmlimage/x-iconfont/ttffont/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;#开启gzipgzip on;#开启静态页面压缩gzip_static on;#特定浏览器禁用 gzip 压缩的指令,解决浏览器兼容性问题gzip_disable "MSIE [1-6].";#压缩级别5gzip_comp_level 5;#只有文件大小在 1 千字节及以上的文件才会被压缩gzip_min_length 1k;#启用4 个缓冲区来用于 gzip 压缩;每个缓冲区的大小为 16 千字节gzip_buffers 4 16k;#压缩的对象类型gzip_types text/xml text/csstext/plaintext/csvtext/javascripttext/jsontext/x-componentapplication/javascriptapplication/x-javascriptapplication/xmlapplication/jsonapplication/xhtml+xmlapplication/rss+xmlapplication/atom+xmlapplication/x-font-ttfapplication/x-web-app-manifest+jsonapplication/vnd.ms-fontobjectimage/svg+xmlimage/x-iconfont/ttffont/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;#开启gzipgzip on;#开启静态页面压缩gzip_static on;#特定浏览器禁用 gzip 压缩的指令,解决浏览器兼容性问题gzip_disable "MSIE [1-6].";#压缩级别5gzip_comp_level 5;#只有文件大小在 1 千字节及以上的文件才会被压缩gzip_min_length 1k;#启用4 个缓冲区来用于 gzip 压缩;每个缓冲区的大小为 16 千字节gzip_buffers 4 16k;#压缩的对象类型gzip_types text/xml text/csstext/plaintext/csvtext/javascripttext/jsontext/x-componentapplication/javascriptapplication/x-javascriptapplication/xmlapplication/jsonapplication/xhtml+xmlapplication/rss+xmlapplication/atom+xmlapplication/x-font-ttfapplication/x-web-app-manifest+jsonapplication/vnd.ms-fontobjectimage/svg+xmlimage/x-iconfont/ttffont/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块中使用。